From: Paul Eggert Date: Wed, 1 Oct 2003 21:33:24 +0000 (+0000) Subject: Use "%no-default-prec" instead of "%default-prec 0". X-Git-Tag: BISON-2_0~202 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/22fccf958f542d321740f6718611912ca5fec985 Use "%no-default-prec" instead of "%default-prec 0". --- diff --git a/ChangeLog b/ChangeLog index 26b43003..f4ea6e4a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2003-10-01 Paul Eggert + + * src/parse-gram.h (PERCENT_NO_DEFAULT_PREC): New token. + (grammar_declaration): Use it. + * src/scan-gram.l: New token %no-default-prec. + * tests/conflicts.at: Revamp tests to use %no-default-prec. + * NEWS, doc/bison.texinfo: Document the above. + 2003-10-01 Akim Demaille VCG no longer supports long_straight_phase. diff --git a/NEWS b/NEWS index 66e18d36..59c53ff4 100644 --- a/NEWS +++ b/NEWS @@ -3,8 +3,8 @@ Bison News Changes in version 1.875c: -* New %default-prec declaration, to enable (the default) or disable - default rule precedences. +* New %no-default-prec declaration, to disable default rule precedences. + New %default-prec declaration, to reestablish the default. Changes in version 1.875b, 2003-06-17: diff --git a/doc/bison.texinfo b/doc/bison.texinfo index d69fc169..a6e2ee37 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -3684,8 +3684,7 @@ Using it in a way that would be associative is a syntax error. @end deffn @deffn {Directive} %default-prec -Specify whether to assign a precedence to rules lacking an -explicit @code{%prec} modifier +Assign a precedence to rules lacking an explicit @code{%prec} modifier (@pxref{Contextual Precedence, ,Context-Dependent Precedence}). @end deffn @@ -3759,6 +3758,12 @@ and so on. @xref{Multiple Parsers, ,Multiple Parsers in the Same Program}. @end deffn +@deffn {Directive} %no-default-prec +Do not assign a precedence to rules lacking an explicit @code{%prec} +modifier (@pxref{Contextual Precedence, ,Context-Dependent +Precedence}). +@end deffn + @deffn {Directive} %no-parser Do not include any C code in the parser file; generate tables only. The parser file contains just @code{#define} directives and static variable @@ -4862,20 +4867,20 @@ minus, Bison silently assumes that minus has its usual precedence. This kind of problem can be tricky to debug, since one typically discovers the mistake only by testing the code. -The @code{%default-prec 0;} declaration makes it easier to discover +The @code{%no-default-prec;} declaration makes it easier to discover this kind of problem systematically. It causes rules that lack a @code{%prec} modifier to have no precedence, even if the last terminal symbol mentioned in their components has a declared precedence. -If @code{%default-prec 0;} is in effect, you must specify @code{%prec} +If @code{%no-default-prec;} is in effect, you must specify @code{%prec} for all rules that participate in precedence conflict resolution. Then you will see any shift/reduce conflict until you tell Bison how to resolve it, either by changing your grammar or by adding an explicit precedence. This will probably add declarations to the grammar, but it helps to protect against incorrect rule precedences. -The effect of @code{%default-prec 0;} can be reversed by giving -@code{%default-prec 1;}, which is the default. +The effect of @code{%no-default-prec;} can be reversed by giving +@code{%default-prec;}, which is the default. @node Parser States @section Parser States @@ -6808,10 +6813,10 @@ parsing. @xref{Parser Function, ,The Parser Function @code{yyparse}}. Equip the parser for debugging. @xref{Decl Summary}. @end deffn -@deffn {Directive} %default-prec @var{state}; -Bison declaration to specify whether to assign a precedence to rules -that lack an explicit @samp{%prec} modifier. @xref{Contextual -Precedence, ,Context-Dependent Precedence}. +@deffn {Directive} %default-prec +Assign a precedence to rules that lack an explicit @samp{%prec} +modifier. @xref{Contextual Precedence, ,Context-Dependent +Precedence}. @end deffn @deffn {Directive} %defines @@ -6867,6 +6872,12 @@ function is applied to the two semantic values to get a single result. Bison declaration to rename the external symbols. @xref{Decl Summary}. @end deffn +@deffn {Directive} %no-default-prec +Do not assign a precedence to rules that lack an explicit @samp{%prec} +modifier. @xref{Contextual Precedence, ,Context-Dependent +Precedence}. +@end deffn + @deffn {Directive} %no-lines Bison declaration to avoid generating @code{#line} directives in the parser file. @xref{Decl Summary}. diff --git a/src/parse-gram.y b/src/parse-gram.y index 642a97cc..eb9c9709 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -126,6 +126,7 @@ int current_prec = 0; PERCENT_LEX_PARAM "%lex-param {...}" PERCENT_LOCATIONS "%locations" PERCENT_NAME_PREFIX "%name-prefix" + PERCENT_NO_DEFAULT_PREC "%no-default-prec" PERCENT_NO_LINES "%no-lines" PERCENT_NONDETERMINISTIC_PARSER "%nondeterministic-parser" @@ -241,12 +242,13 @@ grammar_declaration: symbol_printer_set (list->sym, $1, list->location); symbol_list_free ($2); } -| "%default-prec" INT +| "%default-prec" { - if (0 <= $2 && $2 <= 1) - default_prec = $2; - else - complain_at (@1, _("invalid value for `%default-prec'")); + default_prec = true; + } +| "%no-default-prec" + { + default_prec = false; } ; diff --git a/src/scan-gram.l b/src/scan-gram.l index a3275015..5cbacfc1 100644 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@ -198,6 +198,7 @@ splice (\\[ \f\t\v]*\n)* "%locations" return PERCENT_LOCATIONS; "%merge" return PERCENT_MERGE; "%name"[-_]"prefix" return PERCENT_NAME_PREFIX; + "%no"[-_]"default"[-_]"prec" return PERCENT_NO_DEFAULT_PREC; "%no"[-_]"lines" return PERCENT_NO_LINES; "%nonassoc" return PERCENT_NONASSOC; "%nondeterministic-parser" return PERCENT_NONDETERMINISTIC_PARSER; diff --git a/tests/conflicts.at b/tests/conflicts.at index 259827bd..25885d5c 100644 --- a/tests/conflicts.at +++ b/tests/conflicts.at @@ -550,11 +550,11 @@ input.y: warning: expected 0 reduce/reduce conflicts AT_CLEANUP -## ---------------------------- ## -## %default-prec without %prec ## -## ---------------------------- ## +## ------------------------------- ## +## %no-default-prec without %prec ## +## ------------------------------- ## -AT_SETUP([%default-prec without %prec]) +AT_SETUP([%no-default-prec without %prec]) AT_DATA([[input.y]], [[%left '+' @@ -562,7 +562,7 @@ AT_DATA([[input.y]], %% -%default-prec 0; +%no-default-prec; e: e '+' e | e '*' e @@ -576,11 +576,11 @@ AT_CHECK([bison -o input.c input.y], 0, [], AT_CLEANUP -## ------------------------- ## -## %default-prec with %prec ## -## ------------------------- ## +## ---------------------------- ## +## %no-default-prec with %prec ## +## ---------------------------- ## -AT_SETUP([%default-prec with %prec]) +AT_SETUP([%no-default-prec with %prec]) AT_DATA([[input.y]], [[%left '+' @@ -588,7 +588,7 @@ AT_DATA([[input.y]], %% -%default-prec 0; +%no-default-prec; e: e '+' e %prec '+' | e '*' e %prec '*' @@ -601,10 +601,10 @@ AT_CLEANUP ## ---------------- ## -## %default-prec 1 ## +## %default-prec ## ## ---------------- ## -AT_SETUP([%default-prec 1]) +AT_SETUP([%default-prec]) AT_DATA([[input.y]], [[%left '+' @@ -612,7 +612,7 @@ AT_DATA([[input.y]], %% -%default-prec 1; +%default-prec; e: e '+' e | e '*' e