Hi Christian, > Le 13 juil. 2020 à 07:56, Akim Demaille <a...@lrde.epita.fr> a écrit : > >> Le 12 juil. 2020 à 19:47, Christian Schoenebeck <schoeneb...@crudebyte.com> >> a écrit : >> >> And BTW: >> >>> The GLR parsers require a compiler for ISO C89 or later. >> >> Tough requirement! ;-) > > Yes, we could get rid of that mention, indeed. Besides, Valentin recently > pointed me to one very discreet place where glr.c actually had a declaration > after a statement, so it was actually C99. > > I'll clean that up, thanks!
I'm installing this. commit 88bd814bf103123c4f820f0a4f8fee85f8a63047 Author: Akim Demaille <akim.demai...@gmail.com> Date: Tue Jul 14 06:56:15 2020 +0200 doc: update GLR sections Reported by Christian Schoenebeck. * doc/bison.texi (GLR Parsers): Minor fixes. (Compiler Requirements for GLR): Remove, quite useless today. diff --git a/doc/bison.texi b/doc/bison.texi index d467497a..dcc3ca86 100644 --- a/doc/bison.texi +++ b/doc/bison.texi @@ -263,7 +263,6 @@ Writing GLR Parsers * Merging GLR Parses:: Using GLR parsers to resolve ambiguities. * GLR Semantic Actions:: Considerations for semantic values and deferred actions. * Semantic Predicates:: Controlling a parse with arbitrary computations. -* Compiler Requirements for GLR:: GLR parsers require a modern C compiler. Examples @@ -943,7 +942,6 @@ on the resulting values to produce an arbitrary merged result. * Merging GLR Parses:: Using GLR parsers to resolve ambiguities. * GLR Semantic Actions:: Considerations for semantic values and deferred actions. * Semantic Predicates:: Controlling a parse with arbitrary computations. -* Compiler Requirements for GLR:: GLR parsers require a modern C compiler. @end menu @node Simple GLR Parsers @@ -1372,14 +1370,14 @@ widget: @noindent is one way to allow the same parser to handle two different syntaxes for widgets. The clause preceded by @code{%?} is treated like an ordinary -action, except that its text is treated as an expression and is always +midrule action, except that its text is handled as an expression and is always evaluated immediately (even when in nondeterministic mode). If the expression yields 0 (false), the clause is treated as a syntax error, which, in a nondeterministic parser, causes the stack in which it is reduced -to die. In a deterministic parser, it acts like YYERROR. +to die. In a deterministic parser, it acts like @code{YYERROR}. As the example shows, predicates otherwise look like semantic actions, and -therefore you must be take them into account when determining the numbers +therefore you must take them into account when determining the numbers to use for denoting the semantic values of right-hand side symbols. Predicate actions, however, have no defined value, and may not be given labels. @@ -1393,7 +1391,7 @@ widget: @{ if (!new_syntax) YYERROR; @} "widget" id new_args @{ $$ = f($3, $4); @} | @{ if (new_syntax) YYERROR; @} - "widget" id old_args @{ $$ = f($3, $4); @} + "widget" id old_args @{ $$ = f($3, $4); @} ; @end example @@ -1411,36 +1409,6 @@ reports an error. Finally, be careful in writing predicates: deferred actions have not been evaluated, so that using them in a predicate will have undefined effects. -@node Compiler Requirements for GLR -@subsection Considerations when Compiling GLR Parsers -@cindex @code{inline} -@cindex GLR parsers and @code{inline} - -The GLR parsers require a compiler for ISO C89 or -later. In addition, they use the @code{inline} keyword, which is not -C89, but is C99 and is a common extension in pre-C99 compilers. It is -up to the user of these parsers to handle -portability issues. For instance, if using Autoconf and the Autoconf -macro @code{AC_C_INLINE}, a mere - -@example -%@{ - #include <config.h> -%@} -@end example - -@noindent -will suffice. Otherwise, we suggest - -@example -%@{ - #if (__STDC_VERSION__ < 199901 && ! defined __GNUC__ \ - && ! defined inline) - # define inline - #endif -%@} -@end example - @node Locations @section Locations @cindex location @@ -14824,13 +14792,13 @@ Bison. See the file @file{ABOUT-NLS} for more information. I can't build Bison because my C compiler is too old. @end quotation -Except for GLR parsers (@pxref{Compiler Requirements for GLR}), the C -code that Bison generates requires only C89 or later. However, Bison -itself requires common C99 features such as declarations after -statements. Bison's @code{configure} script attempts to enable C99 (or -later) support on compilers that default to pre-C99. If your compiler -lacks these C99 features entirely, GCC may well be a better choice; or -you can try upgrading to your compiler's latest version. +Except for GLR parsers (which require C99), the C code that Bison generates +requires only C89 or later. However, Bison itself requires common C99 +features such as declarations after statements. Bison's @code{configure} +script attempts to enable C99 (or later) support on compilers that default +to pre-C99. If your compiler lacks these C99 features entirely, GCC may +well be a better choice; or you can try upgrading to your compiler's latest +version. @node Where can I find help? @section Where can I find help?