X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/bb8e56ff67d289d15f1a4dc7f5e1502cd3bbfc24..1dce289a0070373300f399b2230c0dbdf366e729:/src/parse-gram.y diff --git a/src/parse-gram.y b/src/parse-gram.y index f0187fb3..e889eb5e 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -1,6 +1,6 @@ %{/* Bison Grammar Parser -*- C -*- - Copyright (C) 2002-2012 Free Software Foundation, Inc. + Copyright (C) 2002-2013 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -40,17 +40,13 @@ static YYLTYPE lloc_default (YYLTYPE const *, int); #define YY_LOCATION_PRINT(File, Loc) \ - location_print (File, Loc) + location_print (Loc, File) static void version_check (location const *loc, char const *version); -/* Request detailed syntax error messages, and pass them to GRAM_ERROR. - FIXME: depends on the undocumented availability of YYLLOC. */ -#undef yyerror -#define yyerror(Msg) \ - gram_error (&yylloc, Msg) static void gram_error (location const *, char const *); +/* A string that describes a char (e.g., 'a' -> "'a'"). */ static char const *char_name (char); %} @@ -68,7 +64,7 @@ static char const *char_name (char); */ static void - current_lhs(symbol *sym, location loc, named_ref *ref) + current_lhs (symbol *sym, location loc, named_ref *ref) { current_lhs_symbol = sym; current_lhs_location = loc; @@ -87,15 +83,15 @@ static char const *char_name (char); #define YYTYPE_UINT8 uint_fast8_t } -%verbose -%defines +%define api.prefix "gram_" +%define api.pure full %define locations -%define api.pure %define parse.error verbose %define parse.lac full %define parse.trace -%name-prefix "gram_" +%defines %expect 0 +%verbose %initial-action { @@ -254,9 +250,9 @@ static char const *char_name (char); { #define CASE(In, Out) \ case param_ ## In: fputs ("%" #Out, stderr); break - CASE(lex, lex-param); - CASE(parse, parse-param); - CASE(both, param); + CASE (lex, lex-param); + CASE (parse, parse-param); + CASE (both, param); #undef CASE case param_none: aver (false); break; } @@ -317,7 +313,6 @@ prologue_declaration: | "%expect" INT { expected_sr_conflicts = $2; } | "%expect-rr" INT { expected_rr_conflicts = $2; } | "%file-prefix" STRING { spec_file_prefix = $2; } -| "%file-prefix" "=" STRING { spec_file_prefix = $3; } /* deprecated */ | "%glr-parser" { nondeterministic_parser = true; @@ -334,11 +329,9 @@ prologue_declaration: } | "%language" STRING { language_argmatch ($2, grammar_prio, @1); } | "%name-prefix" STRING { spec_name_prefix = $2; } -| "%name-prefix" "=" STRING { spec_name_prefix = $3; } /* deprecated */ | "%no-lines" { no_lines_flag = true; } | "%nondeterministic-parser" { nondeterministic_parser = true; } | "%output" STRING { spec_outfile = $2; } -| "%output" "=" STRING { spec_outfile = $3; } /* deprecated */ | "%param" { current_param = $1; } params { current_param = param_none; } | "%require" STRING { version_check (&@2, $2); } | "%skeleton" STRING @@ -445,7 +438,7 @@ grammar_declaration: "%union" union_name braceless { union_seen = true; - muscle_code_grow ("stype", $3, @3); + muscle_code_grow ("union_members", $3, @3); code_scanner_last_string_free (); } ; @@ -506,7 +499,7 @@ symbols.prec: symbol.prec { $$ = symbol_list_sym_new ($1, @1); } | symbols.prec symbol.prec - { $$ = symbol_list_prepend ($1, symbol_list_sym_new ($2, @2)); } + { $$ = symbol_list_append ($1, symbol_list_sym_new ($2, @2)); } ; symbol.prec: @@ -519,12 +512,12 @@ symbols.1: symbol { $$ = symbol_list_sym_new ($1, @1); } | symbols.1 symbol - { $$ = symbol_list_prepend ($1, symbol_list_sym_new ($2, @2)); } + { $$ = symbol_list_append ($1, symbol_list_sym_new ($2, @2)); } ; generic_symlist: generic_symlist_item { $$ = $1; } -| generic_symlist generic_symlist_item { $$ = symbol_list_prepend ($1, $2); } +| generic_symlist generic_symlist_item { $$ = symbol_list_append ($1, $2); } ; generic_symlist_item: @@ -541,15 +534,15 @@ tag: /* One token definition. */ symbol_def: TAG - { - current_type = $1; - tag_seen = true; - } + { + current_type = $1; + tag_seen = true; + } | id - { - symbol_class_set ($1, current_class, @1, true); - symbol_type_set ($1, current_type, @1); - } + { + symbol_class_set ($1, current_class, @1, true); + symbol_type_set ($1, current_type, @1); + } | id INT { symbol_class_set ($1, current_class, @1, true); @@ -633,7 +626,7 @@ rhs: named_ref.opt: /* Nothing. */ { $$ = 0; } | - BRACKETED_ID { $$ = named_ref_new($1, @1); } + BRACKETED_ID { $$ = named_ref_new ($1, @1); } ; /*---------------------------. @@ -724,7 +717,6 @@ epilogue.opt: %% - /* Return the location of the left-hand side of a rule whose right-hand side is RHS[1] ... RHS[N]. Ignore empty nonterminals in the right-hand side, and return an empty location equal to the end