X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/39f4191608f2bbfb5a140b9ff96ecd56f5b287bb..f377f69fec28013c79db4efe12bbb9d48987fb2c:/src/parse-gram.y diff --git a/src/parse-gram.y b/src/parse-gram.y index df629d8f..a6d8ec70 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -30,6 +30,7 @@ %{ #include "system.h" +#include "complain.h" #include "muscle_tab.h" #include "files.h" #include "getargs.h" @@ -63,11 +64,11 @@ do { \ correctly typed access to it. */ #define yycontrol ((gram_control_t *) gram_control) -/* Request detailed parse error messages, and pass them to - GRAM_ERROR. */ +/* Request detailed parse error messages, and pass them to GRAM_ERROR. + FIXME: depends on the undocumented availability of YYLLOC.t */ #undef yyerror #define yyerror(Msg) \ - gram_error (yycontrol, &yylloc, Msg) + gram_error (&yylloc, Msg) #define YYPRINT(File, Type, Value) \ yyprint (File, Type, &Value) @@ -77,7 +78,7 @@ symbol_class current_class = unknown_sym; char *current_type = 0; symbol_t *current_lhs; location_t current_lhs_location; -associativity current_assoc; +assoc_t current_assoc; int current_prec = 0; braced_code_t current_braced_code = action_braced_code; %} @@ -90,13 +91,14 @@ braced_code_t current_braced_code = action_braced_code; symbol_list_t *list; int integer; char *string; - associativity assoc; + assoc_t assoc; }; -/* Define the tokens together with there human representation. */ -%token GRAM_EOF 0 "end of string" -%token STRING CHARACTER -%token INT +/* Define the tokens together with their human representation. */ +%token GRAM_EOF 0 "end of file" +%token STRING "string" +%token CHARACTER "character" +%token INT "integer" %token PERCENT_TOKEN "%token" %token PERCENT_NTERM "%nterm" @@ -111,41 +113,43 @@ braced_code_t current_braced_code = action_braced_code; %token PERCENT_RIGHT "%right" %token PERCENT_NONASSOC "%nonassoc" -%token PERCENT_EXPECT "%expect" -%token PERCENT_START "%start" -%token PERCENT_PREC "%prec" -%token PERCENT_DPREC "%dprec" -%token PERCENT_MERGE "%merge" -%token PERCENT_VERBOSE "%verbose" +%token PERCENT_EXPECT "%expect" +%token PERCENT_START "%start" +%token PERCENT_PREC "%prec" +%token PERCENT_DPREC "%dprec" +%token PERCENT_MERGE "%merge" +%token PERCENT_VERBOSE "%verbose" %token PERCENT_ERROR_VERBOSE "%error-verbose" -%token PERCENT_OUTPUT "%output" +%token PERCENT_OUTPUT "%output" %token PERCENT_FILE_PREFIX "%file-prefix" %token PERCENT_NAME_PREFIX "%name-prefix" -%token PERCENT_DEFINE "%define" +%token PERCENT_DEFINE "%define" %token PERCENT_PURE_PARSER "%pure-parser" -%token PERCENT_GLR_PARSER "%glr-parser" +%token PERCENT_GLR_PARSER "%glr-parser" %token PERCENT_DEFINES "%defines" %token PERCENT_YACC "%yacc" -%token PERCENT_DEBUG "%debug" -%token PERCENT_LOCATIONS "%locations" -%token PERCENT_NO_LINES "%no-lines" -%token PERCENT_SKELETON "%skeleton" +%token PERCENT_DEBUG "%debug" +%token PERCENT_LOCATIONS "%locations" +%token PERCENT_NO_LINES "%no-lines" +%token PERCENT_SKELETON "%skeleton" %token PERCENT_TOKEN_TABLE "%token-table" -%token TYPE -%token EQUAL "=" -%token SEMICOLON ";" -%token COLON ":" -%token PIPE "|" -%token ID "identifier" +%token TYPE "type" +%token EQUAL "=" +%token SEMICOLON ";" +%token COLON ":" +%token PIPE "|" +%token ID "identifier" %token PERCENT_PERCENT "%%" -%token PROLOGUE EPILOGUE -%token BRACED_CODE +%token PROLOGUE "%{...%}" +%token EPILOGUE "epilogue" +%token BRACED_CODE "{...}" + %type CHARACTER TYPE STRING string_content BRACED_CODE PROLOGUE EPILOGUE epilogue.opt action @@ -303,14 +307,14 @@ symbol_def: { symbol_class_set ($1, current_class, @1); symbol_type_set ($1, current_type, @1); - symbol_make_alias ($1, $2); + symbol_make_alias ($1, $2, @$); } | ID INT string_as_id { symbol_class_set ($1, current_class, @1); symbol_type_set ($1, current_type, @1); symbol_user_token_number_set ($1, $2, @2); - symbol_make_alias ($1, $3); + symbol_make_alias ($1, $3, @$); } ; @@ -338,6 +342,14 @@ grammar: rules_or_grammar_declaration: rules | grammar_declaration ";" + { + if (yacc_flag) + complain_at (@$, _("POSIX forbids declarations in the grammar")); + } +| error ";" + { + yyerrok; + } ; rules: @@ -450,9 +462,7 @@ yyprint (FILE *file, } void -gram_error (gram_control_t *control ATTRIBUTE_UNUSED, - location_t *yylloc, const char *msg) +gram_error (location_t *yylloc, const char *msg) { - LOCATION_PRINT (stderr, *yylloc); - fprintf (stderr, ": %s\n", msg); + complain_at (*yylloc, "%s", msg); }