summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Beckett <dave@dajobe.org>2020-09-29 19:15:52 -0700
committerGitHub <noreply@github.com>2020-09-29 19:15:52 -0700
commit82c58f9650902c28abcec73c78be3cc9b07cb0bd (patch)
treee0c3c25b79b77c0c398559acfbebc8c750a3b0d7
parent3e185c37bdb87a1539d0f331739419e3faeba516 (diff)
parent7738d46529dc60f2ec57ab0e5f200aba4a8560d6 (diff)
downloadraptor-82c58f9650902c28abcec73c78be3cc9b07cb0bd.tar.gz
Merge pull request #43 from akimd/update-bison-usage
Update bison usage
-rw-r--r--appveyor.yml12
-rwxr-xr-xscripts/fix-bison.pl143
-rw-r--r--src/CMakeLists.txt10
-rw-r--r--src/Makefile.am12
-rw-r--r--src/turtle_parser.y37
5 files changed, 110 insertions, 104 deletions
diff --git a/appveyor.yml b/appveyor.yml
index eeccb436..dbb01f97 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -51,14 +51,10 @@ before_build:
#- cmd: '%CYG_ROOT%/bin/flex -oturtle_lexer.c turtle_lexer.l'
#- cmd: '%CYG_ROOT%/bin/perl ../scripts/fix-flex.pl turtle_lexer.c > turtle_lexer.t'
#- cmd: '%CYG_ROOT%/bin/mv -f turtle_lexer.t turtle_lexer.c'
- #- cmd: '%CYG_ROOT%/bin/bison turtle_parser.y'
- #- cmd: '%CYG_ROOT%/bin/perl ../scripts/fix-bison.pl turtle_parser.tab.c > turtle_parser.c'
- #- cmd: '%CYG_ROOT%/bin/mv -f turtle_parser.tab.h turtle_parser.h'
- #- cmd: '%CYG_ROOT%/bin/rm -f turtle_parser.tab.c'
- #- cmd: '%CYG_ROOT%/bin/bison parsedate.y'
- #- cmd: '%CYG_ROOT%/bin/perl ../scripts/fix-bison.pl parsedate.tab.c > parsedate.c'
- #- cmd: '%CYG_ROOT%/bin/mv -f parsedate.tab.h parsedate.h'
- #- cmd: '%CYG_ROOT%/bin/rm -f parsedate.tab.c'
+ #- cmd: '%CYG_ROOT%/bin/bison -o turtle_parser.c turtle_parser.y'
+ #- cmd: '%CYG_ROOT%/bin/perl ../scripts/fix-bison.pl turtle_parser.c'
+ #- cmd: '%CYG_ROOT%/bin/bison -o parsedate.c parsedate.y'
+ #- cmd: '%CYG_ROOT%/bin/perl ../scripts/fix-bison.pl parsedate.c'
- cmd: 'md c:\projects\dest'
- cmd: 'md c:\projects\raptor\bld'
- cmd: 'md c:\projects\raptor\bldstatic'
diff --git a/scripts/fix-bison.pl b/scripts/fix-bison.pl
index b5b3e748..2327a7ae 100755
--- a/scripts/fix-bison.pl
+++ b/scripts/fix-bison.pl
@@ -4,8 +4,7 @@
#
# Usage:
# bison -b foo_parser -p foo_parser_ -d -v foo_parser.y
-# perl fix-bison.pl foo_parser.tab.c > $tmp
-# mv $tmp foo_parser.tab.c
+# perl fix-bison.pl foo_parser.tab.c
#
# Copyright (C) 2004-2014, David Beckett http://www.dajobe.org/
# Copyright (C) 2004, University of Bristol, UK http://www.bristol.ac.uk/
@@ -14,81 +13,95 @@
my $seen_yyerrlab1=0;
my $syntax_error_has_default=0;
my $line_offset=1; # #line directives always refer to the NEXT line
-while(<>) {
- # Remove code that causes a warning
- if(/Suppress GCC warning that yyerrlab1/) {
- do {
- $_=<>;
- $line_offset--; # skipped a line
- } while(!/^\#endif/);
- $line_offset--; # skipped a line
- next;
- }
- $seen_yyerrlab1=1 if /goto yyerrlab1/;
+my $extension = '.bak';
- s/^yyerrlab1:// unless $seen_yyerrlab1;
+sub fix($)
+{
+ my ($file) = @_;
+ my $backup = $file . $extension;
+ rename($file, $backup);
+ open(IN, "$backup");
+ open(OUT, ">$file");
- # Do not use macro name for a temporary variable
- s/unsigned int yylineno = /unsigned int yylineno_tmp = /;
- s/yyrule - 1, yylineno\)/yyrule - 1, yylineno_tmp\)/;
+ while(<IN>) {
+ # Remove code that causes a warning
+ if(/Suppress GCC warning that yyerrlab1/) {
+ do {
+ $_ = <IN>;
+ $line_offset--; # skipped a line
+ } while (!/^\#endif/);
+ $line_offset--; # skipped a line
+ next;
+ }
- # Do not (re)define prototypes that the system did better
- if(m%^void \*malloc\s*\(%) {
- $line_offset--; # skipped a line
- next;
- }
- if(m%^void free\s*\(%) {
- $line_offset--; # skipped a line
- next;
- }
+ $seen_yyerrlab1=1 if /goto yyerrlab1/;
- # syntax error handler will have a default case already in Bison 3.0.5+
- $syntax_error_has_default=1 if /default: \/\* Avoid compiler warnings. \*\//;
+ s/^yyerrlab1:// unless $seen_yyerrlab1;
- if(m%^\# undef YYCASE_$% and $syntax_error_has_default==0) {
- # Add a default value for yyformat on Bison <3.0.5, for coverity CID 10838
- my $line=$_;
- print qq{ default: yyformat = YY_("syntax error");\n};
- $line_offset++; # extra line
- print $line;
- next;
- }
+ # Do not use macro name for a temporary variable
+ s/unsigned int yylineno = /unsigned int yylineno_tmp = /;
+ s/yyrule - 1, yylineno\)/yyrule - 1, yylineno_tmp\)/;
- if(m%yysyntax_error_status = YYSYNTAX_ERROR%) {
- # Set yytoken to non-negative value for coverity CID 29259
- my $line=$_;
- print qq{if(yytoken < 0) yytoken = YYUNDEFTOK;\n};
- $line_offset++; # extra line
- print $line;
- next;
- }
+ # Do not (re)define prototypes that the system did better
+ if(m%^void \*malloc\s*\(%) {
+ $line_offset--; # skipped a line
+ next;
+ }
+ if(m%^void free\s*\(%) {
+ $line_offset--; # skipped a line
+ next;
+ }
- # Suppress warnings about empty declarations
- s/(^static int .*_init_globals.*);$/$1/;
+ # syntax error handler will have a default case already in Bison 3.0.5+
+ $syntax_error_has_default=1 if /default: \/\* Avoid compiler warnings. \*\//;
- # Remove always false condition
- if(m%if \(/\*CONSTCOND\*/ 0\)%) {
- $line_offset--; # skipped a line
- $_ = <>;
- $line_offset--; # skipped a line
- next;
- }
+ if(m%^\# undef YYCASE_$% and $syntax_error_has_default==0) {
+ # Add a default value for yyformat on Bison <3.0.5, for coverity CID 10838
+ my $line=$_;
+ print OUT qq{ default: yyformat = YY_("syntax error");\n};
+ $line_offset++; # extra line
+ print OUT $line;
+ next;
+ }
- # Remove always false condition; this macro is #defined to 0
- if(m%if \(yytable_value_is_error \(yyn\)\)%) {
- $line_offset--; # skipped a line
- $_ = <>;
- $line_offset--; # skipped a line
- next;
- }
+ if(m%yysyntax_error_status = YYSYNTAX_ERROR%) {
+ # Set yytoken to non-negative value for coverity CID 29259
+ my $line=$_;
+ print OUT qq{if(yytoken < 0) yytoken = YYUNDEFTOK;\n};
+ $line_offset++; # extra line
+ print OUT $line;
+ next;
+ }
+ # Suppress warnings about empty declarations
+ s/(^static int .*_init_globals.*);$/$1/;
+ # Remove always false condition
+ if(m%if \(/\*CONSTCOND\*/ 0\)%) {
+ $line_offset--; # skipped a line
+ $_ = <IN>;
+ $line_offset--; # skipped a line
+ next;
+ }
- # Fixup pending filename renaming, see above.
- # Fix line numbers.
- my $line=$. +$line_offset;
- s/^(\#line) \d+ (.*)\.tab\.c/$1 $line $2.c/;
+ # Remove always false condition; this macro is #defined to 0
+ if(m%if \(yytable_value_is_error \(yyn\)\)%) {
+ $line_offset--; # skipped a line
+ $_ = <IN>;
+ $line_offset--; # skipped a line
+ next;
+ }
+
+ # Fixup pending filename renaming, see above.
+ # Fix line numbers.
+ my $line=$. +$line_offset;
+ s/^(\#line) \d+ (.*\.c)/$1 $line $2/;
+
+ print OUT;
+ }
+}
- print;
+for my $file (@ARGV) {
+ fix $file;
}
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a7939215..6435836c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -36,14 +36,13 @@ IF(RAPTOR_PARSER_TURTLE OR RAPTOR_PARSER_TRIG)
# Generate the turtle parser
ADD_CUSTOM_TARGET(turtle_tables_tgt DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.tab.c)
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.tab.c
- COMMAND ${BISON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/turtle_parser.y
+ COMMAND ${BISON_EXECUTABLE} -o ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.c ${CMAKE_CURRENT_SOURCE_DIR}/turtle_parser.y
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/turtle_parser.y)
ADD_CUSTOM_TARGET(turtle_parser_tgt DEPENDS turtle_tables_tgt ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.c ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.h)
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.c
- COMMAND ${PERL_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/fix-bison.pl ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.tab.c > ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.c
+ COMMAND ${PERL_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/fix-bison.pl ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.c
DEPENDS turtle_tables_tgt)
- ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.h COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.tab.h ${CMAKE_CURRENT_BINARY_DIR}/turtle_parser.h)
# Generate the turtle lexer
ADD_CUSTOM_TARGET(turtle_flex_tgt DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/turtle_lexer.t)
@@ -165,14 +164,13 @@ IF(RAPTOR_PARSEDATE)
# Generate the date/time parser
ADD_CUSTOM_TARGET(parsedate_tables_tgt DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/parsedate.tab.c)
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/parsedate.tab.c
- COMMAND ${BISON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/parsedate.y
+ COMMAND ${BISON_EXECUTABLE} -o ${CMAKE_CURRENT_BINARY_DIR}/parsedate.c ${CMAKE_CURRENT_SOURCE_DIR}/parsedate.y
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/parsedate.y)
ADD_CUSTOM_TARGET(parsedate_tgt DEPENDS parsedate_tables_tgt ${CMAKE_CURRENT_BINARY_DIR}/parsedate.c ${CMAKE_CURRENT_BINARY_DIR}/parsedate.h)
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/parsedate.c
- COMMAND ${PERL_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/fix-bison.pl ${CMAKE_CURRENT_BINARY_DIR}/parsedate.tab.c > ${CMAKE_CURRENT_BINARY_DIR}/parsedate.c
+ COMMAND ${PERL_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/fix-bison.pl ${CMAKE_CURRENT_BINARY_DIR}/parsedate.c
DEPENDS parsedate_tables_tgt)
- ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/parsedate.h COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/parsedate.tab.h ${CMAKE_CURRENT_BINARY_DIR}/parsedate.h)
ENDIF(RAPTOR_PARSEDATE)
IF(BUILD_SHARED_LIBS)
diff --git a/src/Makefile.am b/src/Makefile.am
index da4cce95..906c884a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -219,19 +219,15 @@ turtle_lexer.h: turtle_lexer.c ; @exit 0
turtle_parser.c: $(srcdir)/turtle_parser.y $(top_srcdir)/scripts/fix-bison.pl
$(AM_V_GEN) \
- $(BISON) $(srcdir)/turtle_parser.y; \
- $(PERL) $(top_srcdir)/scripts/fix-bison.pl turtle_parser.tab.c > $@; \
- mv -f turtle_parser.tab.h turtle_parser.h; \
- rm -f turtle_parser.tab.c
+ $(BISON) -o $@ $(srcdir)/turtle_parser.y; \
+ $(PERL) $(top_srcdir)/scripts/fix-bison.pl $@
turtle_parser.h: turtle_parser.c ; @exit 0
parsedate.c: $(srcdir)/parsedate.y $(top_srcdir)/scripts/fix-bison.pl
$(AM_V_GEN) \
- $(BISON) $(srcdir)/parsedate.y; \
- $(PERL) $(top_srcdir)/scripts/fix-bison.pl parsedate.tab.c > $@; \
- mv -f parsedate.tab.h parsedate.h; \
- rm -f parsedate.tab.c
+ $(BISON) -o $@ $(srcdir)/parsedate.y; \
+ $(PERL) $(top_srcdir)/scripts/fix-bison.pl $@
parsedate.h: parsedate.c ; @exit 0
diff --git a/src/turtle_parser.y b/src/turtle_parser.y
index 5339c08e..d18e68e9 100644
--- a/src/turtle_parser.y
+++ b/src/turtle_parser.y
@@ -63,9 +63,6 @@
#endif
-/* Make verbose error messages for syntax errors */
-#define YYERROR_VERBOSE 1
-
/* Fail with an debug error message if RAPTOR_DEBUG > 1 */
#if defined(RAPTOR_DEBUG) && RAPTOR_DEBUG > 1
#define YYERROR_MSG(msg) do { fputs("** YYERROR ", RAPTOR_DEBUG_FH); fputs(msg, RAPTOR_DEBUG_FH); fputc('\n', RAPTOR_DEBUG_FH); YYERROR; } while(0)
@@ -125,6 +122,9 @@ static void raptor_turtle_handle_statement(raptor_parser *parser, raptor_stateme
/* Write parser header file with macros (bison -d) */
%defines
+/* Make verbose error messages for syntax errors */
+%define parse.error verbose
+
/* Write output file with verbose descriptions of parser states */
%verbose
@@ -171,16 +171,19 @@ static void raptor_turtle_handle_statement(raptor_parser *parser, raptor_stateme
%token SPARQL_BASE "BASE"
/* literals */
-%token <string> STRING_LITERAL "string literal"
-%token <uri> URI_LITERAL "URI literal"
-%token <uri> GRAPH_NAME_LEFT_CURLY "Graph URI literal {"
-%token <string> BLANK_LITERAL "blank node"
-%token <uri> QNAME_LITERAL "QName"
-%token <string> IDENTIFIER "identifier"
-%token <string> LANGTAG "langtag"
-%token <string> INTEGER_LITERAL "integer literal"
-%token <string> FLOATING_LITERAL "floating point literal"
-%token <string> DECIMAL_LITERAL "decimal literal"
+%token
+ <string>
+ STRING_LITERAL "string literal"
+ IDENTIFIER "identifier"
+ LANGTAG "langtag"
+ INTEGER_LITERAL "integer literal"
+ FLOATING_LITERAL "floating point literal"
+ DECIMAL_LITERAL "decimal literal"
+ BLANK_LITERAL "blank node"
+ <uri>
+ URI_LITERAL "URI literal"
+ GRAPH_NAME_LEFT_CURLY "Graph URI literal {"
+ QNAME_LITERAL "QName"
/* syntax error */
%token ERROR_TOKEN
@@ -193,22 +196,22 @@ static void raptor_turtle_handle_statement(raptor_parser *parser, raptor_stateme
%destructor {
if($$)
RAPTOR_FREE(char*, $$);
-} STRING_LITERAL BLANK_LITERAL INTEGER_LITERAL FLOATING_LITERAL DECIMAL_LITERAL IDENTIFIER LANGTAG
+} <string>
%destructor {
if($$)
raptor_free_uri($$);
-} URI_LITERAL QNAME_LITERAL
+} <uri>
%destructor {
if($$)
raptor_free_term($$);
-} subject predicate object verb literal resource blankNode collection
+} <identifier>
%destructor {
if($$)
raptor_free_sequence($$);
-} triples objectList itemList predicateObjectList predicateObjectListOpt
+} <sequence>
%%