mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-10 12:53:03 +00:00
Using #define YYSTYPE has always been strongly discouraged in C++. Macros are dangerous and can result in subtle bugs. https://lists.gnu.org/r/bug-bison/2020-12/msg00007.html Maybe some people are currently using #define YYSTYPE. Instead of dropping support right now, first issue a warning. Bison can "see" if YYDEBUG is defined (it could even be on the command line), only the compiler knows. Unfortunately `#warning` is non-portable, and actually GCC even dies on it when `-pedantic` is enabled. So we need to use `#pragma message`. We must make it conditional as some compilers might not support it, but it doesn't matter if only _some_ compilers emit the warning: it should be enough to catch the attention of the developers. * data/skeletons/c++.m4: Issue a warning when the user defined YYSTYPE. * tests/actions.at: Don't #define YYSTYPE. * tests/headers.at (Several parsers): Ignore the YYSTYPE in the warning.
AT_BISON_OPTION_PUSHDEFS/AT_BISON_OPTION_POPDEFS
These two macros must be given the (main) directives so that they define a number of other macros to:
- what the language is (so what compiler tool chain to use, what definition of yylex/yyerror, etc.)
- what skeleton is used
Keywords
The following keywords are used to label tests (with AT_KEYWORDS(category)). Please follow them and avoid creating synonyms.
- action
- api.value.type
- c++: c++ language
- cex: counterexamples.
- d: d language
- deprec: deprecated features.
- diagnostics
- glr
- graph
- java
- lac
- %merge
- multistart
- push
- report: for automaton dumps
- %union
- variant
Calculator
The grammar features several special directives:
!!YYERROR!+YYACCEPT!-YYABORT!*YYNOMEM