diff options
Diffstat (limited to 'contrib/byacc/test/yacc')
246 files changed, 31785 insertions, 0 deletions
diff --git a/contrib/byacc/test/yacc/big_b.error b/contrib/byacc/test/yacc/big_b.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/big_b.error diff --git a/contrib/byacc/test/yacc/big_b.output b/contrib/byacc/test/yacc/big_b.output new file mode 100644 index 000000000000..889f0130b120 --- /dev/null +++ b/contrib/byacc/test/yacc/big_b.output @@ -0,0 +1,20 @@ +YACC: w - -B flag unsupported, reconfigure with --enable-btyacc +Usage: YACC [options] filename + +Options: + -b file_prefix set filename prefix (default "y.") + -B create a backtracking parser + -d write definitions (.tab.h) + -D enable value stack memory reclamation + -i write interface (y.tab.i) + -g write a graphical description + -l suppress #line directives + -L enable position processing, e.g., "%locations" + -o output_file (default ".tab.c") + -p symbol_prefix set symbol prefix (default "yy") + -P create a reentrant parser, e.g., "%pure-parser" + -r produce separate code and table files (y.code.c) + -s suppress #define's for quoted names in %token lines + -t add debugging support + -v write description (y.output) + -V show version information and exit diff --git a/contrib/byacc/test/yacc/big_l.error b/contrib/byacc/test/yacc/big_l.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/big_l.error diff --git a/contrib/byacc/test/yacc/big_l.output b/contrib/byacc/test/yacc/big_l.output new file mode 100644 index 000000000000..889f0130b120 --- /dev/null +++ b/contrib/byacc/test/yacc/big_l.output @@ -0,0 +1,20 @@ +YACC: w - -B flag unsupported, reconfigure with --enable-btyacc +Usage: YACC [options] filename + +Options: + -b file_prefix set filename prefix (default "y.") + -B create a backtracking parser + -d write definitions (.tab.h) + -D enable value stack memory reclamation + -i write interface (y.tab.i) + -g write a graphical description + -l suppress #line directives + -L enable position processing, e.g., "%locations" + -o output_file (default ".tab.c") + -p symbol_prefix set symbol prefix (default "yy") + -P create a reentrant parser, e.g., "%pure-parser" + -r produce separate code and table files (y.code.c) + -s suppress #define's for quoted names in %token lines + -t add debugging support + -v write description (y.output) + -V show version information and exit diff --git a/contrib/byacc/test/yacc/calc.error b/contrib/byacc/test/yacc/calc.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/calc.error diff --git a/contrib/byacc/test/yacc/calc.output b/contrib/byacc/test/yacc/calc.output new file mode 100644 index 000000000000..3aed47511c93 --- /dev/null +++ b/contrib/byacc/test/yacc/calc.output @@ -0,0 +1,461 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr '+' expr + 8 | expr '-' expr + 9 | expr '*' expr + 10 | expr '/' expr + 11 | expr '%' expr + 12 | expr '&' expr + 13 | expr '|' expr + 14 | '-' expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + DIGIT shift 3 + LETTER shift 4 + '-' shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + number : DIGIT . (17) + + . reduce 17 + + +state 4 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 11 + '|' reduce 15 + '&' reduce 15 + '+' reduce 15 + '-' reduce 15 + '*' reduce 15 + '/' reduce 15 + '%' reduce 15 + '\n' reduce 15 + + +state 5 + expr : '-' . expr (14) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 13 + number goto 9 + + +state 6 + expr : '(' . expr ')' (6) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + '|' reduce 16 + '&' reduce 16 + '+' reduce 16 + '-' reduce 16 + '*' reduce 16 + '/' reduce 16 + '%' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + stat : LETTER '=' . expr (5) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 12 + expr : LETTER . (15) + + . reduce 15 + + +state 13 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : '-' expr . (14) + + . reduce 14 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr '|' . expr (13) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr '&' . expr (12) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr '+' . expr (7) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr '-' . expr (8) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr '*' . expr (9) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr '/' . expr (10) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '%' . expr (11) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +state 26 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +state 27 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr '&' expr . (12) + expr : expr . '|' expr (13) + + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 12 + '&' reduce 12 + '\n' reduce 12 + ')' reduce 12 + + +state 28 + expr : expr . '+' expr (7) + expr : expr '+' expr . (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 7 + '&' reduce 7 + '+' reduce 7 + '-' reduce 7 + '\n' reduce 7 + ')' reduce 7 + + +state 29 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr '-' expr . (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 8 + '&' reduce 8 + '+' reduce 8 + '-' reduce 8 + '\n' reduce 8 + ')' reduce 8 + + +state 30 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr '*' expr . (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 9 + + +state 31 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr '/' expr . (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 10 + + +state 32 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr '%' expr . (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 11 + + +16 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/calc.tab.c b/contrib/byacc/test/yacc/calc.tab.c new file mode 100644 index 000000000000..762dfa182e2d --- /dev/null +++ b/contrib/byacc/test/yacc/calc.tab.c @@ -0,0 +1,674 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse calc_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex calc_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror calc_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar calc_char +#endif /* yychar */ + +#ifndef yyval +#define yyval calc_val +#endif /* yyval */ + +#ifndef yylval +#define yylval calc_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug calc_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs calc_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag calc_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs calc_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen calc_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred calc_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto calc_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex calc_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex calc_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex calc_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable calc_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck calc_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname calc_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule calc_rule +#endif /* yyrule */ +#define YYPREFIX "calc_" + +#define YYPURE 0 + +#line 2 "calc.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +extern int yylex(void); +static void yyerror(const char *s); + +#line 111 "calc.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define DIGIT 257 +#define LETTER 258 +#define UMINUS 259 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT calc_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT calc_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT calc_defred[] = { 1, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, + 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, + 10, 11, +}; +static const YYINT calc_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT calc_sindex[] = { 0, + -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, + -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, + -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, + 0, 0, +}; +static const YYINT calc_rindex[] = { 0, + 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, + 0, 0, +}; +static const YYINT calc_gindex[] = { 0, + 0, 65, 0, +}; +#define YYTABLESIZE 220 +static const YYINT calc_table[] = { 6, + 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, + 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, + 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, + 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, + 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, + 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, + 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, + 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, + 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, + 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, + 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, +}; +static const YYINT calc_check[] = { 40, + 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, + 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, + -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, + -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, + -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, + 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, + -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, + 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, + 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, + -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, + -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, + -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, + -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 259 +#define YYUNDFTOKEN 265 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const calc_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", +}; +static const char *const calc_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr '+' expr", +"expr : expr '-' expr", +"expr : expr '*' expr", +"expr : expr '/' expr", +"expr : expr '%' expr", +"expr : expr '&' expr", +"expr : expr '|' expr", +"expr : '-' expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 66 "calc.y" + /* start of programs */ + +int +main (void) +{ + while(!feof(stdin)) { + yyparse(); + } + return 0; +} + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) +{ + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + yylval = c - '0'; + return ( DIGIT ); + } + return( c ); +} +#line 354 "calc.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 28 "calc.y" + { yyerrok ; } +break; +case 4: +#line 32 "calc.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 34 "calc.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 38 "calc.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 40 "calc.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 42 "calc.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 44 "calc.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 46 "calc.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 48 "calc.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 50 "calc.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 52 "calc.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 54 "calc.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 56 "calc.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 61 "calc.y" + { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 63 "calc.y" + { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 616 "calc.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/calc.tab.h b/contrib/byacc/test/yacc/calc.tab.h new file mode 100644 index 000000000000..19211182d6b3 --- /dev/null +++ b/contrib/byacc/test/yacc/calc.tab.h @@ -0,0 +1,3 @@ +#define DIGIT 257 +#define LETTER 258 +#define UMINUS 259 diff --git a/contrib/byacc/test/yacc/calc1.error b/contrib/byacc/test/yacc/calc1.error new file mode 100644 index 000000000000..9c1f7152c30e --- /dev/null +++ b/contrib/byacc/test/yacc/calc1.error @@ -0,0 +1,2 @@ +YACC: 2 rules never reduced +YACC: 18 shift/reduce conflicts, 26 reduce/reduce conflicts. diff --git a/contrib/byacc/test/yacc/calc1.output b/contrib/byacc/test/yacc/calc1.output new file mode 100644 index 000000000000..2b628d47ddba --- /dev/null +++ b/contrib/byacc/test/yacc/calc1.output @@ -0,0 +1,877 @@ + 0 $accept : line $end + + 1 lines : + 2 | lines line + + 3 line : dexp '\n' + 4 | vexp '\n' + 5 | DREG '=' dexp '\n' + 6 | VREG '=' vexp '\n' + 7 | error '\n' + + 8 dexp : CONST + 9 | DREG + 10 | dexp '+' dexp + 11 | dexp '-' dexp + 12 | dexp '*' dexp + 13 | dexp '/' dexp + 14 | '-' dexp + 15 | '(' dexp ')' + + 16 vexp : dexp + 17 | '(' dexp ',' dexp ')' + 18 | VREG + 19 | vexp '+' vexp + 20 | dexp '+' vexp + 21 | vexp '-' vexp + 22 | dexp '-' vexp + 23 | vexp '*' vexp + 24 | dexp '*' vexp + 25 | vexp '/' vexp + 26 | dexp '/' vexp + 27 | '-' vexp + 28 | '(' vexp ')' + +state 0 + $accept : . line $end (0) + + error shift 1 + DREG shift 2 + VREG shift 3 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + line goto 7 + dexp goto 8 + vexp goto 9 + + +state 1 + line : error . '\n' (7) + + '\n' shift 10 + . error + + +state 2 + line : DREG . '=' dexp '\n' (5) + dexp : DREG . (9) + + '=' shift 11 + '+' reduce 9 + '-' reduce 9 + '*' reduce 9 + '/' reduce 9 + '\n' reduce 9 + + +state 3 + line : VREG . '=' vexp '\n' (6) + vexp : VREG . (18) + + '=' shift 12 + '+' reduce 18 + '-' reduce 18 + '*' reduce 18 + '/' reduce 18 + '\n' reduce 18 + + +state 4 + dexp : CONST . (8) + + . reduce 8 + + +state 5 + dexp : '-' . dexp (14) + vexp : '-' . vexp (27) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 15 + vexp goto 16 + + +state 6 + dexp : '(' . dexp ')' (15) + vexp : '(' . dexp ',' dexp ')' (17) + vexp : '(' . vexp ')' (28) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 17 + vexp goto 18 + + +state 7 + $accept : line . $end (0) + + $end accept + + +8: shift/reduce conflict (shift 19, reduce 16) on '+' +8: shift/reduce conflict (shift 20, reduce 16) on '-' +8: shift/reduce conflict (shift 21, reduce 16) on '*' +8: shift/reduce conflict (shift 22, reduce 16) on '/' +8: shift/reduce conflict (shift 23, reduce 16) on '\n' +state 8 + line : dexp . '\n' (3) + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + '+' shift 19 + '-' shift 20 + '*' shift 21 + '/' shift 22 + '\n' shift 23 + + +state 9 + line : vexp . '\n' (4) + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '+' shift 24 + '-' shift 25 + '*' shift 26 + '/' shift 27 + '\n' shift 28 + . error + + +state 10 + line : error '\n' . (7) + + . reduce 7 + + +state 11 + line : DREG '=' . dexp '\n' (5) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 31 + + +state 12 + line : VREG '=' . vexp '\n' (6) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 32 + vexp goto 33 + + +state 13 + dexp : DREG . (9) + + . reduce 9 + + +state 14 + vexp : VREG . (18) + + . reduce 18 + + +15: reduce/reduce conflict (reduce 14, reduce 16) on '+' +15: reduce/reduce conflict (reduce 14, reduce 16) on '-' +15: reduce/reduce conflict (reduce 14, reduce 16) on '*' +15: reduce/reduce conflict (reduce 14, reduce 16) on '/' +15: reduce/reduce conflict (reduce 14, reduce 16) on '\n' +15: reduce/reduce conflict (reduce 14, reduce 16) on ')' +state 15 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : '-' dexp . (14) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + . reduce 14 + + +state 16 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + vexp : '-' vexp . (27) + + . reduce 27 + + +17: shift/reduce conflict (shift 19, reduce 16) on '+' +17: shift/reduce conflict (shift 20, reduce 16) on '-' +17: shift/reduce conflict (shift 21, reduce 16) on '*' +17: shift/reduce conflict (shift 22, reduce 16) on '/' +17: shift/reduce conflict (shift 34, reduce 16) on ')' +state 17 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : '(' dexp . ')' (15) + vexp : dexp . (16) + vexp : '(' dexp . ',' dexp ')' (17) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + '+' shift 19 + '-' shift 20 + '*' shift 21 + '/' shift 22 + ')' shift 34 + ',' shift 35 + + +state 18 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + vexp : '(' vexp . ')' (28) + + '+' shift 24 + '-' shift 25 + '*' shift 26 + '/' shift 27 + ')' shift 36 + . error + + +state 19 + dexp : dexp '+' . dexp (10) + vexp : dexp '+' . vexp (20) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 37 + vexp goto 38 + + +state 20 + dexp : dexp '-' . dexp (11) + vexp : dexp '-' . vexp (22) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 39 + vexp goto 40 + + +state 21 + dexp : dexp '*' . dexp (12) + vexp : dexp '*' . vexp (24) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 41 + vexp goto 42 + + +state 22 + dexp : dexp '/' . dexp (13) + vexp : dexp '/' . vexp (26) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 43 + vexp goto 44 + + +state 23 + line : dexp '\n' . (3) + + . reduce 3 + + +state 24 + vexp : vexp '+' . vexp (19) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 32 + vexp goto 45 + + +state 25 + vexp : vexp '-' . vexp (21) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 32 + vexp goto 46 + + +state 26 + vexp : vexp '*' . vexp (23) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 32 + vexp goto 47 + + +state 27 + vexp : vexp '/' . vexp (25) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 32 + vexp goto 48 + + +state 28 + line : vexp '\n' . (4) + + . reduce 4 + + +state 29 + dexp : '-' . dexp (14) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 49 + + +state 30 + dexp : '(' . dexp ')' (15) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 50 + + +state 31 + line : DREG '=' dexp . '\n' (5) + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + + '+' shift 51 + '-' shift 52 + '*' shift 53 + '/' shift 54 + '\n' shift 55 + . error + + +32: shift/reduce conflict (shift 19, reduce 16) on '+' +32: shift/reduce conflict (shift 20, reduce 16) on '-' +32: shift/reduce conflict (shift 21, reduce 16) on '*' +32: shift/reduce conflict (shift 22, reduce 16) on '/' +state 32 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + '+' shift 19 + '-' shift 20 + '*' shift 21 + '/' shift 22 + '\n' reduce 16 + ')' reduce 16 + + +state 33 + line : VREG '=' vexp . '\n' (6) + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '+' shift 24 + '-' shift 25 + '*' shift 26 + '/' shift 27 + '\n' shift 56 + . error + + +state 34 + dexp : '(' dexp ')' . (15) + + . reduce 15 + + +state 35 + vexp : '(' dexp ',' . dexp ')' (17) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 57 + + +state 36 + vexp : '(' vexp ')' . (28) + + . reduce 28 + + +37: reduce/reduce conflict (reduce 10, reduce 16) on '+' +37: reduce/reduce conflict (reduce 10, reduce 16) on '-' +37: shift/reduce conflict (shift 21, reduce 16) on '*' +37: shift/reduce conflict (shift 22, reduce 16) on '/' +37: reduce/reduce conflict (reduce 10, reduce 16) on '\n' +37: reduce/reduce conflict (reduce 10, reduce 16) on ')' +state 37 + dexp : dexp . '+' dexp (10) + dexp : dexp '+' dexp . (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + '*' shift 21 + '/' shift 22 + '+' reduce 10 + '-' reduce 10 + '\n' reduce 10 + ')' reduce 10 + ',' reduce 10 + + +state 38 + vexp : vexp . '+' vexp (19) + vexp : dexp '+' vexp . (20) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '*' shift 26 + '/' shift 27 + '+' reduce 20 + '-' reduce 20 + '\n' reduce 20 + ')' reduce 20 + + +39: reduce/reduce conflict (reduce 11, reduce 16) on '+' +39: reduce/reduce conflict (reduce 11, reduce 16) on '-' +39: shift/reduce conflict (shift 21, reduce 16) on '*' +39: shift/reduce conflict (shift 22, reduce 16) on '/' +39: reduce/reduce conflict (reduce 11, reduce 16) on '\n' +39: reduce/reduce conflict (reduce 11, reduce 16) on ')' +state 39 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp '-' dexp . (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + '*' shift 21 + '/' shift 22 + '+' reduce 11 + '-' reduce 11 + '\n' reduce 11 + ')' reduce 11 + ',' reduce 11 + + +state 40 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : dexp '-' vexp . (22) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '*' shift 26 + '/' shift 27 + '+' reduce 22 + '-' reduce 22 + '\n' reduce 22 + ')' reduce 22 + + +41: reduce/reduce conflict (reduce 12, reduce 16) on '+' +41: reduce/reduce conflict (reduce 12, reduce 16) on '-' +41: reduce/reduce conflict (reduce 12, reduce 16) on '*' +41: reduce/reduce conflict (reduce 12, reduce 16) on '/' +41: reduce/reduce conflict (reduce 12, reduce 16) on '\n' +41: reduce/reduce conflict (reduce 12, reduce 16) on ')' +state 41 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp '*' dexp . (12) + dexp : dexp . '/' dexp (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + . reduce 12 + + +state 42 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : dexp '*' vexp . (24) + vexp : vexp . '/' vexp (25) + + . reduce 24 + + +43: reduce/reduce conflict (reduce 13, reduce 16) on '+' +43: reduce/reduce conflict (reduce 13, reduce 16) on '-' +43: reduce/reduce conflict (reduce 13, reduce 16) on '*' +43: reduce/reduce conflict (reduce 13, reduce 16) on '/' +43: reduce/reduce conflict (reduce 13, reduce 16) on '\n' +43: reduce/reduce conflict (reduce 13, reduce 16) on ')' +state 43 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : dexp '/' dexp . (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + . reduce 13 + + +state 44 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + vexp : dexp '/' vexp . (26) + + . reduce 26 + + +state 45 + vexp : vexp . '+' vexp (19) + vexp : vexp '+' vexp . (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '*' shift 26 + '/' shift 27 + '+' reduce 19 + '-' reduce 19 + '\n' reduce 19 + ')' reduce 19 + + +state 46 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp '-' vexp . (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '*' shift 26 + '/' shift 27 + '+' reduce 21 + '-' reduce 21 + '\n' reduce 21 + ')' reduce 21 + + +state 47 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp '*' vexp . (23) + vexp : vexp . '/' vexp (25) + + . reduce 23 + + +state 48 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + vexp : vexp '/' vexp . (25) + + . reduce 25 + + +state 49 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : '-' dexp . (14) + + . reduce 14 + + +state 50 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : '(' dexp . ')' (15) + + '+' shift 51 + '-' shift 52 + '*' shift 53 + '/' shift 54 + ')' shift 34 + . error + + +state 51 + dexp : dexp '+' . dexp (10) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 58 + + +state 52 + dexp : dexp '-' . dexp (11) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 59 + + +state 53 + dexp : dexp '*' . dexp (12) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 60 + + +state 54 + dexp : dexp '/' . dexp (13) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 61 + + +state 55 + line : DREG '=' dexp '\n' . (5) + + . reduce 5 + + +state 56 + line : VREG '=' vexp '\n' . (6) + + . reduce 6 + + +state 57 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + vexp : '(' dexp ',' dexp . ')' (17) + + '+' shift 51 + '-' shift 52 + '*' shift 53 + '/' shift 54 + ')' shift 62 + . error + + +state 58 + dexp : dexp . '+' dexp (10) + dexp : dexp '+' dexp . (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + + '*' shift 53 + '/' shift 54 + '+' reduce 10 + '-' reduce 10 + '\n' reduce 10 + ')' reduce 10 + + +state 59 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp '-' dexp . (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + + '*' shift 53 + '/' shift 54 + '+' reduce 11 + '-' reduce 11 + '\n' reduce 11 + ')' reduce 11 + + +state 60 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp '*' dexp . (12) + dexp : dexp . '/' dexp (13) + + . reduce 12 + + +state 61 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : dexp '/' dexp . (13) + + . reduce 13 + + +state 62 + vexp : '(' dexp ',' dexp ')' . (17) + + . reduce 17 + + +Rules never reduced: + lines : (1) + lines : lines line (2) + + +State 8 contains 5 shift/reduce conflicts. +State 15 contains 6 reduce/reduce conflicts. +State 17 contains 5 shift/reduce conflicts. +State 32 contains 4 shift/reduce conflicts. +State 37 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. +State 39 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. +State 41 contains 6 reduce/reduce conflicts. +State 43 contains 6 reduce/reduce conflicts. + + +15 terminals, 5 nonterminals +29 grammar rules, 63 states diff --git a/contrib/byacc/test/yacc/calc1.tab.c b/contrib/byacc/test/yacc/calc1.tab.c new file mode 100644 index 000000000000..7a5f925f9149 --- /dev/null +++ b/contrib/byacc/test/yacc/calc1.tab.c @@ -0,0 +1,914 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse calc1_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex calc1_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror calc1_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar calc1_char +#endif /* yychar */ + +#ifndef yyval +#define yyval calc1_val +#endif /* yyval */ + +#ifndef yylval +#define yylval calc1_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug calc1_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs calc1_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag calc1_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs calc1_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen calc1_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred calc1_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto calc1_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex calc1_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex calc1_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex calc1_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable calc1_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck calc1_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname calc1_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule calc1_rule +#endif /* yyrule */ +#define YYPREFIX "calc1_" + +#define YYPURE 0 + +#line 2 "calc1.y" + +/* http://dinosaur.compilertools.net/yacc/index.html */ + +#include <stdlib.h> +#include <stdio.h> +#include <ctype.h> +#include <math.h> + +typedef struct interval +{ + double lo, hi; +} +INTERVAL; + +INTERVAL vmul(double, double, INTERVAL); +INTERVAL vdiv(double, double, INTERVAL); + +extern int yylex(void); +static void yyerror(const char *s); + +int dcheck(INTERVAL); + +double dreg[26]; +INTERVAL vreg[26]; + +#line 31 "calc1.y" +#ifdef YYSTYPE +#undef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +#endif +#ifndef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +typedef union +{ + int ival; + double dval; + INTERVAL vval; +} YYSTYPE; +#endif /* !YYSTYPE_IS_DECLARED */ +#line 141 "calc1.tab.c" + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define DREG 257 +#define VREG 258 +#define CONST 259 +#define UMINUS 260 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT calc1_lhs[] = { -1, + 3, 3, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, +}; +static const YYINT calc1_len[] = { 2, + 0, 2, 2, 2, 4, 4, 2, 1, 1, 3, + 3, 3, 3, 2, 3, 1, 5, 1, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 3, +}; +static const YYINT calc1_defred[] = { 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 7, + 0, 0, 9, 18, 14, 27, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, + 0, 0, 0, 15, 0, 28, 0, 0, 0, 0, + 12, 24, 13, 26, 0, 0, 23, 25, 14, 0, + 0, 0, 0, 0, 5, 6, 0, 0, 0, 12, + 13, 17, +}; +static const YYINT calc1_dgoto[] = { 7, + 32, 9, 0, +}; +static const YYINT calc1_sindex[] = { -40, + -8, -48, -47, 0, -37, -37, 0, 2, 17, 0, + -34, -37, 0, 0, 0, 0, -25, 90, -37, -37, + -37, -37, 0, -37, -37, -37, -37, 0, -34, -34, + 25, 125, 31, 0, -34, 0, -11, 37, -11, 37, + 0, 0, 0, 0, 37, 37, 0, 0, 0, 111, + -34, -34, -34, -34, 0, 0, 118, 69, 69, 0, + 0, 0, +}; +static const YYINT calc1_rindex[] = { 0, + 0, 38, 44, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -9, 0, 0, 0, 0, 51, -3, 56, 61, + 0, 0, 0, 0, 67, 72, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 78, 83, 0, + 0, 0, +}; +static const YYINT calc1_gindex[] = { 0, + 4, 124, 0, +}; +#define YYTABLESIZE 225 +static const YYINT calc1_table[] = { 6, + 16, 10, 6, 8, 5, 30, 20, 5, 15, 17, + 29, 23, 11, 12, 31, 34, 21, 19, 35, 20, + 0, 22, 37, 39, 41, 43, 28, 0, 0, 0, + 21, 16, 49, 50, 55, 22, 0, 20, 57, 20, + 56, 20, 0, 21, 19, 0, 20, 9, 22, 0, + 0, 0, 0, 18, 58, 59, 60, 61, 26, 24, + 10, 25, 0, 27, 0, 11, 53, 51, 0, 52, + 22, 54, 26, 24, 0, 25, 19, 27, 26, 9, + 9, 21, 9, 27, 9, 18, 18, 10, 18, 0, + 18, 10, 11, 10, 10, 10, 11, 0, 11, 11, + 11, 22, 0, 22, 0, 22, 0, 19, 0, 19, + 53, 19, 21, 0, 21, 54, 21, 0, 10, 0, + 10, 0, 10, 11, 0, 11, 0, 11, 16, 18, + 36, 26, 24, 0, 25, 33, 27, 0, 0, 0, + 0, 0, 38, 40, 42, 44, 0, 45, 46, 47, + 48, 34, 53, 51, 0, 52, 0, 54, 62, 53, + 51, 0, 52, 0, 54, 0, 21, 19, 0, 20, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 2, 3, 4, 13, + 14, 4, 13, 0, 4, +}; +static const YYINT calc1_check[] = { 40, + 10, 10, 40, 0, 45, 40, 10, 45, 5, 6, + 45, 10, 61, 61, 11, 41, 42, 43, 44, 45, + -1, 47, 19, 20, 21, 22, 10, -1, -1, -1, + 42, 41, 29, 30, 10, 47, -1, 41, 35, 43, + 10, 45, -1, 42, 43, -1, 45, 10, 47, -1, + -1, -1, -1, 10, 51, 52, 53, 54, 42, 43, + 10, 45, -1, 47, -1, 10, 42, 43, -1, 45, + 10, 47, 42, 43, -1, 45, 10, 47, 42, 42, + 43, 10, 45, 47, 47, 42, 43, 10, 45, -1, + 47, 41, 10, 43, 44, 45, 41, -1, 43, 44, + 45, 41, -1, 43, -1, 45, -1, 41, -1, 43, + 42, 45, 41, -1, 43, 47, 45, -1, 41, -1, + 43, -1, 45, 41, -1, 43, -1, 45, 5, 6, + 41, 42, 43, -1, 45, 12, 47, -1, -1, -1, + -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, + 27, 41, 42, 43, -1, 45, -1, 47, 41, 42, + 43, -1, 45, -1, 47, -1, 42, 43, -1, 45, + -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, 257, 258, 259, 257, + 258, 259, 257, -1, 259, +}; +#define YYFINAL 7 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 260 +#define YYUNDFTOKEN 266 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const calc1_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0, +0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,"DREG","VREG","CONST","UMINUS",0,0,0,0,0,"illegal-symbol", +}; +static const char *const calc1_rule[] = { +"$accept : line", +"lines :", +"lines : lines line", +"line : dexp '\\n'", +"line : vexp '\\n'", +"line : DREG '=' dexp '\\n'", +"line : VREG '=' vexp '\\n'", +"line : error '\\n'", +"dexp : CONST", +"dexp : DREG", +"dexp : dexp '+' dexp", +"dexp : dexp '-' dexp", +"dexp : dexp '*' dexp", +"dexp : dexp '/' dexp", +"dexp : '-' dexp", +"dexp : '(' dexp ')'", +"vexp : dexp", +"vexp : '(' dexp ',' dexp ')'", +"vexp : VREG", +"vexp : vexp '+' vexp", +"vexp : dexp '+' vexp", +"vexp : vexp '-' vexp", +"vexp : dexp '-' vexp", +"vexp : vexp '*' vexp", +"vexp : dexp '*' vexp", +"vexp : vexp '/' vexp", +"vexp : dexp '/' vexp", +"vexp : '-' vexp", +"vexp : '(' vexp ')'", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 176 "calc1.y" + /* beginning of subroutines section */ + +#define BSZ 50 /* buffer size for floating point numbers */ + + /* lexical analysis */ + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) +{ + int c; + + while ((c = getchar()) == ' ') + { /* skip over blanks */ + } + + if (isupper(c)) + { + yylval.ival = c - 'A'; + return (VREG); + } + if (islower(c)) + { + yylval.ival = c - 'a'; + return (DREG); + } + + if (isdigit(c) || c == '.') + { + /* gobble up digits, points, exponents */ + char buf[BSZ + 1], *cp = buf; + int dot = 0, expr = 0; + + for (; (cp - buf) < BSZ; ++cp, c = getchar()) + { + + *cp = (char) c; + if (isdigit(c)) + continue; + if (c == '.') + { + if (dot++ || expr) + return ('.'); /* will cause syntax error */ + continue; + } + + if (c == 'e') + { + if (expr++) + return ('e'); /* will cause syntax error */ + continue; + } + + /* end of number */ + break; + } + *cp = '\0'; + + if ((cp - buf) >= BSZ) + printf("constant too long: truncated\n"); + else + ungetc(c, stdin); /* push back last char read */ + yylval.dval = atof(buf); + return (CONST); + } + return (c); +} + +static INTERVAL +hilo(double a, double b, double c, double d) +{ + /* returns the smallest interval containing a, b, c, and d */ + /* used by *, / routines */ + INTERVAL v; + + if (a > b) + { + v.hi = a; + v.lo = b; + } + else + { + v.hi = b; + v.lo = a; + } + + if (c > d) + { + if (c > v.hi) + v.hi = c; + if (d < v.lo) + v.lo = d; + } + else + { + if (d > v.hi) + v.hi = d; + if (c < v.lo) + v.lo = c; + } + return (v); +} + +INTERVAL +vmul(double a, double b, INTERVAL v) +{ + return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); +} + +int +dcheck(INTERVAL v) +{ + if (v.hi >= 0. && v.lo <= 0.) + { + printf("divisor interval contains 0.\n"); + return (1); + } + return (0); +} + +INTERVAL +vdiv(double a, double b, INTERVAL v) +{ + return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); +} +#line 491 "calc1.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 57 "calc1.y" + { + (void) printf("%15.8f\n", yystack.l_mark[-1].dval); + } +break; +case 4: +#line 61 "calc1.y" + { + (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi); + } +break; +case 5: +#line 65 "calc1.y" + { + dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval; + } +break; +case 6: +#line 69 "calc1.y" + { + vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval; + } +break; +case 7: +#line 73 "calc1.y" + { + yyerrok; + } +break; +case 9: +#line 80 "calc1.y" + { + yyval.dval = dreg[yystack.l_mark[0].ival]; + } +break; +case 10: +#line 84 "calc1.y" + { + yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval; + } +break; +case 11: +#line 88 "calc1.y" + { + yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval; + } +break; +case 12: +#line 92 "calc1.y" + { + yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval; + } +break; +case 13: +#line 96 "calc1.y" + { + yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval; + } +break; +case 14: +#line 100 "calc1.y" + { + yyval.dval = -yystack.l_mark[0].dval; + } +break; +case 15: +#line 104 "calc1.y" + { + yyval.dval = yystack.l_mark[-1].dval; + } +break; +case 16: +#line 110 "calc1.y" + { + yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval; + } +break; +case 17: +#line 114 "calc1.y" + { + yyval.vval.lo = yystack.l_mark[-3].dval; + yyval.vval.hi = yystack.l_mark[-1].dval; + if ( yyval.vval.lo > yyval.vval.hi ) + { + (void) printf("interval out of order\n"); + YYERROR; + } + } +break; +case 18: +#line 124 "calc1.y" + { + yyval.vval = vreg[yystack.l_mark[0].ival]; + } +break; +case 19: +#line 128 "calc1.y" + { + yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi; + yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo; + } +break; +case 20: +#line 133 "calc1.y" + { + yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi; + yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo; + } +break; +case 21: +#line 138 "calc1.y" + { + yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo; + yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi; + } +break; +case 22: +#line 143 "calc1.y" + { + yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo; + yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi; + } +break; +case 23: +#line 148 "calc1.y" + { + yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); + } +break; +case 24: +#line 152 "calc1.y" + { + yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); + } +break; +case 25: +#line 156 "calc1.y" + { + if (dcheck(yystack.l_mark[0].vval)) YYERROR; + yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); + } +break; +case 26: +#line 161 "calc1.y" + { + if (dcheck ( yystack.l_mark[0].vval )) YYERROR; + yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); + } +break; +case 27: +#line 166 "calc1.y" + { + yyval.vval.hi = -yystack.l_mark[0].vval.lo; + yyval.vval.lo = -yystack.l_mark[0].vval.hi; + } +break; +case 28: +#line 171 "calc1.y" + { + yyval.vval = yystack.l_mark[-1].vval; + } +break; +#line 856 "calc1.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/calc1.tab.h b/contrib/byacc/test/yacc/calc1.tab.h new file mode 100644 index 000000000000..c0633e37dfa8 --- /dev/null +++ b/contrib/byacc/test/yacc/calc1.tab.h @@ -0,0 +1,18 @@ +#define DREG 257 +#define VREG 258 +#define CONST 259 +#define UMINUS 260 +#ifdef YYSTYPE +#undef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +#endif +#ifndef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +typedef union +{ + int ival; + double dval; + INTERVAL vval; +} YYSTYPE; +#endif /* !YYSTYPE_IS_DECLARED */ +extern YYSTYPE calc1_lval; diff --git a/contrib/byacc/test/yacc/calc2.error b/contrib/byacc/test/yacc/calc2.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/calc2.error diff --git a/contrib/byacc/test/yacc/calc2.output b/contrib/byacc/test/yacc/calc2.output new file mode 100644 index 000000000000..3aed47511c93 --- /dev/null +++ b/contrib/byacc/test/yacc/calc2.output @@ -0,0 +1,461 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr '+' expr + 8 | expr '-' expr + 9 | expr '*' expr + 10 | expr '/' expr + 11 | expr '%' expr + 12 | expr '&' expr + 13 | expr '|' expr + 14 | '-' expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + DIGIT shift 3 + LETTER shift 4 + '-' shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + number : DIGIT . (17) + + . reduce 17 + + +state 4 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 11 + '|' reduce 15 + '&' reduce 15 + '+' reduce 15 + '-' reduce 15 + '*' reduce 15 + '/' reduce 15 + '%' reduce 15 + '\n' reduce 15 + + +state 5 + expr : '-' . expr (14) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 13 + number goto 9 + + +state 6 + expr : '(' . expr ')' (6) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + '|' reduce 16 + '&' reduce 16 + '+' reduce 16 + '-' reduce 16 + '*' reduce 16 + '/' reduce 16 + '%' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + stat : LETTER '=' . expr (5) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 12 + expr : LETTER . (15) + + . reduce 15 + + +state 13 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : '-' expr . (14) + + . reduce 14 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr '|' . expr (13) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr '&' . expr (12) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr '+' . expr (7) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr '-' . expr (8) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr '*' . expr (9) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr '/' . expr (10) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '%' . expr (11) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +state 26 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +state 27 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr '&' expr . (12) + expr : expr . '|' expr (13) + + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 12 + '&' reduce 12 + '\n' reduce 12 + ')' reduce 12 + + +state 28 + expr : expr . '+' expr (7) + expr : expr '+' expr . (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 7 + '&' reduce 7 + '+' reduce 7 + '-' reduce 7 + '\n' reduce 7 + ')' reduce 7 + + +state 29 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr '-' expr . (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 8 + '&' reduce 8 + '+' reduce 8 + '-' reduce 8 + '\n' reduce 8 + ')' reduce 8 + + +state 30 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr '*' expr . (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 9 + + +state 31 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr '/' expr . (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 10 + + +state 32 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr '%' expr . (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 11 + + +16 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/calc2.tab.c b/contrib/byacc/test/yacc/calc2.tab.c new file mode 100644 index 000000000000..d85ea8837b59 --- /dev/null +++ b/contrib/byacc/test/yacc/calc2.tab.c @@ -0,0 +1,687 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse calc2_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex calc2_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror calc2_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar calc2_char +#endif /* yychar */ + +#ifndef yyval +#define yyval calc2_val +#endif /* yyval */ + +#ifndef yylval +#define yylval calc2_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug calc2_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs calc2_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag calc2_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs calc2_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen calc2_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred calc2_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto calc2_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex calc2_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex calc2_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex calc2_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable calc2_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck calc2_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname calc2_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule calc2_rule +#endif /* yyrule */ +#define YYPREFIX "calc2_" + +#define YYPURE 0 + +#line 7 "calc2.y" +# include <stdio.h> +# include <ctype.h> + +#ifdef YYBISON +#define YYLEX_PARAM base +#define YYLEX_DECL() yylex(int *YYLEX_PARAM) +#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) +int YYLEX_DECL(); +static void YYERROR_DECL(); +#endif + +#line 113 "calc2.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(int regs[26], int * base) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(int * base) +# define YYLEX yylex(base) +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(int regs[26], int * base, const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(regs, base, msg) +#endif + +extern int YYPARSE_DECL(); + +#define DIGIT 257 +#define LETTER 258 +#define UMINUS 259 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT calc2_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT calc2_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT calc2_defred[] = { 1, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, + 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, + 10, 11, +}; +static const YYINT calc2_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT calc2_sindex[] = { 0, + -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, + -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, + -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, + 0, 0, +}; +static const YYINT calc2_rindex[] = { 0, + 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, + 0, 0, +}; +static const YYINT calc2_gindex[] = { 0, + 0, 65, 0, +}; +#define YYTABLESIZE 220 +static const YYINT calc2_table[] = { 6, + 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, + 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, + 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, + 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, + 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, + 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, + 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, + 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, + 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, + 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, + 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, +}; +static const YYINT calc2_check[] = { 40, + 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, + 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, + -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, + -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, + -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, + 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, + -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, + 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, + 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, + -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, + -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, + -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, + -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 259 +#define YYUNDFTOKEN 265 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const calc2_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", +}; +static const char *const calc2_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr '+' expr", +"expr : expr '-' expr", +"expr : expr '*' expr", +"expr : expr '/' expr", +"expr : expr '%' expr", +"expr : expr '&' expr", +"expr : expr '|' expr", +"expr : '-' expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 73 "calc2.y" + /* start of programs */ + +#ifdef YYBYACC +extern int YYLEX_DECL(); +#endif + +int +main (void) +{ + int regs[26]; + int base = 10; + + while(!feof(stdin)) { + yyparse(regs, &base); + } + return 0; +} + +#define UNUSED(x) ((void)(x)) + +static void +YYERROR_DECL() +{ + UNUSED(regs); /* %parse-param regs is not actually used here */ + UNUSED(base); /* %parse-param base is not actually used here */ + fprintf(stderr, "%s\n", s); +} + +int +YYLEX_DECL() +{ + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + yylval = (c - '0') % (*base); + return ( DIGIT ); + } + return( c ); +} +#line 367 "calc2.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 35 "calc2.y" + { yyerrok ; } +break; +case 4: +#line 39 "calc2.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 41 "calc2.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 45 "calc2.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 47 "calc2.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 49 "calc2.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 51 "calc2.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 53 "calc2.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 55 "calc2.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 57 "calc2.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 59 "calc2.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 61 "calc2.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 63 "calc2.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 68 "calc2.y" + { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 70 "calc2.y" + { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 629 "calc2.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/calc2.tab.h b/contrib/byacc/test/yacc/calc2.tab.h new file mode 100644 index 000000000000..19211182d6b3 --- /dev/null +++ b/contrib/byacc/test/yacc/calc2.tab.h @@ -0,0 +1,3 @@ +#define DIGIT 257 +#define LETTER 258 +#define UMINUS 259 diff --git a/contrib/byacc/test/yacc/calc3.error b/contrib/byacc/test/yacc/calc3.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/calc3.error diff --git a/contrib/byacc/test/yacc/calc3.output b/contrib/byacc/test/yacc/calc3.output new file mode 100644 index 000000000000..3aed47511c93 --- /dev/null +++ b/contrib/byacc/test/yacc/calc3.output @@ -0,0 +1,461 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr '+' expr + 8 | expr '-' expr + 9 | expr '*' expr + 10 | expr '/' expr + 11 | expr '%' expr + 12 | expr '&' expr + 13 | expr '|' expr + 14 | '-' expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + DIGIT shift 3 + LETTER shift 4 + '-' shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + number : DIGIT . (17) + + . reduce 17 + + +state 4 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 11 + '|' reduce 15 + '&' reduce 15 + '+' reduce 15 + '-' reduce 15 + '*' reduce 15 + '/' reduce 15 + '%' reduce 15 + '\n' reduce 15 + + +state 5 + expr : '-' . expr (14) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 13 + number goto 9 + + +state 6 + expr : '(' . expr ')' (6) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + '|' reduce 16 + '&' reduce 16 + '+' reduce 16 + '-' reduce 16 + '*' reduce 16 + '/' reduce 16 + '%' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + stat : LETTER '=' . expr (5) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 12 + expr : LETTER . (15) + + . reduce 15 + + +state 13 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : '-' expr . (14) + + . reduce 14 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr '|' . expr (13) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr '&' . expr (12) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr '+' . expr (7) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr '-' . expr (8) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr '*' . expr (9) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr '/' . expr (10) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '%' . expr (11) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +state 26 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +state 27 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr '&' expr . (12) + expr : expr . '|' expr (13) + + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 12 + '&' reduce 12 + '\n' reduce 12 + ')' reduce 12 + + +state 28 + expr : expr . '+' expr (7) + expr : expr '+' expr . (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 7 + '&' reduce 7 + '+' reduce 7 + '-' reduce 7 + '\n' reduce 7 + ')' reduce 7 + + +state 29 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr '-' expr . (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 8 + '&' reduce 8 + '+' reduce 8 + '-' reduce 8 + '\n' reduce 8 + ')' reduce 8 + + +state 30 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr '*' expr . (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 9 + + +state 31 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr '/' expr . (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 10 + + +state 32 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr '%' expr . (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 11 + + +16 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/calc3.tab.c b/contrib/byacc/test/yacc/calc3.tab.c new file mode 100644 index 000000000000..b5ca0414f706 --- /dev/null +++ b/contrib/byacc/test/yacc/calc3.tab.c @@ -0,0 +1,692 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse calc3_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex calc3_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror calc3_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar calc3_char +#endif /* yychar */ + +#ifndef yyval +#define yyval calc3_val +#endif /* yyval */ + +#ifndef yylval +#define yylval calc3_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug calc3_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs calc3_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag calc3_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs calc3_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen calc3_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred calc3_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto calc3_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex calc3_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex calc3_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex calc3_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable calc3_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck calc3_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname calc3_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule calc3_rule +#endif /* yyrule */ +#define YYPREFIX "calc3_" + +#define YYPURE 1 + +#line 9 "calc3.y" +# include <stdio.h> +# include <ctype.h> + +#ifdef YYBISON +#define YYSTYPE int +#define YYLEX_PARAM base +#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) +#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) +int YYLEX_DECL(); +static void YYERROR_DECL(); +#endif + +#line 114 "calc3.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(int regs[26], int * base) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# ifdef YYLEX_PARAM_TYPE +# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) +# else +# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) +# endif +# define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(YYSTYPE *yylval, int * base) +# define YYLEX yylex(&yylval, base) +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(int regs[26], int * base, const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(regs, base, msg) +#endif + +extern int YYPARSE_DECL(); + +#define DIGIT 257 +#define LETTER 258 +#define UMINUS 259 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT calc3_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT calc3_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT calc3_defred[] = { 1, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, + 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, + 10, 11, +}; +static const YYINT calc3_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT calc3_sindex[] = { 0, + -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, + -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, + -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, + 0, 0, +}; +static const YYINT calc3_rindex[] = { 0, + 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, + 0, 0, +}; +static const YYINT calc3_gindex[] = { 0, + 0, 65, 0, +}; +#define YYTABLESIZE 220 +static const YYINT calc3_table[] = { 6, + 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, + 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, + 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, + 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, + 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, + 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, + 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, + 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, + 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, + 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, + 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, +}; +static const YYINT calc3_check[] = { 40, + 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, + 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, + -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, + -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, + -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, + 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, + -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, + 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, + 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, + -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, + -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, + -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, + -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 259 +#define YYUNDFTOKEN 265 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const calc3_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", +}; +static const char *const calc3_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr '+' expr", +"expr : expr '-' expr", +"expr : expr '*' expr", +"expr : expr '/' expr", +"expr : expr '%' expr", +"expr : expr '&' expr", +"expr : expr '|' expr", +"expr : '-' expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +#line 76 "calc3.y" + /* start of programs */ + +#ifdef YYBYACC +extern int YYLEX_DECL(); +#endif + +int +main (void) +{ + int regs[26]; + int base = 10; + + while(!feof(stdin)) { + yyparse(regs, &base); + } + return 0; +} + +#define UNUSED(x) ((void)(x)) + +static void +YYERROR_DECL() +{ + UNUSED(regs); /* %parse-param regs is not actually used here */ + UNUSED(base); /* %parse-param base is not actually used here */ + fprintf(stderr, "%s\n", s); +} + +int +YYLEX_DECL() +{ + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + *yylval = (c - 'a'); + return ( LETTER ); + } + if( isdigit( c )) { + *yylval = (c - '0') % (*base); + return ( DIGIT ); + } + return( c ); +} +#line 365 "calc3.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yyerrflag; + int yychar; + YYSTYPE yyval; + YYSTYPE yylval; + + /* variables for the parser stack */ + YYSTACKDATA yystack; + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 38 "calc3.y" + { yyerrok ; } +break; +case 4: +#line 42 "calc3.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 44 "calc3.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 48 "calc3.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 50 "calc3.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 52 "calc3.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 54 "calc3.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 56 "calc3.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 58 "calc3.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 60 "calc3.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 62 "calc3.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 64 "calc3.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 66 "calc3.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 71 "calc3.y" + { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 73 "calc3.y" + { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 634 "calc3.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/calc3.tab.h b/contrib/byacc/test/yacc/calc3.tab.h new file mode 100644 index 000000000000..19211182d6b3 --- /dev/null +++ b/contrib/byacc/test/yacc/calc3.tab.h @@ -0,0 +1,3 @@ +#define DIGIT 257 +#define LETTER 258 +#define UMINUS 259 diff --git a/contrib/byacc/test/yacc/code_calc.code.c b/contrib/byacc/test/yacc/code_calc.code.c new file mode 100644 index 000000000000..43291db28c4d --- /dev/null +++ b/contrib/byacc/test/yacc/code_calc.code.c @@ -0,0 +1,579 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse calc_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex calc_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror calc_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar calc_char +#endif /* yychar */ + +#ifndef yyval +#define yyval calc_val +#endif /* yyval */ + +#ifndef yylval +#define yylval calc_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug calc_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs calc_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag calc_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs calc_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen calc_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred calc_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto calc_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex calc_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex calc_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex calc_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable calc_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck calc_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname calc_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule calc_rule +#endif /* yyrule */ +#define YYPREFIX "calc_" + +#define YYPURE 0 + +#line 2 "code_calc.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +#ifdef YYBISON +int yylex(void); +static void yyerror(const char *s); +#endif + +#line 113 "code_calc.code.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +#define DIGIT 257 +#define LETTER 258 +#define UMINUS 259 +#define YYERRCODE 256 +#define YYTABLESIZE 220 +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 259 +#define YYUNDFTOKEN 265 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) + +extern int YYPARSE_DECL(); +typedef short YYINT; +extern YYINT yylhs[]; +extern YYINT yylen[]; +extern YYINT yydefred[]; +extern YYINT yydgoto[]; +extern YYINT yysindex[]; +extern YYINT yyrindex[]; +extern YYINT yygindex[]; +extern YYINT yytable[]; +extern YYINT yycheck[]; + +#if YYDEBUG +extern char *yyname[]; +extern char *yyrule[]; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 68 "code_calc.y" + /* start of programs */ + +#ifdef YYBYACC +extern int YYLEX_DECL(); +#endif + +int +main (void) +{ + while(!feof(stdin)) { + yyparse(); + } + return 0; +} + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) +{ + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + yylval = c - '0'; + return ( DIGIT ); + } + return( c ); +} +#line 259 "code_calc.code.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 30 "code_calc.y" + { yyerrok ; } +break; +case 4: +#line 34 "code_calc.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 36 "code_calc.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 40 "code_calc.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 42 "code_calc.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 44 "code_calc.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 46 "code_calc.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 48 "code_calc.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 50 "code_calc.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 52 "code_calc.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 54 "code_calc.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 56 "code_calc.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 58 "code_calc.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 63 "code_calc.y" + { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 65 "code_calc.y" + { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 521 "code_calc.code.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/code_calc.error b/contrib/byacc/test/yacc/code_calc.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/code_calc.error diff --git a/contrib/byacc/test/yacc/code_calc.output b/contrib/byacc/test/yacc/code_calc.output new file mode 100644 index 000000000000..3aed47511c93 --- /dev/null +++ b/contrib/byacc/test/yacc/code_calc.output @@ -0,0 +1,461 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr '+' expr + 8 | expr '-' expr + 9 | expr '*' expr + 10 | expr '/' expr + 11 | expr '%' expr + 12 | expr '&' expr + 13 | expr '|' expr + 14 | '-' expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + DIGIT shift 3 + LETTER shift 4 + '-' shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + number : DIGIT . (17) + + . reduce 17 + + +state 4 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 11 + '|' reduce 15 + '&' reduce 15 + '+' reduce 15 + '-' reduce 15 + '*' reduce 15 + '/' reduce 15 + '%' reduce 15 + '\n' reduce 15 + + +state 5 + expr : '-' . expr (14) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 13 + number goto 9 + + +state 6 + expr : '(' . expr ')' (6) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + '|' reduce 16 + '&' reduce 16 + '+' reduce 16 + '-' reduce 16 + '*' reduce 16 + '/' reduce 16 + '%' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + stat : LETTER '=' . expr (5) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 12 + expr : LETTER . (15) + + . reduce 15 + + +state 13 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : '-' expr . (14) + + . reduce 14 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr '|' . expr (13) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr '&' . expr (12) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr '+' . expr (7) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr '-' . expr (8) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr '*' . expr (9) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr '/' . expr (10) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '%' . expr (11) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +state 26 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +state 27 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr '&' expr . (12) + expr : expr . '|' expr (13) + + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 12 + '&' reduce 12 + '\n' reduce 12 + ')' reduce 12 + + +state 28 + expr : expr . '+' expr (7) + expr : expr '+' expr . (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 7 + '&' reduce 7 + '+' reduce 7 + '-' reduce 7 + '\n' reduce 7 + ')' reduce 7 + + +state 29 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr '-' expr . (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 8 + '&' reduce 8 + '+' reduce 8 + '-' reduce 8 + '\n' reduce 8 + ')' reduce 8 + + +state 30 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr '*' expr . (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 9 + + +state 31 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr '/' expr . (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 10 + + +state 32 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr '%' expr . (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 11 + + +16 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/code_calc.tab.c b/contrib/byacc/test/yacc/code_calc.tab.c new file mode 100644 index 000000000000..e72fa8421c4e --- /dev/null +++ b/contrib/byacc/test/yacc/code_calc.tab.c @@ -0,0 +1,119 @@ +typedef short YYINT; +const YYINT calc_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +const YYINT calc_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +const YYINT calc_defred[] = { 1, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, + 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, + 10, 11, +}; +const YYINT calc_dgoto[] = { 1, + 7, 8, 9, +}; +const YYINT calc_sindex[] = { 0, + -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, + -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, + -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, + 0, 0, +}; +const YYINT calc_rindex[] = { 0, + 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, + 0, 0, +}; +const YYINT calc_gindex[] = { 0, + 0, 65, 0, +}; +const YYINT calc_table[] = { 6, + 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, + 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, + 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, + 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, + 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, + 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, + 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, + 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, + 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, + 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, + 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, +}; +const YYINT calc_check[] = { 40, + 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, + 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, + -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, + -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, + -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, + 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, + -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, + 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, + 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, + -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, + -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, + -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, + -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, +}; +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#if YYDEBUG +const char *const calc_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", +}; +const char *const calc_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr '+' expr", +"expr : expr '-' expr", +"expr : expr '*' expr", +"expr : expr '/' expr", +"expr : expr '%' expr", +"expr : expr '&' expr", +"expr : expr '|' expr", +"expr : '-' expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif diff --git a/contrib/byacc/test/yacc/code_calc.tab.h b/contrib/byacc/test/yacc/code_calc.tab.h new file mode 100644 index 000000000000..19211182d6b3 --- /dev/null +++ b/contrib/byacc/test/yacc/code_calc.tab.h @@ -0,0 +1,3 @@ +#define DIGIT 257 +#define LETTER 258 +#define UMINUS 259 diff --git a/contrib/byacc/test/yacc/code_error.code.c b/contrib/byacc/test/yacc/code_error.code.c new file mode 100644 index 000000000000..38d3e5866b38 --- /dev/null +++ b/contrib/byacc/test/yacc/code_error.code.c @@ -0,0 +1,490 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse error_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex error_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror error_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar error_char +#endif /* yychar */ + +#ifndef yyval +#define yyval error_val +#endif /* yyval */ + +#ifndef yylval +#define yylval error_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug error_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs error_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag error_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs error_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen error_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred error_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto error_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex error_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex error_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex error_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable error_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck error_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname error_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule error_rule +#endif /* yyrule */ +#define YYPREFIX "error_" + +#define YYPURE 0 + +#line 2 "code_error.y" + +#ifdef YYBISON +int yylex(void); +static void yyerror(const char *); +#endif + +#line 108 "code_error.code.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +#define YYERRCODE 256 +#define YYTABLESIZE 0 +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 256 +#define YYUNDFTOKEN 259 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) + +extern int YYPARSE_DECL(); +typedef short YYINT; +extern YYINT yylhs[]; +extern YYINT yylen[]; +extern YYINT yydefred[]; +extern YYINT yydgoto[]; +extern YYINT yysindex[]; +extern YYINT yyrindex[]; +extern YYINT yygindex[]; +extern YYINT yytable[]; +extern YYINT yycheck[]; + +#if YYDEBUG +extern char *yyname[]; +extern char *yyrule[]; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 12 "code_error.y" + +#include <stdio.h> + +#ifdef YYBYACC +extern int YYLEX_DECL(); +#endif + +int +main(void) +{ + printf("yyparse() = %d\n", yyparse()); + return 0; +} + +int +yylex(void) +{ + return -1; +} + +static void +yyerror(const char* s) +{ + printf("%s\n", s); +} +#line 231 "code_error.code.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/code_error.error b/contrib/byacc/test/yacc/code_error.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/code_error.error diff --git a/contrib/byacc/test/yacc/code_error.output b/contrib/byacc/test/yacc/code_error.output new file mode 100644 index 000000000000..0c4db6225e24 --- /dev/null +++ b/contrib/byacc/test/yacc/code_error.output @@ -0,0 +1,27 @@ + 0 $accept : S $end + + 1 S : error + +state 0 + $accept : . S $end (0) + + error shift 1 + . error + + S goto 2 + + +state 1 + S : error . (1) + + . reduce 1 + + +state 2 + $accept : S . $end (0) + + $end accept + + +2 terminals, 2 nonterminals +2 grammar rules, 3 states diff --git a/contrib/byacc/test/yacc/code_error.tab.c b/contrib/byacc/test/yacc/code_error.tab.c new file mode 100644 index 000000000000..9296aa5b1e24 --- /dev/null +++ b/contrib/byacc/test/yacc/code_error.tab.c @@ -0,0 +1,44 @@ +typedef short YYINT; +const YYINT error_lhs[] = { -1, + 0, +}; +const YYINT error_len[] = { 2, + 1, +}; +const YYINT error_defred[] = { 0, + 1, 0, +}; +const YYINT error_dgoto[] = { 2, +}; +const YYINT error_sindex[] = { -256, + 0, 0, +}; +const YYINT error_rindex[] = { 0, + 0, 0, +}; +const YYINT error_gindex[] = { 0, +}; +const YYINT error_table[] = { 1, +}; +const YYINT error_check[] = { 256, +}; +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#if YYDEBUG +const char *const error_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", +}; +const char *const error_rule[] = { +"$accept : S", +"S : error", + +}; +#endif diff --git a/contrib/byacc/test/yacc/code_error.tab.h b/contrib/byacc/test/yacc/code_error.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/code_error.tab.h diff --git a/contrib/byacc/test/yacc/empty.error b/contrib/byacc/test/yacc/empty.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/empty.error diff --git a/contrib/byacc/test/yacc/empty.output b/contrib/byacc/test/yacc/empty.output new file mode 100644 index 000000000000..b7cf396ef983 --- /dev/null +++ b/contrib/byacc/test/yacc/empty.output @@ -0,0 +1,21 @@ + 0 $accept : start $end + + 1 start : + +state 0 + $accept : . start $end (0) + start : . (1) + + . reduce 1 + + start goto 1 + + +state 1 + $accept : start . $end (0) + + $end accept + + +2 terminals, 2 nonterminals +2 grammar rules, 2 states diff --git a/contrib/byacc/test/yacc/empty.tab.c b/contrib/byacc/test/yacc/empty.tab.c new file mode 100644 index 000000000000..da0c4be7a221 --- /dev/null +++ b/contrib/byacc/test/yacc/empty.tab.c @@ -0,0 +1,503 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse empty_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex empty_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror empty_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar empty_char +#endif /* yychar */ + +#ifndef yyval +#define yyval empty_val +#endif /* yyval */ + +#ifndef yylval +#define yylval empty_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug empty_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs empty_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag empty_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs empty_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen empty_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred empty_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto empty_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex empty_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex empty_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex empty_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable empty_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck empty_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname empty_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule empty_rule +#endif /* yyrule */ +#define YYPREFIX "empty_" + +#define YYPURE 0 + +#line 2 "empty.y" +#ifdef YYBISON +#define YYLEX_DECL() yylex(void) +#define YYERROR_DECL() yyerror(const char *s) +static int YYLEX_DECL(); +static void YYERROR_DECL(); +#endif +#line 108 "empty.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT empty_lhs[] = { -1, + 0, +}; +static const YYINT empty_len[] = { 2, + 0, +}; +static const YYINT empty_defred[] = { 1, + 0, +}; +static const YYINT empty_dgoto[] = { 1, +}; +static const YYINT empty_sindex[] = { 0, + 0, +}; +static const YYINT empty_rindex[] = { 0, + 0, +}; +static const YYINT empty_gindex[] = { 0, +}; +#define YYTABLESIZE 0 +static const YYINT empty_table[] = { 0, +}; +static const YYINT empty_check[] = { -1, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 256 +#define YYUNDFTOKEN 259 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const empty_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", +}; +static const char *const empty_rule[] = { +"$accept : start", +"start :", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 13 "empty.y" + +#include <stdio.h> + +static int +YYLEX_DECL() { + return -1; +} + +static void +YYERROR_DECL() { + printf("%s\n",s); +} +#line 244 "empty.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/empty.tab.h b/contrib/byacc/test/yacc/empty.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/empty.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax1.error b/contrib/byacc/test/yacc/err_syntax1.error new file mode 100644 index 000000000000..e3a341d4ee3d --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax1.error @@ -0,0 +1,3 @@ +YACC: e - line 1 of "./test/err_syntax1.y", syntax error + ?% { + ^ diff --git a/contrib/byacc/test/yacc/err_syntax1.output b/contrib/byacc/test/yacc/err_syntax1.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax1.output diff --git a/contrib/byacc/test/yacc/err_syntax1.tab.c b/contrib/byacc/test/yacc/err_syntax1.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax1.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax1.tab.h b/contrib/byacc/test/yacc/err_syntax1.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax1.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax10.error b/contrib/byacc/test/yacc/err_syntax10.error new file mode 100644 index 000000000000..ceb876ec6037 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax10.error @@ -0,0 +1,3 @@ +YACC: w - line 7 of "./test/err_syntax10.y", the type of '(' has been redeclared +YACC: w - line 7 of "./test/err_syntax10.y", the type of '*' has been redeclared +YACC: w - line 7 of "./test/err_syntax10.y", the type of '&' has been redeclared diff --git a/contrib/byacc/test/yacc/err_syntax10.output b/contrib/byacc/test/yacc/err_syntax10.output new file mode 100644 index 000000000000..1b4542bde5c7 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax10.output @@ -0,0 +1,27 @@ + 0 $accept : S $end + + 1 S : error + +state 0 + $accept : . S $end (0) + + error shift 1 + . error + + S goto 2 + + +state 1 + S : error . (1) + + . reduce 1 + + +state 2 + $accept : S . $end (0) + + $end accept + + +5 terminals, 2 nonterminals +2 grammar rules, 3 states diff --git a/contrib/byacc/test/yacc/err_syntax10.tab.c b/contrib/byacc/test/yacc/err_syntax10.tab.c new file mode 100644 index 000000000000..a3b450960efc --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax10.tab.c @@ -0,0 +1,502 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse err_syntax10_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex err_syntax10_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror err_syntax10_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar err_syntax10_char +#endif /* yychar */ + +#ifndef yyval +#define yyval err_syntax10_val +#endif /* yyval */ + +#ifndef yylval +#define yylval err_syntax10_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug err_syntax10_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs err_syntax10_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag err_syntax10_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs err_syntax10_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen err_syntax10_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred err_syntax10_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto err_syntax10_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex err_syntax10_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex err_syntax10_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex err_syntax10_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable err_syntax10_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck err_syntax10_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname err_syntax10_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule err_syntax10_rule +#endif /* yyrule */ +#define YYPREFIX "err_syntax10_" + +#define YYPURE 0 + +#line 2 "err_syntax10.y" +int yylex(void); +static void yyerror(const char *); +#line 104 "err_syntax10.tab.c" + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT err_syntax10_lhs[] = { -1, + 0, +}; +static const YYINT err_syntax10_len[] = { 2, + 1, +}; +static const YYINT err_syntax10_defred[] = { 0, + 1, 0, +}; +static const YYINT err_syntax10_dgoto[] = { 2, +}; +static const YYINT err_syntax10_sindex[] = { -256, + 0, 0, +}; +static const YYINT err_syntax10_rindex[] = { 0, + 0, 0, +}; +static const YYINT err_syntax10_gindex[] = { 0, +}; +#define YYTABLESIZE 0 +static const YYINT err_syntax10_table[] = { 1, +}; +static const YYINT err_syntax10_check[] = { 256, +}; +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 256 +#define YYUNDFTOKEN 259 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const err_syntax10_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,"'&'",0,"'('",0,"'*'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", +}; +static const char *const err_syntax10_rule[] = { +"$accept : S", +"S : error", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 12 "err_syntax10.y" + +#include <stdio.h> + +int +main(void) +{ + printf("yyparse() = %d\n", yyparse()); + return 0; +} + +int +yylex(void) +{ + return -1; +} + +static void +yyerror(const char* s) +{ + printf("%s\n", s); +} +#line 243 "err_syntax10.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/err_syntax10.tab.h b/contrib/byacc/test/yacc/err_syntax10.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax10.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax11.error b/contrib/byacc/test/yacc/err_syntax11.error new file mode 100644 index 000000000000..df0aee4fb588 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax11.error @@ -0,0 +1 @@ +YACC: w - line 7 of "./test/err_syntax11.y", the precedence of '|' has been redeclared diff --git a/contrib/byacc/test/yacc/err_syntax11.output b/contrib/byacc/test/yacc/err_syntax11.output new file mode 100644 index 000000000000..a71ff2a40019 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax11.output @@ -0,0 +1,27 @@ + 0 $accept : S $end + + 1 S : error + +state 0 + $accept : . S $end (0) + + error shift 1 + . error + + S goto 2 + + +state 1 + S : error . (1) + + . reduce 1 + + +state 2 + $accept : S . $end (0) + + $end accept + + +3 terminals, 2 nonterminals +2 grammar rules, 3 states diff --git a/contrib/byacc/test/yacc/err_syntax11.tab.c b/contrib/byacc/test/yacc/err_syntax11.tab.c new file mode 100644 index 000000000000..ebb065f4589a --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax11.tab.c @@ -0,0 +1,508 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse err_syntax11_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex err_syntax11_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror err_syntax11_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar err_syntax11_char +#endif /* yychar */ + +#ifndef yyval +#define yyval err_syntax11_val +#endif /* yyval */ + +#ifndef yylval +#define yylval err_syntax11_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug err_syntax11_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs err_syntax11_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag err_syntax11_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs err_syntax11_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen err_syntax11_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred err_syntax11_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto err_syntax11_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex err_syntax11_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex err_syntax11_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex err_syntax11_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable err_syntax11_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck err_syntax11_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname err_syntax11_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule err_syntax11_rule +#endif /* yyrule */ +#define YYPREFIX "err_syntax11_" + +#define YYPURE 0 + +#line 2 "err_syntax11.y" +int yylex(void); +static void yyerror(const char *); +#line 104 "err_syntax11.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT err_syntax11_lhs[] = { -1, + 0, +}; +static const YYINT err_syntax11_len[] = { 2, + 1, +}; +static const YYINT err_syntax11_defred[] = { 0, + 1, 0, +}; +static const YYINT err_syntax11_dgoto[] = { 2, +}; +static const YYINT err_syntax11_sindex[] = { -256, + 0, 0, +}; +static const YYINT err_syntax11_rindex[] = { 0, + 0, 0, +}; +static const YYINT err_syntax11_gindex[] = { 0, +}; +#define YYTABLESIZE 0 +static const YYINT err_syntax11_table[] = { 1, +}; +static const YYINT err_syntax11_check[] = { 256, +}; +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 256 +#define YYUNDFTOKEN 259 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const err_syntax11_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", +}; +static const char *const err_syntax11_rule[] = { +"$accept : S", +"S : error", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 12 "err_syntax11.y" + +#include <stdio.h> + +int +main(void) +{ + printf("yyparse() = %d\n", yyparse()); + return 0; +} + +int +yylex(void) +{ + return -1; +} + +static void +yyerror(const char* s) +{ + printf("%s\n", s); +} +#line 249 "err_syntax11.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/err_syntax11.tab.h b/contrib/byacc/test/yacc/err_syntax11.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax11.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax12.error b/contrib/byacc/test/yacc/err_syntax12.error new file mode 100644 index 000000000000..9399e82e1d76 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax12.error @@ -0,0 +1 @@ +YACC: w - line 7 of "./test/err_syntax12.y", the value of text has been redeclared diff --git a/contrib/byacc/test/yacc/err_syntax12.output b/contrib/byacc/test/yacc/err_syntax12.output new file mode 100644 index 000000000000..a71ff2a40019 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax12.output @@ -0,0 +1,27 @@ + 0 $accept : S $end + + 1 S : error + +state 0 + $accept : . S $end (0) + + error shift 1 + . error + + S goto 2 + + +state 1 + S : error . (1) + + . reduce 1 + + +state 2 + $accept : S . $end (0) + + $end accept + + +3 terminals, 2 nonterminals +2 grammar rules, 3 states diff --git a/contrib/byacc/test/yacc/err_syntax12.tab.c b/contrib/byacc/test/yacc/err_syntax12.tab.c new file mode 100644 index 000000000000..784a45ffe908 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax12.tab.c @@ -0,0 +1,514 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse err_syntax12_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex err_syntax12_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror err_syntax12_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar err_syntax12_char +#endif /* yychar */ + +#ifndef yyval +#define yyval err_syntax12_val +#endif /* yyval */ + +#ifndef yylval +#define yylval err_syntax12_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug err_syntax12_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs err_syntax12_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag err_syntax12_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs err_syntax12_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen err_syntax12_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred err_syntax12_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto err_syntax12_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex err_syntax12_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex err_syntax12_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex err_syntax12_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable err_syntax12_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck err_syntax12_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname err_syntax12_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule err_syntax12_rule +#endif /* yyrule */ +#define YYPREFIX "err_syntax12_" + +#define YYPURE 0 + +#line 2 "err_syntax12.y" +int yylex(void); +static void yyerror(const char *); +#line 104 "err_syntax12.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define text 456 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT err_syntax12_lhs[] = { -1, + 0, +}; +static const YYINT err_syntax12_len[] = { 2, + 1, +}; +static const YYINT err_syntax12_defred[] = { 0, + 1, 0, +}; +static const YYINT err_syntax12_dgoto[] = { 2, +}; +static const YYINT err_syntax12_sindex[] = { -256, + 0, 0, +}; +static const YYINT err_syntax12_rindex[] = { 0, + 0, 0, +}; +static const YYINT err_syntax12_gindex[] = { 0, +}; +#define YYTABLESIZE 0 +static const YYINT err_syntax12_table[] = { 1, +}; +static const YYINT err_syntax12_check[] = { 256, +}; +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 456 +#define YYUNDFTOKEN 459 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const err_syntax12_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"text",0,0,"illegal-symbol", +}; +static const char *const err_syntax12_rule[] = { +"$accept : S", +"S : error", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 12 "err_syntax12.y" + +#include <stdio.h> + +int +main(void) +{ + printf("yyparse() = %d\n", yyparse()); + return 0; +} + +int +yylex(void) +{ + return -1; +} + +static void +yyerror(const char* s) +{ + printf("%s\n", s); +} +#line 255 "err_syntax12.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/err_syntax12.tab.h b/contrib/byacc/test/yacc/err_syntax12.tab.h new file mode 100644 index 000000000000..c273c08742ab --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax12.tab.h @@ -0,0 +1 @@ +#define text 456 diff --git a/contrib/byacc/test/yacc/err_syntax13.error b/contrib/byacc/test/yacc/err_syntax13.error new file mode 100644 index 000000000000..dd062569c1dc --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax13.error @@ -0,0 +1 @@ +YACC: e - line 7 of "./test/err_syntax13.y", the start symbol text is a token diff --git a/contrib/byacc/test/yacc/err_syntax13.output b/contrib/byacc/test/yacc/err_syntax13.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax13.output diff --git a/contrib/byacc/test/yacc/err_syntax13.tab.c b/contrib/byacc/test/yacc/err_syntax13.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax13.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax13.tab.h b/contrib/byacc/test/yacc/err_syntax13.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax13.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax14.error b/contrib/byacc/test/yacc/err_syntax14.error new file mode 100644 index 000000000000..787a21760b3d --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax14.error @@ -0,0 +1,2 @@ +YACC: w - line 7 of "./test/err_syntax14.y", the start symbol has been redeclared +YACC: e - the start symbol text2 is undefined diff --git a/contrib/byacc/test/yacc/err_syntax14.output b/contrib/byacc/test/yacc/err_syntax14.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax14.output diff --git a/contrib/byacc/test/yacc/err_syntax14.tab.c b/contrib/byacc/test/yacc/err_syntax14.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax14.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax14.tab.h b/contrib/byacc/test/yacc/err_syntax14.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax14.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax15.error b/contrib/byacc/test/yacc/err_syntax15.error new file mode 100644 index 000000000000..63600f1bd126 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax15.error @@ -0,0 +1 @@ +YACC: e - line 9 of "./test/err_syntax15.y", no grammar has been specified diff --git a/contrib/byacc/test/yacc/err_syntax15.output b/contrib/byacc/test/yacc/err_syntax15.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax15.output diff --git a/contrib/byacc/test/yacc/err_syntax15.tab.c b/contrib/byacc/test/yacc/err_syntax15.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax15.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax15.tab.h b/contrib/byacc/test/yacc/err_syntax15.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax15.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax16.error b/contrib/byacc/test/yacc/err_syntax16.error new file mode 100644 index 000000000000..b8dd094b9409 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax16.error @@ -0,0 +1 @@ +YACC: e - line 14 of "./test/err_syntax16.y", a token appears on the lhs of a production diff --git a/contrib/byacc/test/yacc/err_syntax16.output b/contrib/byacc/test/yacc/err_syntax16.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax16.output diff --git a/contrib/byacc/test/yacc/err_syntax16.tab.c b/contrib/byacc/test/yacc/err_syntax16.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax16.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax16.tab.h b/contrib/byacc/test/yacc/err_syntax16.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax16.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax17.error b/contrib/byacc/test/yacc/err_syntax17.error new file mode 100644 index 000000000000..24032f613202 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax17.error @@ -0,0 +1,3 @@ +YACC: e - line 8 of "./test/err_syntax17.y", unterminated action +S: { error + ^ diff --git a/contrib/byacc/test/yacc/err_syntax17.output b/contrib/byacc/test/yacc/err_syntax17.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax17.output diff --git a/contrib/byacc/test/yacc/err_syntax17.tab.c b/contrib/byacc/test/yacc/err_syntax17.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax17.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax17.tab.h b/contrib/byacc/test/yacc/err_syntax17.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax17.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax18.error b/contrib/byacc/test/yacc/err_syntax18.error new file mode 100644 index 000000000000..305b4cf45e3c --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax18.error @@ -0,0 +1 @@ +YACC: w - line 9 of "./test/err_syntax18.y", $4 references beyond the end of the current rule diff --git a/contrib/byacc/test/yacc/err_syntax18.output b/contrib/byacc/test/yacc/err_syntax18.output new file mode 100644 index 000000000000..09ed7d4c70a0 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax18.output @@ -0,0 +1,43 @@ + 0 $accept : expr $end + + 1 expr : '(' expr ')' + +state 0 + $accept : . expr $end (0) + + '(' shift 1 + . error + + expr goto 2 + + +state 1 + expr : '(' . expr ')' (1) + + '(' shift 1 + . error + + expr goto 3 + + +state 2 + $accept : expr . $end (0) + + $end accept + + +state 3 + expr : '(' expr . ')' (1) + + ')' shift 4 + . error + + +state 4 + expr : '(' expr ')' . (1) + + . reduce 1 + + +4 terminals, 2 nonterminals +2 grammar rules, 5 states diff --git a/contrib/byacc/test/yacc/err_syntax18.tab.c b/contrib/byacc/test/yacc/err_syntax18.tab.c new file mode 100644 index 000000000000..fb7b06c40cf3 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax18.tab.c @@ -0,0 +1,515 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse err_syntax18_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex err_syntax18_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror err_syntax18_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar err_syntax18_char +#endif /* yychar */ + +#ifndef yyval +#define yyval err_syntax18_val +#endif /* yyval */ + +#ifndef yylval +#define yylval err_syntax18_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug err_syntax18_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs err_syntax18_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag err_syntax18_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs err_syntax18_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen err_syntax18_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred err_syntax18_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto err_syntax18_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex err_syntax18_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex err_syntax18_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex err_syntax18_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable err_syntax18_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck err_syntax18_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname err_syntax18_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule err_syntax18_rule +#endif /* yyrule */ +#define YYPREFIX "err_syntax18_" + +#define YYPURE 0 + +#line 2 "err_syntax18.y" +int yylex(void); +static void yyerror(const char *); +#line 104 "err_syntax18.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT err_syntax18_lhs[] = { -1, + 0, +}; +static const YYINT err_syntax18_len[] = { 2, + 3, +}; +static const YYINT err_syntax18_defred[] = { 0, + 0, 0, 0, 1, +}; +static const YYINT err_syntax18_dgoto[] = { 2, +}; +static const YYINT err_syntax18_sindex[] = { -40, + -40, 0, -39, 0, +}; +static const YYINT err_syntax18_rindex[] = { 0, + 0, 0, 0, 0, +}; +static const YYINT err_syntax18_gindex[] = { 2, +}; +#define YYTABLESIZE 3 +static const YYINT err_syntax18_table[] = { 1, + 0, 4, 3, +}; +static const YYINT err_syntax18_check[] = { 40, + -1, 41, 1, +}; +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 256 +#define YYUNDFTOKEN 259 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const err_syntax18_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'('","')'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", +}; +static const char *const err_syntax18_rule[] = { +"$accept : expr", +"expr : '(' expr ')'", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 13 "err_syntax18.y" + +#include <stdio.h> + +int +main(void) +{ + printf("yyparse() = %d\n", yyparse()); + return 0; +} + +int +yylex(void) +{ + return -1; +} + +static void +yyerror(const char* s) +{ + printf("%s\n", s); +} +#line 251 "err_syntax18.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 1: +#line 9 "err_syntax18.y" + { yyval = yystack.l_mark[1]; } +break; +#line 457 "err_syntax18.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/err_syntax18.tab.h b/contrib/byacc/test/yacc/err_syntax18.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax18.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax19.error b/contrib/byacc/test/yacc/err_syntax19.error new file mode 100644 index 000000000000..895c8fe16264 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax19.error @@ -0,0 +1,3 @@ +YACC: e - line 9 of "./test/err_syntax19.y", illegal $-name + { $$ = $<oops>; } + ^ diff --git a/contrib/byacc/test/yacc/err_syntax19.output b/contrib/byacc/test/yacc/err_syntax19.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax19.output diff --git a/contrib/byacc/test/yacc/err_syntax19.tab.c b/contrib/byacc/test/yacc/err_syntax19.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax19.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax19.tab.h b/contrib/byacc/test/yacc/err_syntax19.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax19.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax2.error b/contrib/byacc/test/yacc/err_syntax2.error new file mode 100644 index 000000000000..fefda9fcf445 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax2.error @@ -0,0 +1,3 @@ +YACC: e - line 1 of "./test/err_syntax2.y", unmatched /* +%{ /* + ^ diff --git a/contrib/byacc/test/yacc/err_syntax2.output b/contrib/byacc/test/yacc/err_syntax2.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax2.output diff --git a/contrib/byacc/test/yacc/err_syntax2.tab.c b/contrib/byacc/test/yacc/err_syntax2.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax2.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax2.tab.h b/contrib/byacc/test/yacc/err_syntax2.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax2.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax20.error b/contrib/byacc/test/yacc/err_syntax20.error new file mode 100644 index 000000000000..76dac8152de8 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax20.error @@ -0,0 +1 @@ +YACC: w - the symbol recur is undefined diff --git a/contrib/byacc/test/yacc/err_syntax20.output b/contrib/byacc/test/yacc/err_syntax20.output new file mode 100644 index 000000000000..cfe62800c64f --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax20.output @@ -0,0 +1,41 @@ + 0 $accept : expr $end + + 1 expr : '(' recur ')' + +state 0 + $accept : . expr $end (0) + + '(' shift 1 + . error + + expr goto 2 + + +state 1 + expr : '(' . recur ')' (1) + + recur shift 3 + . error + + +state 2 + $accept : expr . $end (0) + + $end accept + + +state 3 + expr : '(' recur . ')' (1) + + ')' shift 4 + . error + + +state 4 + expr : '(' recur ')' . (1) + + . reduce 1 + + +5 terminals, 2 nonterminals +2 grammar rules, 5 states diff --git a/contrib/byacc/test/yacc/err_syntax20.tab.c b/contrib/byacc/test/yacc/err_syntax20.tab.c new file mode 100644 index 000000000000..85ea1ba908e1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax20.tab.c @@ -0,0 +1,511 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse err_syntax20_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex err_syntax20_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror err_syntax20_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar err_syntax20_char +#endif /* yychar */ + +#ifndef yyval +#define yyval err_syntax20_val +#endif /* yyval */ + +#ifndef yylval +#define yylval err_syntax20_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug err_syntax20_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs err_syntax20_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag err_syntax20_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs err_syntax20_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen err_syntax20_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred err_syntax20_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto err_syntax20_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex err_syntax20_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex err_syntax20_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex err_syntax20_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable err_syntax20_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck err_syntax20_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname err_syntax20_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule err_syntax20_rule +#endif /* yyrule */ +#define YYPREFIX "err_syntax20_" + +#define YYPURE 0 + +#line 2 "err_syntax20.y" +int yylex(void); +static void yyerror(const char *); +#line 104 "err_syntax20.tab.c" + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define recur 257 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT err_syntax20_lhs[] = { -1, + 0, +}; +static const YYINT err_syntax20_len[] = { 2, + 3, +}; +static const YYINT err_syntax20_defred[] = { 0, + 0, 0, 0, 1, +}; +static const YYINT err_syntax20_dgoto[] = { 2, +}; +static const YYINT err_syntax20_sindex[] = { -40, + -256, 0, -39, 0, +}; +static const YYINT err_syntax20_rindex[] = { 0, + 0, 0, 0, 0, +}; +static const YYINT err_syntax20_gindex[] = { 0, +}; +#define YYTABLESIZE 2 +static const YYINT err_syntax20_table[] = { 1, + 3, 4, +}; +static const YYINT err_syntax20_check[] = { 40, + 257, 41, +}; +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 257 +#define YYUNDFTOKEN 260 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const err_syntax20_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'('","')'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"recur",0,0, +"illegal-symbol", +}; +static const char *const err_syntax20_rule[] = { +"$accept : expr", +"expr : '(' recur ')'", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 16 "err_syntax20.y" + +#include <stdio.h> + +int +main(void) +{ + printf("yyparse() = %d\n", yyparse()); + return 0; +} + +int +yylex(void) +{ + return -1; +} + +static void +yyerror(const char* s) +{ + printf("%s\n", s); +} +#line 247 "err_syntax20.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 1: +#line 12 "err_syntax20.y" + { yystack.l_mark[-1].rechk = 3; } +break; +#line 453 "err_syntax20.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/err_syntax20.tab.h b/contrib/byacc/test/yacc/err_syntax20.tab.h new file mode 100644 index 000000000000..60dabd611dd2 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax20.tab.h @@ -0,0 +1 @@ +#define recur 257 diff --git a/contrib/byacc/test/yacc/err_syntax21.error b/contrib/byacc/test/yacc/err_syntax21.error new file mode 100644 index 000000000000..162d82d0c96d --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax21.error @@ -0,0 +1 @@ +YACC: e - line 12 of "./test/err_syntax21.y", $0 is untyped diff --git a/contrib/byacc/test/yacc/err_syntax21.output b/contrib/byacc/test/yacc/err_syntax21.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax21.output diff --git a/contrib/byacc/test/yacc/err_syntax21.tab.c b/contrib/byacc/test/yacc/err_syntax21.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax21.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax21.tab.h b/contrib/byacc/test/yacc/err_syntax21.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax21.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax22.error b/contrib/byacc/test/yacc/err_syntax22.error new file mode 100644 index 000000000000..9c71619c4e25 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax22.error @@ -0,0 +1 @@ +YACC: e - line 17 of "./test/err_syntax22.y", $2 (recur) is untyped diff --git a/contrib/byacc/test/yacc/err_syntax22.output b/contrib/byacc/test/yacc/err_syntax22.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax22.output diff --git a/contrib/byacc/test/yacc/err_syntax22.tab.c b/contrib/byacc/test/yacc/err_syntax22.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax22.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax22.tab.h b/contrib/byacc/test/yacc/err_syntax22.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax22.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax23.error b/contrib/byacc/test/yacc/err_syntax23.error new file mode 100644 index 000000000000..bcde6e7fac40 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax23.error @@ -0,0 +1 @@ +YACC: e - line 18 of "./test/err_syntax23.y", $$ is untyped diff --git a/contrib/byacc/test/yacc/err_syntax23.output b/contrib/byacc/test/yacc/err_syntax23.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax23.output diff --git a/contrib/byacc/test/yacc/err_syntax23.tab.c b/contrib/byacc/test/yacc/err_syntax23.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax23.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax23.tab.h b/contrib/byacc/test/yacc/err_syntax23.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax23.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax24.error b/contrib/byacc/test/yacc/err_syntax24.error new file mode 100644 index 000000000000..bdd3aeda0db3 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax24.error @@ -0,0 +1,2 @@ +YACC: w - line 21 of "./test/err_syntax24.y", the default action assigns an undefined value to $$ +YACC: e - line 22 of "./test/err_syntax24.y", $$ is untyped diff --git a/contrib/byacc/test/yacc/err_syntax24.output b/contrib/byacc/test/yacc/err_syntax24.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax24.output diff --git a/contrib/byacc/test/yacc/err_syntax24.tab.c b/contrib/byacc/test/yacc/err_syntax24.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax24.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax24.tab.h b/contrib/byacc/test/yacc/err_syntax24.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax24.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax25.error b/contrib/byacc/test/yacc/err_syntax25.error new file mode 100644 index 000000000000..ea45a70310de --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax25.error @@ -0,0 +1,3 @@ +YACC: e - line 11 of "./test/err_syntax25.y", too many %union declarations +%union { +^ diff --git a/contrib/byacc/test/yacc/err_syntax25.output b/contrib/byacc/test/yacc/err_syntax25.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax25.output diff --git a/contrib/byacc/test/yacc/err_syntax25.tab.c b/contrib/byacc/test/yacc/err_syntax25.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax25.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax25.tab.h b/contrib/byacc/test/yacc/err_syntax25.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax25.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax26.error b/contrib/byacc/test/yacc/err_syntax26.error new file mode 100644 index 000000000000..cddd5741bf7a --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax26.error @@ -0,0 +1 @@ +YACC: e - line 6 of "./test/err_syntax26.y", unexpected end-of-file diff --git a/contrib/byacc/test/yacc/err_syntax26.output b/contrib/byacc/test/yacc/err_syntax26.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax26.output diff --git a/contrib/byacc/test/yacc/err_syntax26.tab.c b/contrib/byacc/test/yacc/err_syntax26.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax26.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax26.tab.h b/contrib/byacc/test/yacc/err_syntax26.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax26.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax27.error b/contrib/byacc/test/yacc/err_syntax27.error new file mode 100644 index 000000000000..4737f99b9a37 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax27.error @@ -0,0 +1 @@ +YACC: e - line 3 of "./test/err_syntax27.y", missing '}' diff --git a/contrib/byacc/test/yacc/err_syntax27.output b/contrib/byacc/test/yacc/err_syntax27.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax27.output diff --git a/contrib/byacc/test/yacc/err_syntax27.tab.c b/contrib/byacc/test/yacc/err_syntax27.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax27.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax27.tab.h b/contrib/byacc/test/yacc/err_syntax27.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax27.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax3.error b/contrib/byacc/test/yacc/err_syntax3.error new file mode 100644 index 000000000000..6926214f5e7b --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax3.error @@ -0,0 +1,3 @@ +YACC: e - line 6 of "./test/err_syntax3.y", unterminated string +%token <text> '(' '*' '& + ^ diff --git a/contrib/byacc/test/yacc/err_syntax3.output b/contrib/byacc/test/yacc/err_syntax3.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax3.output diff --git a/contrib/byacc/test/yacc/err_syntax3.tab.c b/contrib/byacc/test/yacc/err_syntax3.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax3.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax3.tab.h b/contrib/byacc/test/yacc/err_syntax3.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax3.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax4.error b/contrib/byacc/test/yacc/err_syntax4.error new file mode 100644 index 000000000000..72b683ee7d4b --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax4.error @@ -0,0 +1,3 @@ +YACC: e - line 1 of "./test/err_syntax4.y", unmatched %{ +%{ +^ diff --git a/contrib/byacc/test/yacc/err_syntax4.output b/contrib/byacc/test/yacc/err_syntax4.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax4.output diff --git a/contrib/byacc/test/yacc/err_syntax4.tab.c b/contrib/byacc/test/yacc/err_syntax4.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax4.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax4.tab.h b/contrib/byacc/test/yacc/err_syntax4.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax4.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax5.error b/contrib/byacc/test/yacc/err_syntax5.error new file mode 100644 index 000000000000..fd3bf0df6b9f --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax5.error @@ -0,0 +1,3 @@ +YACC: e - line 6 of "./test/err_syntax5.y", unterminated %union declaration +%union { +^ diff --git a/contrib/byacc/test/yacc/err_syntax5.output b/contrib/byacc/test/yacc/err_syntax5.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax5.output diff --git a/contrib/byacc/test/yacc/err_syntax5.tab.c b/contrib/byacc/test/yacc/err_syntax5.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax5.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax5.tab.h b/contrib/byacc/test/yacc/err_syntax5.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax5.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax6.error b/contrib/byacc/test/yacc/err_syntax6.error new file mode 100644 index 000000000000..ae83bd2a3735 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax6.error @@ -0,0 +1,3 @@ +YACC: e - line 6 of "./test/err_syntax6.y", illegal tag +%token <text) '(' '*' '& + ^ diff --git a/contrib/byacc/test/yacc/err_syntax6.output b/contrib/byacc/test/yacc/err_syntax6.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax6.output diff --git a/contrib/byacc/test/yacc/err_syntax6.tab.c b/contrib/byacc/test/yacc/err_syntax6.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax6.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax6.tab.h b/contrib/byacc/test/yacc/err_syntax6.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax6.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax7.error b/contrib/byacc/test/yacc/err_syntax7.error new file mode 100644 index 000000000000..fb6342288f52 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7.error @@ -0,0 +1,3 @@ +YACC: e - line 6 of "./test/err_syntax7.y", illegal character +%token <text> '\777' + ^ diff --git a/contrib/byacc/test/yacc/err_syntax7.output b/contrib/byacc/test/yacc/err_syntax7.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7.output diff --git a/contrib/byacc/test/yacc/err_syntax7.tab.c b/contrib/byacc/test/yacc/err_syntax7.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax7.tab.h b/contrib/byacc/test/yacc/err_syntax7.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax7a.error b/contrib/byacc/test/yacc/err_syntax7a.error new file mode 100644 index 000000000000..f6adba64ddc1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7a.error @@ -0,0 +1,3 @@ +YACC: e - line 6 of "./test/err_syntax7a.y", illegal character +%token <text> '\xfff' + ^ diff --git a/contrib/byacc/test/yacc/err_syntax7a.output b/contrib/byacc/test/yacc/err_syntax7a.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7a.output diff --git a/contrib/byacc/test/yacc/err_syntax7a.tab.c b/contrib/byacc/test/yacc/err_syntax7a.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7a.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax7a.tab.h b/contrib/byacc/test/yacc/err_syntax7a.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7a.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax7b.error b/contrib/byacc/test/yacc/err_syntax7b.error new file mode 100644 index 000000000000..f3e512fd1a71 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7b.error @@ -0,0 +1,3 @@ +YACC: e - line 6 of "./test/err_syntax7b.y", illegal character +%token <text> '\x.' + ^ diff --git a/contrib/byacc/test/yacc/err_syntax7b.output b/contrib/byacc/test/yacc/err_syntax7b.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7b.output diff --git a/contrib/byacc/test/yacc/err_syntax7b.tab.c b/contrib/byacc/test/yacc/err_syntax7b.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7b.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax7b.tab.h b/contrib/byacc/test/yacc/err_syntax7b.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax7b.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax8.error b/contrib/byacc/test/yacc/err_syntax8.error new file mode 100644 index 000000000000..53a3a328d05e --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax8.error @@ -0,0 +1 @@ +YACC: e - line 6 of "./test/err_syntax8.y", illegal use of reserved symbol . diff --git a/contrib/byacc/test/yacc/err_syntax8.output b/contrib/byacc/test/yacc/err_syntax8.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax8.output diff --git a/contrib/byacc/test/yacc/err_syntax8.tab.c b/contrib/byacc/test/yacc/err_syntax8.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax8.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax8.tab.h b/contrib/byacc/test/yacc/err_syntax8.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax8.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax8a.error b/contrib/byacc/test/yacc/err_syntax8a.error new file mode 100644 index 000000000000..3135551633f0 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax8a.error @@ -0,0 +1 @@ +YACC: e - line 6 of "./test/err_syntax8a.y", illegal use of reserved symbol $$123 diff --git a/contrib/byacc/test/yacc/err_syntax8a.output b/contrib/byacc/test/yacc/err_syntax8a.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax8a.output diff --git a/contrib/byacc/test/yacc/err_syntax8a.tab.c b/contrib/byacc/test/yacc/err_syntax8a.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax8a.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax8a.tab.h b/contrib/byacc/test/yacc/err_syntax8a.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax8a.tab.h diff --git a/contrib/byacc/test/yacc/err_syntax9.error b/contrib/byacc/test/yacc/err_syntax9.error new file mode 100644 index 000000000000..43696bd1f4c3 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax9.error @@ -0,0 +1 @@ +YACC: e - line 7 of "./test/err_syntax9.y", the start symbol text cannot be declared to be a token diff --git a/contrib/byacc/test/yacc/err_syntax9.output b/contrib/byacc/test/yacc/err_syntax9.output new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax9.output diff --git a/contrib/byacc/test/yacc/err_syntax9.tab.c b/contrib/byacc/test/yacc/err_syntax9.tab.c new file mode 100644 index 000000000000..6c35f23329b5 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax9.tab.c @@ -0,0 +1,15 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 diff --git a/contrib/byacc/test/yacc/err_syntax9.tab.h b/contrib/byacc/test/yacc/err_syntax9.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/err_syntax9.tab.h diff --git a/contrib/byacc/test/yacc/error.error b/contrib/byacc/test/yacc/error.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/error.error diff --git a/contrib/byacc/test/yacc/error.output b/contrib/byacc/test/yacc/error.output new file mode 100644 index 000000000000..0c4db6225e24 --- /dev/null +++ b/contrib/byacc/test/yacc/error.output @@ -0,0 +1,27 @@ + 0 $accept : S $end + + 1 S : error + +state 0 + $accept : . S $end (0) + + error shift 1 + . error + + S goto 2 + + +state 1 + S : error . (1) + + . reduce 1 + + +state 2 + $accept : S . $end (0) + + $end accept + + +2 terminals, 2 nonterminals +2 grammar rules, 3 states diff --git a/contrib/byacc/test/yacc/error.tab.c b/contrib/byacc/test/yacc/error.tab.c new file mode 100644 index 000000000000..e7aa39508c42 --- /dev/null +++ b/contrib/byacc/test/yacc/error.tab.c @@ -0,0 +1,508 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse error_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex error_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror error_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar error_char +#endif /* yychar */ + +#ifndef yyval +#define yyval error_val +#endif /* yyval */ + +#ifndef yylval +#define yylval error_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug error_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs error_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag error_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs error_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen error_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred error_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto error_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex error_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex error_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex error_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable error_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck error_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname error_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule error_rule +#endif /* yyrule */ +#define YYPREFIX "error_" + +#define YYPURE 0 + +#line 2 "error.y" +int yylex(void); +static void yyerror(const char *); +#line 104 "error.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT error_lhs[] = { -1, + 0, +}; +static const YYINT error_len[] = { 2, + 1, +}; +static const YYINT error_defred[] = { 0, + 1, 0, +}; +static const YYINT error_dgoto[] = { 2, +}; +static const YYINT error_sindex[] = { -256, + 0, 0, +}; +static const YYINT error_rindex[] = { 0, + 0, 0, +}; +static const YYINT error_gindex[] = { 0, +}; +#define YYTABLESIZE 0 +static const YYINT error_table[] = { 1, +}; +static const YYINT error_check[] = { 256, +}; +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 256 +#define YYUNDFTOKEN 259 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const error_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", +}; +static const char *const error_rule[] = { +"$accept : S", +"S : error", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 8 "error.y" + +#include <stdio.h> + +int +main(void) +{ + printf("yyparse() = %d\n", yyparse()); + return 0; +} + +int +yylex(void) +{ + return -1; +} + +static void +yyerror(const char* s) +{ + printf("%s\n", s); +} +#line 249 "error.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/error.tab.h b/contrib/byacc/test/yacc/error.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/error.tab.h diff --git a/contrib/byacc/test/yacc/grammar.dot b/contrib/byacc/test/yacc/grammar.dot new file mode 100644 index 000000000000..1988e12ddd6b --- /dev/null +++ b/contrib/byacc/test/yacc/grammar.dot @@ -0,0 +1,906 @@ +digraph test-grammar { + edge [fontsize=10]; + node [shape=box,fontsize=10]; + orientation=landscape; + rankdir=LR; + /* + margin=0.2; + page="8.27,11.69"; // for A4 printing + ratio=auto; + */ + + q0 [label="0:\l $accept -> . program $end\l program -> . { $end }\l program -> . translation_unit\l translation_unit -> . external_declaration\l translation_unit -> . translation_unit external_declaration\l external_declaration -> . declaration\l external_declaration -> . function_definition\l external_declaration -> . ';'\l external_declaration -> . linkage_specification\l external_declaration -> . T_ASM T_ASMARG ';'\l external_declaration -> . error T_MATCHRBRACE\l external_declaration -> . error ';'\l linkage_specification -> . T_EXTERN T_STRING_LITERAL braces\l linkage_specification -> . T_EXTERN T_STRING_LITERAL declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> . decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l function_definition -> . declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; + q1 [label="1:\l external_declaration -> error . T_MATCHRBRACE\l external_declaration -> error . ';'\l"]; + q2 [label="2:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> '(' . declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; + q3 [label="3:\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l pointer -> '*' . opt_type_qualifiers\l pointer -> '*' . opt_type_qualifiers pointer\l opt_type_qualifiers -> . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l opt_type_qualifiers -> . type_qualifier_list\l type_qualifier_list -> . type_qualifier\l type_qualifier_list -> . type_qualifier_list type_qualifier\l"]; + q4 [label="4:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l identifier_or_ref -> '&' . any_id\l"]; + q5 [label="5:\l any_id -> T_IDENTIFIER . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q6 [label="6:\l type_specifier -> T_TYPEDEF_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l any_id -> T_TYPEDEF_NAME . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; + q7 [label="7:\l type_qualifier -> T_DEFINE_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q8 [label="8:\l storage_class -> T_AUTO . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q9 [label="9:\l linkage_specification -> T_EXTERN . T_STRING_LITERAL braces\l linkage_specification -> T_EXTERN . T_STRING_LITERAL declaration\l storage_class -> T_EXTERN . { ';' T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q10 [label="10:\l storage_class -> T_REGISTER . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q11 [label="11:\l storage_class -> T_STATIC . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q12 [label="12:\l any_typedef -> T_TYPEDEF . { T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; + q13 [label="13:\l storage_class -> T_INLINE . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q14 [label="14:\l any_typedef -> T_EXTENSION . T_TYPEDEF\l storage_class -> T_EXTENSION . { ';' T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q15 [label="15:\l type_specifier -> T_CHAR . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q16 [label="16:\l type_specifier -> T_DOUBLE . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q17 [label="17:\l type_specifier -> T_FLOAT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q18 [label="18:\l type_specifier -> T_INT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q19 [label="19:\l type_specifier -> T_VOID . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q20 [label="20:\l type_specifier -> T_LONG . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q21 [label="21:\l type_specifier -> T_SHORT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q22 [label="22:\l type_specifier -> T_SIGNED . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q23 [label="23:\l type_specifier -> T_UNSIGNED . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q24 [label="24:\l enumeration -> T_ENUM . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"]; + q25 [label="25:\l struct_or_union -> T_STRUCT . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"]; + q26 [label="26:\l struct_or_union -> T_UNION . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"]; + q27 [label="27:\l type_specifier -> T_Bool . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q28 [label="28:\l type_specifier -> T_Complex . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q29 [label="29:\l type_specifier -> T_Imaginary . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q30 [label="30:\l type_qualifier -> T_TYPE_QUALIFIER . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q31 [label="31:\l external_declaration -> T_ASM . T_ASMARG ';'\l"]; + q32 [label="32:\l external_declaration -> ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q33 [label="33:\l $accept -> program . $end\l"]; + q34 [label="34:\l declaration -> decl_specifiers . ';'\l declaration -> decl_specifiers . init_declarator_list ';'\l function_definition -> decl_specifiers . declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l init_declarator_list -> . init_declarator\l init_declarator_list -> . init_declarator_list ',' init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; + q35 [label="35:\l decl_specifiers -> decl_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q36 [label="36:\l decl_specifier -> storage_class . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q37 [label="37:\l decl_specifier -> type_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q38 [label="38:\l decl_specifier -> type_qualifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q39 [label="39:\l type_specifier -> struct_or_union_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q40 [label="40:\l type_specifier -> enum_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q41 [label="41:\l $$4 -> . { T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l function_definition -> declarator . $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l"]; + q42 [label="42:\l declarator -> direct_declarator . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l direct_declarator -> direct_declarator . T_BRACKETS\l direct_declarator -> direct_declarator . '(' parameter_type_list ')'\l direct_declarator -> direct_declarator . '(' opt_identifier_list ')'\l"]; + q43 [label="43:\l braces -> . T_LBRACE T_MATCHRBRACE\l struct_or_union_specifier -> struct_or_union . any_id braces\l struct_or_union_specifier -> struct_or_union . braces\l struct_or_union_specifier -> struct_or_union . any_id\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l"]; + q44 [label="44:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> pointer . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; + q45 [label="45:\l identifier_or_ref -> any_id . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; + q46 [label="46:\l direct_declarator -> identifier_or_ref . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; + q47 [label="47:\l braces -> . T_LBRACE T_MATCHRBRACE\l enum_specifier -> enumeration . any_id braces\l enum_specifier -> enumeration . braces\l enum_specifier -> enumeration . any_id\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l"]; + q48 [label="48:\l program -> translation_unit . { $end }\l translation_unit -> translation_unit . external_declaration\l external_declaration -> . declaration\l external_declaration -> . function_definition\l external_declaration -> . ';'\l external_declaration -> . linkage_specification\l external_declaration -> . T_ASM T_ASMARG ';'\l external_declaration -> . error T_MATCHRBRACE\l external_declaration -> . error ';'\l linkage_specification -> . T_EXTERN T_STRING_LITERAL braces\l linkage_specification -> . T_EXTERN T_STRING_LITERAL declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> . decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l function_definition -> . declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; + q49 [label="49:\l translation_unit -> external_declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q50 [label="50:\l external_declaration -> declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q51 [label="51:\l external_declaration -> function_definition . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q52 [label="52:\l external_declaration -> linkage_specification . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q53 [label="53:\l declaration -> any_typedef . decl_specifiers $$1 opt_declarator_list ';'\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; + q54 [label="54:\l external_declaration -> error T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q55 [label="55:\l external_declaration -> error ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q56 [label="56:\l any_id -> T_TYPEDEF_NAME . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q57 [label="57:\l direct_declarator -> '(' declarator . ')'\l"]; + q58 [label="58:\l type_qualifier_list -> type_qualifier . { ')' ',' T_BRACKETS T_TYPE_QUALIFIER T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q59 [label="59:\l pointer -> . '*' opt_type_qualifiers\l pointer -> '*' opt_type_qualifiers . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '(' }\l pointer -> . '*' opt_type_qualifiers pointer\l pointer -> '*' opt_type_qualifiers . pointer\l"]; + q60 [label="60:\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l opt_type_qualifiers -> type_qualifier_list . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l type_qualifier_list -> type_qualifier_list . type_qualifier\l"]; + q61 [label="61:\l identifier_or_ref -> '&' any_id . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; + q62 [label="62:\l braces -> . T_LBRACE T_MATCHRBRACE\l linkage_specification -> T_EXTERN T_STRING_LITERAL . braces\l linkage_specification -> T_EXTERN T_STRING_LITERAL . declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; + q63 [label="63:\l any_typedef -> T_EXTENSION T_TYPEDEF . { T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; + q64 [label="64:\l external_declaration -> T_ASM T_ASMARG . ';'\l"]; + q65 [label="65:\l storage_class -> T_EXTERN . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q66 [label="66:\l storage_class -> T_EXTENSION . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q67 [label="67:\l declaration -> decl_specifiers ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q68 [label="68:\l decl_specifiers -> decl_specifiers decl_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q69 [label="69:\l declaration -> decl_specifiers init_declarator_list . ';'\l init_declarator_list -> init_declarator_list . ',' init_declarator\l"]; + q70 [label="70:\l init_declarator_list -> init_declarator . { ',' ';' }\l"]; + q71 [label="71:\l $$2 -> . { T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l function_definition -> decl_specifiers declarator . $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l init_declarator -> declarator . { ',' ';' }\l init_declarator -> declarator . '=' $$5 T_INITIALIZER\l"]; + q72 [label="72:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> declarator $$4 . opt_declaration_list T_LBRACE T_MATCHRBRACE\l opt_declaration_list -> . { T_LBRACE }\l opt_declaration_list -> . T_VA_DCL\l opt_declaration_list -> . declaration_list\l declaration_list -> . declaration\l declaration_list -> . declaration_list declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; + q73 [label="73:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l direct_declarator -> direct_declarator '(' . parameter_type_list ')'\l direct_declarator -> direct_declarator '(' . opt_identifier_list ')'\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l opt_identifier_list -> . { ')' }\l opt_identifier_list -> . identifier_list\l identifier_list -> . any_id\l identifier_list -> . identifier_list ',' any_id\l"]; + q74 [label="74:\l direct_declarator -> direct_declarator T_BRACKETS . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; + q75 [label="75:\l braces -> T_LBRACE . T_MATCHRBRACE\l"]; + q76 [label="76:\l braces -> . T_LBRACE T_MATCHRBRACE\l struct_or_union_specifier -> struct_or_union any_id . braces\l struct_or_union_specifier -> struct_or_union any_id . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q77 [label="77:\l struct_or_union_specifier -> struct_or_union braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q78 [label="78:\l declarator -> pointer direct_declarator . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l direct_declarator -> direct_declarator . T_BRACKETS\l direct_declarator -> direct_declarator . '(' parameter_type_list ')'\l direct_declarator -> direct_declarator . '(' opt_identifier_list ')'\l"]; + q79 [label="79:\l braces -> . T_LBRACE T_MATCHRBRACE\l enum_specifier -> enumeration any_id . braces\l enum_specifier -> enumeration any_id . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q80 [label="80:\l enum_specifier -> enumeration braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q81 [label="81:\l translation_unit -> translation_unit external_declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q82 [label="82:\l type_specifier -> T_TYPEDEF_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q83 [label="83:\l $$1 -> . { ';' T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l declaration -> any_typedef decl_specifiers . $$1 opt_declarator_list ';'\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; + q84 [label="84:\l direct_declarator -> '(' declarator ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; + q85 [label="85:\l pointer -> '*' opt_type_qualifiers pointer . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '(' }\l"]; + q86 [label="86:\l type_qualifier_list -> type_qualifier_list type_qualifier . { ')' ',' T_BRACKETS T_TYPE_QUALIFIER T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q87 [label="87:\l declaration -> decl_specifiers . ';'\l declaration -> decl_specifiers . init_declarator_list ';'\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l init_declarator_list -> . init_declarator\l init_declarator_list -> . init_declarator_list ',' init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; + q88 [label="88:\l linkage_specification -> T_EXTERN T_STRING_LITERAL declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q89 [label="89:\l linkage_specification -> T_EXTERN T_STRING_LITERAL braces . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q90 [label="90:\l external_declaration -> T_ASM T_ASMARG ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q91 [label="91:\l declaration -> decl_specifiers init_declarator_list ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q92 [label="92:\l init_declarator_list -> init_declarator_list ',' . init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; + q93 [label="93:\l $$5 -> . { T_INITIALIZER }\l init_declarator -> declarator '=' . $$5 T_INITIALIZER\l"]; + q94 [label="94:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> decl_specifiers declarator $$2 . opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l opt_declaration_list -> . { T_LBRACE }\l opt_declaration_list -> . T_VA_DCL\l opt_declaration_list -> . declaration_list\l declaration_list -> . declaration\l declaration_list -> . declaration_list declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; + q95 [label="95:\l opt_declaration_list -> T_VA_DCL . { T_LBRACE }\l"]; + q96 [label="96:\l declaration_list -> declaration . { T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; + q97 [label="97:\l function_definition -> declarator $$4 opt_declaration_list . T_LBRACE T_MATCHRBRACE\l"]; + q98 [label="98:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l opt_declaration_list -> declaration_list . { T_LBRACE }\l declaration_list -> declaration_list . declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; + q99 [label="99:\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l parameter_declaration -> decl_specifiers . declarator\l parameter_declaration -> decl_specifiers . abs_declarator\l parameter_declaration -> decl_specifiers . { ')' ',' }\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> . pointer\l abs_declarator -> . pointer direct_abs_declarator\l abs_declarator -> . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l"]; + q100 [label="100:\l direct_declarator -> direct_declarator '(' parameter_type_list . ')'\l"]; + q101 [label="101:\l parameter_type_list -> parameter_list . { ')' }\l parameter_type_list -> parameter_list . ',' T_ELLIPSIS\l parameter_list -> parameter_list . ',' parameter_declaration\l"]; + q102 [label="102:\l parameter_list -> parameter_declaration . { ')' ',' }\l"]; + q103 [label="103:\l direct_declarator -> direct_declarator '(' opt_identifier_list . ')'\l"]; + q104 [label="104:\l opt_identifier_list -> identifier_list . { ')' }\l identifier_list -> identifier_list . ',' any_id\l"]; + q105 [label="105:\l identifier_list -> any_id . { ')' ',' }\l"]; + q106 [label="106:\l braces -> T_LBRACE T_MATCHRBRACE . { ')' ',' ';' T_ASM T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q107 [label="107:\l struct_or_union_specifier -> struct_or_union any_id braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q108 [label="108:\l enum_specifier -> enumeration any_id braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; + q109 [label="109:\l declaration -> any_typedef decl_specifiers $$1 . opt_declarator_list ';'\l opt_declarator_list -> . { ';' }\l opt_declarator_list -> . declarator_list\l declarator_list -> . declarator\l declarator_list -> . declarator_list ',' declarator\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; + q110 [label="110:\l init_declarator -> declarator . { ',' ';' }\l init_declarator -> declarator . '=' $$5 T_INITIALIZER\l"]; + q111 [label="111:\l init_declarator_list -> init_declarator_list ',' init_declarator . { ',' ';' }\l"]; + q112 [label="112:\l init_declarator -> declarator '=' $$5 . T_INITIALIZER\l"]; + q113 [label="113:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list . T_LBRACE $$3 T_MATCHRBRACE\l"]; + q114 [label="114:\l function_definition -> declarator $$4 opt_declaration_list T_LBRACE . T_MATCHRBRACE\l"]; + q115 [label="115:\l declaration_list -> declaration_list declaration . { T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; + q116 [label="116:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> '(' . declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> . pointer\l abs_declarator -> . pointer direct_abs_declarator\l abs_declarator -> . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> '(' . abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> '(' . parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l direct_abs_declarator -> '(' . ')'\l"]; + q117 [label="117:\l direct_abs_declarator -> T_BRACKETS . { ')' ',' T_BRACKETS '(' }\l"]; + q118 [label="118:\l parameter_declaration -> decl_specifiers declarator . { ')' ',' }\l"]; + q119 [label="119:\l parameter_declaration -> decl_specifiers abs_declarator . { ')' ',' }\l"]; + q120 [label="120:\l abs_declarator -> direct_abs_declarator . { ')' ',' }\l direct_abs_declarator -> direct_abs_declarator . T_BRACKETS\l direct_abs_declarator -> direct_abs_declarator . '(' parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator . '(' ')'\l"]; + q121 [label="121:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> pointer . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> pointer . { ')' ',' }\l abs_declarator -> pointer . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l"]; + q122 [label="122:\l direct_declarator -> direct_declarator '(' parameter_type_list ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; + q123 [label="123:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l parameter_type_list -> parameter_list ',' . T_ELLIPSIS\l parameter_list -> parameter_list ',' . parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l"]; + q124 [label="124:\l direct_declarator -> direct_declarator '(' opt_identifier_list ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; + q125 [label="125:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l identifier_list -> identifier_list ',' . any_id\l"]; + q126 [label="126:\l declarator_list -> declarator . { ',' ';' }\l"]; + q127 [label="127:\l declaration -> any_typedef decl_specifiers $$1 opt_declarator_list . ';'\l"]; + q128 [label="128:\l opt_declarator_list -> declarator_list . { ';' }\l declarator_list -> declarator_list . ',' declarator\l"]; + q129 [label="129:\l init_declarator -> declarator '=' $$5 T_INITIALIZER . { ',' ';' }\l"]; + q130 [label="130:\l $$3 -> . { T_MATCHRBRACE }\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE . $$3 T_MATCHRBRACE\l"]; + q131 [label="131:\l function_definition -> declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q132 [label="132:\l direct_abs_declarator -> '(' ')' . { ')' ',' T_BRACKETS '(' }\l"]; + q133 [label="133:\l direct_abs_declarator -> '(' abs_declarator . ')'\l"]; + q134 [label="134:\l direct_abs_declarator -> '(' parameter_type_list . ')'\l"]; + q135 [label="135:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l direct_abs_declarator -> direct_abs_declarator '(' . parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator '(' . ')'\l"]; + q136 [label="136:\l direct_abs_declarator -> direct_abs_declarator T_BRACKETS . { ')' ',' T_BRACKETS '(' }\l"]; + q137 [label="137:\l abs_declarator -> pointer direct_abs_declarator . { ')' ',' }\l direct_abs_declarator -> direct_abs_declarator . T_BRACKETS\l direct_abs_declarator -> direct_abs_declarator . '(' parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator . '(' ')'\l"]; + q138 [label="138:\l parameter_type_list -> parameter_list ',' T_ELLIPSIS . { ')' }\l"]; + q139 [label="139:\l parameter_list -> parameter_list ',' parameter_declaration . { ')' ',' }\l"]; + q140 [label="140:\l identifier_list -> identifier_list ',' any_id . { ')' ',' }\l"]; + q141 [label="141:\l declaration -> any_typedef decl_specifiers $$1 opt_declarator_list ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q142 [label="142:\l declarator_list -> declarator_list ',' . declarator\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; + q143 [label="143:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 . T_MATCHRBRACE\l"]; + q144 [label="144:\l direct_abs_declarator -> '(' abs_declarator ')' . { ')' ',' T_BRACKETS '(' }\l"]; + q145 [label="145:\l direct_abs_declarator -> '(' parameter_type_list ')' . { ')' ',' T_BRACKETS '(' }\l"]; + q146 [label="146:\l direct_abs_declarator -> direct_abs_declarator '(' ')' . { ')' ',' T_BRACKETS '(' }\l"]; + q147 [label="147:\l direct_abs_declarator -> direct_abs_declarator '(' parameter_type_list . ')'\l"]; + q148 [label="148:\l declarator_list -> declarator_list ',' declarator . { ',' ';' }\l"]; + q149 [label="149:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; + q150 [label="150:\l direct_abs_declarator -> direct_abs_declarator '(' parameter_type_list ')' . { ')' ',' T_BRACKETS '(' }\l"]; + + q0 -> q1 [label="error"]; + q0 -> q2 [label="'('"]; + q0 -> q3 [label="'*'"]; + q0 -> q4 [label="'&'"]; + q0 -> q5 [label="T_IDENTIFIER"]; + q0 -> q6 [label="T_TYPEDEF_NAME"]; + q0 -> q7 [label="T_DEFINE_NAME"]; + q0 -> q8 [label="T_AUTO"]; + q0 -> q9 [label="T_EXTERN"]; + q0 -> q10 [label="T_REGISTER"]; + q0 -> q11 [label="T_STATIC"]; + q0 -> q12 [label="T_TYPEDEF"]; + q0 -> q13 [label="T_INLINE"]; + q0 -> q14 [label="T_EXTENSION"]; + q0 -> q15 [label="T_CHAR"]; + q0 -> q16 [label="T_DOUBLE"]; + q0 -> q17 [label="T_FLOAT"]; + q0 -> q18 [label="T_INT"]; + q0 -> q19 [label="T_VOID"]; + q0 -> q20 [label="T_LONG"]; + q0 -> q21 [label="T_SHORT"]; + q0 -> q22 [label="T_SIGNED"]; + q0 -> q23 [label="T_UNSIGNED"]; + q0 -> q24 [label="T_ENUM"]; + q0 -> q25 [label="T_STRUCT"]; + q0 -> q26 [label="T_UNION"]; + q0 -> q27 [label="T_Bool"]; + q0 -> q28 [label="T_Complex"]; + q0 -> q29 [label="T_Imaginary"]; + q0 -> q30 [label="T_TYPE_QUALIFIER"]; + q0 -> q31 [label="T_ASM"]; + q0 -> q32 [label="';'"]; + q0 -> q33 [label="program"]; + q0 -> q34 [label="decl_specifiers"]; + q0 -> q35 [label="decl_specifier"]; + q0 -> q36 [label="storage_class"]; + q0 -> q37 [label="type_specifier"]; + q0 -> q38 [label="type_qualifier"]; + q0 -> q39 [label="struct_or_union_specifier"]; + q0 -> q40 [label="enum_specifier"]; + q0 -> q41 [label="declarator"]; + q0 -> q42 [label="direct_declarator"]; + q0 -> q43 [label="struct_or_union"]; + q0 -> q44 [label="pointer"]; + q0 -> q45 [label="any_id"]; + q0 -> q46 [label="identifier_or_ref"]; + q0 -> q47 [label="enumeration"]; + q0 -> q48 [label="translation_unit"]; + q0 -> q49 [label="external_declaration"]; + q0 -> q50 [label="declaration"]; + q0 -> q51 [label="function_definition"]; + q0 -> q52 [label="linkage_specification"]; + q0 -> q53 [label="any_typedef"]; + q1 -> q54 [label="T_MATCHRBRACE"]; + q1 -> q55 [label="';'"]; + q2 -> q2 [label="'('"]; + q2 -> q3 [label="'*'"]; + q2 -> q4 [label="'&'"]; + q2 -> q5 [label="T_IDENTIFIER"]; + q2 -> q56 [label="T_TYPEDEF_NAME"]; + q2 -> q57 [label="declarator"]; + q2 -> q42 [label="direct_declarator"]; + q2 -> q44 [label="pointer"]; + q2 -> q45 [label="any_id"]; + q2 -> q46 [label="identifier_or_ref"]; + q3 -> q7 [label="T_DEFINE_NAME"]; + q3 -> q30 [label="T_TYPE_QUALIFIER"]; + q3 -> q58 [label="type_qualifier"]; + q3 -> q59 [label="opt_type_qualifiers"]; + q3 -> q60 [label="type_qualifier_list"]; + q4 -> q5 [label="T_IDENTIFIER"]; + q4 -> q56 [label="T_TYPEDEF_NAME"]; + q4 -> q61 [label="any_id"]; + q9 -> q62 [label="T_STRING_LITERAL"]; + q14 -> q63 [label="T_TYPEDEF"]; + q31 -> q64 [label="T_ASMARG"]; + q34 -> q2 [label="'('"]; + q34 -> q3 [label="'*'"]; + q34 -> q4 [label="'&'"]; + q34 -> q5 [label="T_IDENTIFIER"]; + q34 -> q6 [label="T_TYPEDEF_NAME"]; + q34 -> q7 [label="T_DEFINE_NAME"]; + q34 -> q8 [label="T_AUTO"]; + q34 -> q65 [label="T_EXTERN"]; + q34 -> q10 [label="T_REGISTER"]; + q34 -> q11 [label="T_STATIC"]; + q34 -> q13 [label="T_INLINE"]; + q34 -> q66 [label="T_EXTENSION"]; + q34 -> q15 [label="T_CHAR"]; + q34 -> q16 [label="T_DOUBLE"]; + q34 -> q17 [label="T_FLOAT"]; + q34 -> q18 [label="T_INT"]; + q34 -> q19 [label="T_VOID"]; + q34 -> q20 [label="T_LONG"]; + q34 -> q21 [label="T_SHORT"]; + q34 -> q22 [label="T_SIGNED"]; + q34 -> q23 [label="T_UNSIGNED"]; + q34 -> q24 [label="T_ENUM"]; + q34 -> q25 [label="T_STRUCT"]; + q34 -> q26 [label="T_UNION"]; + q34 -> q27 [label="T_Bool"]; + q34 -> q28 [label="T_Complex"]; + q34 -> q29 [label="T_Imaginary"]; + q34 -> q30 [label="T_TYPE_QUALIFIER"]; + q34 -> q67 [label="';'"]; + q34 -> q68 [label="decl_specifier"]; + q34 -> q36 [label="storage_class"]; + q34 -> q37 [label="type_specifier"]; + q34 -> q38 [label="type_qualifier"]; + q34 -> q39 [label="struct_or_union_specifier"]; + q34 -> q40 [label="enum_specifier"]; + q34 -> q69 [label="init_declarator_list"]; + q34 -> q70 [label="init_declarator"]; + q34 -> q71 [label="declarator"]; + q34 -> q42 [label="direct_declarator"]; + q34 -> q43 [label="struct_or_union"]; + q34 -> q44 [label="pointer"]; + q34 -> q45 [label="any_id"]; + q34 -> q46 [label="identifier_or_ref"]; + q34 -> q47 [label="enumeration"]; + q41 -> q72 [label="$$4"]; + q42 -> q73 [label="'('"]; + q42 -> q74 [label="T_BRACKETS"]; + q43 -> q5 [label="T_IDENTIFIER"]; + q43 -> q56 [label="T_TYPEDEF_NAME"]; + q43 -> q75 [label="T_LBRACE"]; + q43 -> q76 [label="any_id"]; + q43 -> q77 [label="braces"]; + q44 -> q2 [label="'('"]; + q44 -> q4 [label="'&'"]; + q44 -> q5 [label="T_IDENTIFIER"]; + q44 -> q56 [label="T_TYPEDEF_NAME"]; + q44 -> q78 [label="direct_declarator"]; + q44 -> q45 [label="any_id"]; + q44 -> q46 [label="identifier_or_ref"]; + q47 -> q5 [label="T_IDENTIFIER"]; + q47 -> q56 [label="T_TYPEDEF_NAME"]; + q47 -> q75 [label="T_LBRACE"]; + q47 -> q79 [label="any_id"]; + q47 -> q80 [label="braces"]; + q48 -> q1 [label="error"]; + q48 -> q2 [label="'('"]; + q48 -> q3 [label="'*'"]; + q48 -> q4 [label="'&'"]; + q48 -> q5 [label="T_IDENTIFIER"]; + q48 -> q6 [label="T_TYPEDEF_NAME"]; + q48 -> q7 [label="T_DEFINE_NAME"]; + q48 -> q8 [label="T_AUTO"]; + q48 -> q9 [label="T_EXTERN"]; + q48 -> q10 [label="T_REGISTER"]; + q48 -> q11 [label="T_STATIC"]; + q48 -> q12 [label="T_TYPEDEF"]; + q48 -> q13 [label="T_INLINE"]; + q48 -> q14 [label="T_EXTENSION"]; + q48 -> q15 [label="T_CHAR"]; + q48 -> q16 [label="T_DOUBLE"]; + q48 -> q17 [label="T_FLOAT"]; + q48 -> q18 [label="T_INT"]; + q48 -> q19 [label="T_VOID"]; + q48 -> q20 [label="T_LONG"]; + q48 -> q21 [label="T_SHORT"]; + q48 -> q22 [label="T_SIGNED"]; + q48 -> q23 [label="T_UNSIGNED"]; + q48 -> q24 [label="T_ENUM"]; + q48 -> q25 [label="T_STRUCT"]; + q48 -> q26 [label="T_UNION"]; + q48 -> q27 [label="T_Bool"]; + q48 -> q28 [label="T_Complex"]; + q48 -> q29 [label="T_Imaginary"]; + q48 -> q30 [label="T_TYPE_QUALIFIER"]; + q48 -> q31 [label="T_ASM"]; + q48 -> q32 [label="';'"]; + q48 -> q34 [label="decl_specifiers"]; + q48 -> q35 [label="decl_specifier"]; + q48 -> q36 [label="storage_class"]; + q48 -> q37 [label="type_specifier"]; + q48 -> q38 [label="type_qualifier"]; + q48 -> q39 [label="struct_or_union_specifier"]; + q48 -> q40 [label="enum_specifier"]; + q48 -> q41 [label="declarator"]; + q48 -> q42 [label="direct_declarator"]; + q48 -> q43 [label="struct_or_union"]; + q48 -> q44 [label="pointer"]; + q48 -> q45 [label="any_id"]; + q48 -> q46 [label="identifier_or_ref"]; + q48 -> q47 [label="enumeration"]; + q48 -> q81 [label="external_declaration"]; + q48 -> q50 [label="declaration"]; + q48 -> q51 [label="function_definition"]; + q48 -> q52 [label="linkage_specification"]; + q48 -> q53 [label="any_typedef"]; + q53 -> q82 [label="T_TYPEDEF_NAME"]; + q53 -> q7 [label="T_DEFINE_NAME"]; + q53 -> q8 [label="T_AUTO"]; + q53 -> q65 [label="T_EXTERN"]; + q53 -> q10 [label="T_REGISTER"]; + q53 -> q11 [label="T_STATIC"]; + q53 -> q13 [label="T_INLINE"]; + q53 -> q66 [label="T_EXTENSION"]; + q53 -> q15 [label="T_CHAR"]; + q53 -> q16 [label="T_DOUBLE"]; + q53 -> q17 [label="T_FLOAT"]; + q53 -> q18 [label="T_INT"]; + q53 -> q19 [label="T_VOID"]; + q53 -> q20 [label="T_LONG"]; + q53 -> q21 [label="T_SHORT"]; + q53 -> q22 [label="T_SIGNED"]; + q53 -> q23 [label="T_UNSIGNED"]; + q53 -> q24 [label="T_ENUM"]; + q53 -> q25 [label="T_STRUCT"]; + q53 -> q26 [label="T_UNION"]; + q53 -> q27 [label="T_Bool"]; + q53 -> q28 [label="T_Complex"]; + q53 -> q29 [label="T_Imaginary"]; + q53 -> q30 [label="T_TYPE_QUALIFIER"]; + q53 -> q83 [label="decl_specifiers"]; + q53 -> q35 [label="decl_specifier"]; + q53 -> q36 [label="storage_class"]; + q53 -> q37 [label="type_specifier"]; + q53 -> q38 [label="type_qualifier"]; + q53 -> q39 [label="struct_or_union_specifier"]; + q53 -> q40 [label="enum_specifier"]; + q53 -> q43 [label="struct_or_union"]; + q53 -> q47 [label="enumeration"]; + q57 -> q84 [label="')'"]; + q59 -> q3 [label="'*'"]; + q59 -> q85 [label="pointer"]; + q60 -> q7 [label="T_DEFINE_NAME"]; + q60 -> q30 [label="T_TYPE_QUALIFIER"]; + q60 -> q86 [label="type_qualifier"]; + q62 -> q82 [label="T_TYPEDEF_NAME"]; + q62 -> q7 [label="T_DEFINE_NAME"]; + q62 -> q8 [label="T_AUTO"]; + q62 -> q65 [label="T_EXTERN"]; + q62 -> q10 [label="T_REGISTER"]; + q62 -> q11 [label="T_STATIC"]; + q62 -> q12 [label="T_TYPEDEF"]; + q62 -> q13 [label="T_INLINE"]; + q62 -> q14 [label="T_EXTENSION"]; + q62 -> q15 [label="T_CHAR"]; + q62 -> q16 [label="T_DOUBLE"]; + q62 -> q17 [label="T_FLOAT"]; + q62 -> q18 [label="T_INT"]; + q62 -> q19 [label="T_VOID"]; + q62 -> q20 [label="T_LONG"]; + q62 -> q21 [label="T_SHORT"]; + q62 -> q22 [label="T_SIGNED"]; + q62 -> q23 [label="T_UNSIGNED"]; + q62 -> q24 [label="T_ENUM"]; + q62 -> q25 [label="T_STRUCT"]; + q62 -> q26 [label="T_UNION"]; + q62 -> q27 [label="T_Bool"]; + q62 -> q28 [label="T_Complex"]; + q62 -> q29 [label="T_Imaginary"]; + q62 -> q30 [label="T_TYPE_QUALIFIER"]; + q62 -> q75 [label="T_LBRACE"]; + q62 -> q87 [label="decl_specifiers"]; + q62 -> q35 [label="decl_specifier"]; + q62 -> q36 [label="storage_class"]; + q62 -> q37 [label="type_specifier"]; + q62 -> q38 [label="type_qualifier"]; + q62 -> q39 [label="struct_or_union_specifier"]; + q62 -> q40 [label="enum_specifier"]; + q62 -> q43 [label="struct_or_union"]; + q62 -> q47 [label="enumeration"]; + q62 -> q88 [label="declaration"]; + q62 -> q89 [label="braces"]; + q62 -> q53 [label="any_typedef"]; + q64 -> q90 [label="';'"]; + q69 -> q91 [label="';'"]; + q69 -> q92 [label="','"]; + q71 -> q93 [label="'='"]; + q71 -> q94 [label="$$2"]; + q72 -> q82 [label="T_TYPEDEF_NAME"]; + q72 -> q7 [label="T_DEFINE_NAME"]; + q72 -> q8 [label="T_AUTO"]; + q72 -> q65 [label="T_EXTERN"]; + q72 -> q10 [label="T_REGISTER"]; + q72 -> q11 [label="T_STATIC"]; + q72 -> q12 [label="T_TYPEDEF"]; + q72 -> q13 [label="T_INLINE"]; + q72 -> q14 [label="T_EXTENSION"]; + q72 -> q15 [label="T_CHAR"]; + q72 -> q16 [label="T_DOUBLE"]; + q72 -> q17 [label="T_FLOAT"]; + q72 -> q18 [label="T_INT"]; + q72 -> q19 [label="T_VOID"]; + q72 -> q20 [label="T_LONG"]; + q72 -> q21 [label="T_SHORT"]; + q72 -> q22 [label="T_SIGNED"]; + q72 -> q23 [label="T_UNSIGNED"]; + q72 -> q24 [label="T_ENUM"]; + q72 -> q25 [label="T_STRUCT"]; + q72 -> q26 [label="T_UNION"]; + q72 -> q27 [label="T_Bool"]; + q72 -> q28 [label="T_Complex"]; + q72 -> q29 [label="T_Imaginary"]; + q72 -> q30 [label="T_TYPE_QUALIFIER"]; + q72 -> q95 [label="T_VA_DCL"]; + q72 -> q87 [label="decl_specifiers"]; + q72 -> q35 [label="decl_specifier"]; + q72 -> q36 [label="storage_class"]; + q72 -> q37 [label="type_specifier"]; + q72 -> q38 [label="type_qualifier"]; + q72 -> q39 [label="struct_or_union_specifier"]; + q72 -> q40 [label="enum_specifier"]; + q72 -> q43 [label="struct_or_union"]; + q72 -> q47 [label="enumeration"]; + q72 -> q96 [label="declaration"]; + q72 -> q53 [label="any_typedef"]; + q72 -> q97 [label="opt_declaration_list"]; + q72 -> q98 [label="declaration_list"]; + q73 -> q5 [label="T_IDENTIFIER"]; + q73 -> q6 [label="T_TYPEDEF_NAME"]; + q73 -> q7 [label="T_DEFINE_NAME"]; + q73 -> q8 [label="T_AUTO"]; + q73 -> q65 [label="T_EXTERN"]; + q73 -> q10 [label="T_REGISTER"]; + q73 -> q11 [label="T_STATIC"]; + q73 -> q13 [label="T_INLINE"]; + q73 -> q66 [label="T_EXTENSION"]; + q73 -> q15 [label="T_CHAR"]; + q73 -> q16 [label="T_DOUBLE"]; + q73 -> q17 [label="T_FLOAT"]; + q73 -> q18 [label="T_INT"]; + q73 -> q19 [label="T_VOID"]; + q73 -> q20 [label="T_LONG"]; + q73 -> q21 [label="T_SHORT"]; + q73 -> q22 [label="T_SIGNED"]; + q73 -> q23 [label="T_UNSIGNED"]; + q73 -> q24 [label="T_ENUM"]; + q73 -> q25 [label="T_STRUCT"]; + q73 -> q26 [label="T_UNION"]; + q73 -> q27 [label="T_Bool"]; + q73 -> q28 [label="T_Complex"]; + q73 -> q29 [label="T_Imaginary"]; + q73 -> q30 [label="T_TYPE_QUALIFIER"]; + q73 -> q99 [label="decl_specifiers"]; + q73 -> q35 [label="decl_specifier"]; + q73 -> q36 [label="storage_class"]; + q73 -> q37 [label="type_specifier"]; + q73 -> q38 [label="type_qualifier"]; + q73 -> q39 [label="struct_or_union_specifier"]; + q73 -> q40 [label="enum_specifier"]; + q73 -> q100 [label="parameter_type_list"]; + q73 -> q101 [label="parameter_list"]; + q73 -> q102 [label="parameter_declaration"]; + q73 -> q103 [label="opt_identifier_list"]; + q73 -> q104 [label="identifier_list"]; + q73 -> q43 [label="struct_or_union"]; + q73 -> q105 [label="any_id"]; + q73 -> q47 [label="enumeration"]; + q75 -> q106 [label="T_MATCHRBRACE"]; + q76 -> q75 [label="T_LBRACE"]; + q76 -> q107 [label="braces"]; + q78 -> q73 [label="'('"]; + q78 -> q74 [label="T_BRACKETS"]; + q79 -> q75 [label="T_LBRACE"]; + q79 -> q108 [label="braces"]; + q83 -> q82 [label="T_TYPEDEF_NAME"]; + q83 -> q7 [label="T_DEFINE_NAME"]; + q83 -> q8 [label="T_AUTO"]; + q83 -> q65 [label="T_EXTERN"]; + q83 -> q10 [label="T_REGISTER"]; + q83 -> q11 [label="T_STATIC"]; + q83 -> q13 [label="T_INLINE"]; + q83 -> q66 [label="T_EXTENSION"]; + q83 -> q15 [label="T_CHAR"]; + q83 -> q16 [label="T_DOUBLE"]; + q83 -> q17 [label="T_FLOAT"]; + q83 -> q18 [label="T_INT"]; + q83 -> q19 [label="T_VOID"]; + q83 -> q20 [label="T_LONG"]; + q83 -> q21 [label="T_SHORT"]; + q83 -> q22 [label="T_SIGNED"]; + q83 -> q23 [label="T_UNSIGNED"]; + q83 -> q24 [label="T_ENUM"]; + q83 -> q25 [label="T_STRUCT"]; + q83 -> q26 [label="T_UNION"]; + q83 -> q27 [label="T_Bool"]; + q83 -> q28 [label="T_Complex"]; + q83 -> q29 [label="T_Imaginary"]; + q83 -> q30 [label="T_TYPE_QUALIFIER"]; + q83 -> q68 [label="decl_specifier"]; + q83 -> q36 [label="storage_class"]; + q83 -> q37 [label="type_specifier"]; + q83 -> q38 [label="type_qualifier"]; + q83 -> q39 [label="struct_or_union_specifier"]; + q83 -> q40 [label="enum_specifier"]; + q83 -> q43 [label="struct_or_union"]; + q83 -> q47 [label="enumeration"]; + q83 -> q109 [label="$$1"]; + q87 -> q2 [label="'('"]; + q87 -> q3 [label="'*'"]; + q87 -> q4 [label="'&'"]; + q87 -> q5 [label="T_IDENTIFIER"]; + q87 -> q6 [label="T_TYPEDEF_NAME"]; + q87 -> q7 [label="T_DEFINE_NAME"]; + q87 -> q8 [label="T_AUTO"]; + q87 -> q65 [label="T_EXTERN"]; + q87 -> q10 [label="T_REGISTER"]; + q87 -> q11 [label="T_STATIC"]; + q87 -> q13 [label="T_INLINE"]; + q87 -> q66 [label="T_EXTENSION"]; + q87 -> q15 [label="T_CHAR"]; + q87 -> q16 [label="T_DOUBLE"]; + q87 -> q17 [label="T_FLOAT"]; + q87 -> q18 [label="T_INT"]; + q87 -> q19 [label="T_VOID"]; + q87 -> q20 [label="T_LONG"]; + q87 -> q21 [label="T_SHORT"]; + q87 -> q22 [label="T_SIGNED"]; + q87 -> q23 [label="T_UNSIGNED"]; + q87 -> q24 [label="T_ENUM"]; + q87 -> q25 [label="T_STRUCT"]; + q87 -> q26 [label="T_UNION"]; + q87 -> q27 [label="T_Bool"]; + q87 -> q28 [label="T_Complex"]; + q87 -> q29 [label="T_Imaginary"]; + q87 -> q30 [label="T_TYPE_QUALIFIER"]; + q87 -> q67 [label="';'"]; + q87 -> q68 [label="decl_specifier"]; + q87 -> q36 [label="storage_class"]; + q87 -> q37 [label="type_specifier"]; + q87 -> q38 [label="type_qualifier"]; + q87 -> q39 [label="struct_or_union_specifier"]; + q87 -> q40 [label="enum_specifier"]; + q87 -> q69 [label="init_declarator_list"]; + q87 -> q70 [label="init_declarator"]; + q87 -> q110 [label="declarator"]; + q87 -> q42 [label="direct_declarator"]; + q87 -> q43 [label="struct_or_union"]; + q87 -> q44 [label="pointer"]; + q87 -> q45 [label="any_id"]; + q87 -> q46 [label="identifier_or_ref"]; + q87 -> q47 [label="enumeration"]; + q92 -> q2 [label="'('"]; + q92 -> q3 [label="'*'"]; + q92 -> q4 [label="'&'"]; + q92 -> q5 [label="T_IDENTIFIER"]; + q92 -> q56 [label="T_TYPEDEF_NAME"]; + q92 -> q111 [label="init_declarator"]; + q92 -> q110 [label="declarator"]; + q92 -> q42 [label="direct_declarator"]; + q92 -> q44 [label="pointer"]; + q92 -> q45 [label="any_id"]; + q92 -> q46 [label="identifier_or_ref"]; + q93 -> q112 [label="$$5"]; + q94 -> q82 [label="T_TYPEDEF_NAME"]; + q94 -> q7 [label="T_DEFINE_NAME"]; + q94 -> q8 [label="T_AUTO"]; + q94 -> q65 [label="T_EXTERN"]; + q94 -> q10 [label="T_REGISTER"]; + q94 -> q11 [label="T_STATIC"]; + q94 -> q12 [label="T_TYPEDEF"]; + q94 -> q13 [label="T_INLINE"]; + q94 -> q14 [label="T_EXTENSION"]; + q94 -> q15 [label="T_CHAR"]; + q94 -> q16 [label="T_DOUBLE"]; + q94 -> q17 [label="T_FLOAT"]; + q94 -> q18 [label="T_INT"]; + q94 -> q19 [label="T_VOID"]; + q94 -> q20 [label="T_LONG"]; + q94 -> q21 [label="T_SHORT"]; + q94 -> q22 [label="T_SIGNED"]; + q94 -> q23 [label="T_UNSIGNED"]; + q94 -> q24 [label="T_ENUM"]; + q94 -> q25 [label="T_STRUCT"]; + q94 -> q26 [label="T_UNION"]; + q94 -> q27 [label="T_Bool"]; + q94 -> q28 [label="T_Complex"]; + q94 -> q29 [label="T_Imaginary"]; + q94 -> q30 [label="T_TYPE_QUALIFIER"]; + q94 -> q95 [label="T_VA_DCL"]; + q94 -> q87 [label="decl_specifiers"]; + q94 -> q35 [label="decl_specifier"]; + q94 -> q36 [label="storage_class"]; + q94 -> q37 [label="type_specifier"]; + q94 -> q38 [label="type_qualifier"]; + q94 -> q39 [label="struct_or_union_specifier"]; + q94 -> q40 [label="enum_specifier"]; + q94 -> q43 [label="struct_or_union"]; + q94 -> q47 [label="enumeration"]; + q94 -> q96 [label="declaration"]; + q94 -> q53 [label="any_typedef"]; + q94 -> q113 [label="opt_declaration_list"]; + q94 -> q98 [label="declaration_list"]; + q97 -> q114 [label="T_LBRACE"]; + q98 -> q82 [label="T_TYPEDEF_NAME"]; + q98 -> q7 [label="T_DEFINE_NAME"]; + q98 -> q8 [label="T_AUTO"]; + q98 -> q65 [label="T_EXTERN"]; + q98 -> q10 [label="T_REGISTER"]; + q98 -> q11 [label="T_STATIC"]; + q98 -> q12 [label="T_TYPEDEF"]; + q98 -> q13 [label="T_INLINE"]; + q98 -> q14 [label="T_EXTENSION"]; + q98 -> q15 [label="T_CHAR"]; + q98 -> q16 [label="T_DOUBLE"]; + q98 -> q17 [label="T_FLOAT"]; + q98 -> q18 [label="T_INT"]; + q98 -> q19 [label="T_VOID"]; + q98 -> q20 [label="T_LONG"]; + q98 -> q21 [label="T_SHORT"]; + q98 -> q22 [label="T_SIGNED"]; + q98 -> q23 [label="T_UNSIGNED"]; + q98 -> q24 [label="T_ENUM"]; + q98 -> q25 [label="T_STRUCT"]; + q98 -> q26 [label="T_UNION"]; + q98 -> q27 [label="T_Bool"]; + q98 -> q28 [label="T_Complex"]; + q98 -> q29 [label="T_Imaginary"]; + q98 -> q30 [label="T_TYPE_QUALIFIER"]; + q98 -> q87 [label="decl_specifiers"]; + q98 -> q35 [label="decl_specifier"]; + q98 -> q36 [label="storage_class"]; + q98 -> q37 [label="type_specifier"]; + q98 -> q38 [label="type_qualifier"]; + q98 -> q39 [label="struct_or_union_specifier"]; + q98 -> q40 [label="enum_specifier"]; + q98 -> q43 [label="struct_or_union"]; + q98 -> q47 [label="enumeration"]; + q98 -> q115 [label="declaration"]; + q98 -> q53 [label="any_typedef"]; + q99 -> q116 [label="'('"]; + q99 -> q3 [label="'*'"]; + q99 -> q4 [label="'&'"]; + q99 -> q5 [label="T_IDENTIFIER"]; + q99 -> q6 [label="T_TYPEDEF_NAME"]; + q99 -> q7 [label="T_DEFINE_NAME"]; + q99 -> q8 [label="T_AUTO"]; + q99 -> q65 [label="T_EXTERN"]; + q99 -> q10 [label="T_REGISTER"]; + q99 -> q11 [label="T_STATIC"]; + q99 -> q13 [label="T_INLINE"]; + q99 -> q66 [label="T_EXTENSION"]; + q99 -> q15 [label="T_CHAR"]; + q99 -> q16 [label="T_DOUBLE"]; + q99 -> q17 [label="T_FLOAT"]; + q99 -> q18 [label="T_INT"]; + q99 -> q19 [label="T_VOID"]; + q99 -> q20 [label="T_LONG"]; + q99 -> q21 [label="T_SHORT"]; + q99 -> q22 [label="T_SIGNED"]; + q99 -> q23 [label="T_UNSIGNED"]; + q99 -> q24 [label="T_ENUM"]; + q99 -> q25 [label="T_STRUCT"]; + q99 -> q26 [label="T_UNION"]; + q99 -> q27 [label="T_Bool"]; + q99 -> q28 [label="T_Complex"]; + q99 -> q29 [label="T_Imaginary"]; + q99 -> q30 [label="T_TYPE_QUALIFIER"]; + q99 -> q117 [label="T_BRACKETS"]; + q99 -> q68 [label="decl_specifier"]; + q99 -> q36 [label="storage_class"]; + q99 -> q37 [label="type_specifier"]; + q99 -> q38 [label="type_qualifier"]; + q99 -> q39 [label="struct_or_union_specifier"]; + q99 -> q40 [label="enum_specifier"]; + q99 -> q118 [label="declarator"]; + q99 -> q42 [label="direct_declarator"]; + q99 -> q119 [label="abs_declarator"]; + q99 -> q120 [label="direct_abs_declarator"]; + q99 -> q43 [label="struct_or_union"]; + q99 -> q121 [label="pointer"]; + q99 -> q45 [label="any_id"]; + q99 -> q46 [label="identifier_or_ref"]; + q99 -> q47 [label="enumeration"]; + q100 -> q122 [label="')'"]; + q101 -> q123 [label="','"]; + q103 -> q124 [label="')'"]; + q104 -> q125 [label="','"]; + q109 -> q2 [label="'('"]; + q109 -> q3 [label="'*'"]; + q109 -> q4 [label="'&'"]; + q109 -> q5 [label="T_IDENTIFIER"]; + q109 -> q56 [label="T_TYPEDEF_NAME"]; + q109 -> q126 [label="declarator"]; + q109 -> q42 [label="direct_declarator"]; + q109 -> q44 [label="pointer"]; + q109 -> q45 [label="any_id"]; + q109 -> q46 [label="identifier_or_ref"]; + q109 -> q127 [label="opt_declarator_list"]; + q109 -> q128 [label="declarator_list"]; + q110 -> q93 [label="'='"]; + q112 -> q129 [label="T_INITIALIZER"]; + q113 -> q130 [label="T_LBRACE"]; + q114 -> q131 [label="T_MATCHRBRACE"]; + q116 -> q116 [label="'('"]; + q116 -> q3 [label="'*'"]; + q116 -> q4 [label="'&'"]; + q116 -> q5 [label="T_IDENTIFIER"]; + q116 -> q6 [label="T_TYPEDEF_NAME"]; + q116 -> q7 [label="T_DEFINE_NAME"]; + q116 -> q8 [label="T_AUTO"]; + q116 -> q65 [label="T_EXTERN"]; + q116 -> q10 [label="T_REGISTER"]; + q116 -> q11 [label="T_STATIC"]; + q116 -> q13 [label="T_INLINE"]; + q116 -> q66 [label="T_EXTENSION"]; + q116 -> q15 [label="T_CHAR"]; + q116 -> q16 [label="T_DOUBLE"]; + q116 -> q17 [label="T_FLOAT"]; + q116 -> q18 [label="T_INT"]; + q116 -> q19 [label="T_VOID"]; + q116 -> q20 [label="T_LONG"]; + q116 -> q21 [label="T_SHORT"]; + q116 -> q22 [label="T_SIGNED"]; + q116 -> q23 [label="T_UNSIGNED"]; + q116 -> q24 [label="T_ENUM"]; + q116 -> q25 [label="T_STRUCT"]; + q116 -> q26 [label="T_UNION"]; + q116 -> q27 [label="T_Bool"]; + q116 -> q28 [label="T_Complex"]; + q116 -> q29 [label="T_Imaginary"]; + q116 -> q30 [label="T_TYPE_QUALIFIER"]; + q116 -> q117 [label="T_BRACKETS"]; + q116 -> q132 [label="')'"]; + q116 -> q99 [label="decl_specifiers"]; + q116 -> q35 [label="decl_specifier"]; + q116 -> q36 [label="storage_class"]; + q116 -> q37 [label="type_specifier"]; + q116 -> q38 [label="type_qualifier"]; + q116 -> q39 [label="struct_or_union_specifier"]; + q116 -> q40 [label="enum_specifier"]; + q116 -> q57 [label="declarator"]; + q116 -> q42 [label="direct_declarator"]; + q116 -> q133 [label="abs_declarator"]; + q116 -> q120 [label="direct_abs_declarator"]; + q116 -> q134 [label="parameter_type_list"]; + q116 -> q101 [label="parameter_list"]; + q116 -> q102 [label="parameter_declaration"]; + q116 -> q43 [label="struct_or_union"]; + q116 -> q121 [label="pointer"]; + q116 -> q45 [label="any_id"]; + q116 -> q46 [label="identifier_or_ref"]; + q116 -> q47 [label="enumeration"]; + q120 -> q135 [label="'('"]; + q120 -> q136 [label="T_BRACKETS"]; + q121 -> q116 [label="'('"]; + q121 -> q4 [label="'&'"]; + q121 -> q5 [label="T_IDENTIFIER"]; + q121 -> q56 [label="T_TYPEDEF_NAME"]; + q121 -> q117 [label="T_BRACKETS"]; + q121 -> q78 [label="direct_declarator"]; + q121 -> q137 [label="direct_abs_declarator"]; + q121 -> q45 [label="any_id"]; + q121 -> q46 [label="identifier_or_ref"]; + q123 -> q82 [label="T_TYPEDEF_NAME"]; + q123 -> q7 [label="T_DEFINE_NAME"]; + q123 -> q8 [label="T_AUTO"]; + q123 -> q65 [label="T_EXTERN"]; + q123 -> q10 [label="T_REGISTER"]; + q123 -> q11 [label="T_STATIC"]; + q123 -> q13 [label="T_INLINE"]; + q123 -> q66 [label="T_EXTENSION"]; + q123 -> q15 [label="T_CHAR"]; + q123 -> q16 [label="T_DOUBLE"]; + q123 -> q17 [label="T_FLOAT"]; + q123 -> q18 [label="T_INT"]; + q123 -> q19 [label="T_VOID"]; + q123 -> q20 [label="T_LONG"]; + q123 -> q21 [label="T_SHORT"]; + q123 -> q22 [label="T_SIGNED"]; + q123 -> q23 [label="T_UNSIGNED"]; + q123 -> q24 [label="T_ENUM"]; + q123 -> q25 [label="T_STRUCT"]; + q123 -> q26 [label="T_UNION"]; + q123 -> q27 [label="T_Bool"]; + q123 -> q28 [label="T_Complex"]; + q123 -> q29 [label="T_Imaginary"]; + q123 -> q30 [label="T_TYPE_QUALIFIER"]; + q123 -> q138 [label="T_ELLIPSIS"]; + q123 -> q99 [label="decl_specifiers"]; + q123 -> q35 [label="decl_specifier"]; + q123 -> q36 [label="storage_class"]; + q123 -> q37 [label="type_specifier"]; + q123 -> q38 [label="type_qualifier"]; + q123 -> q39 [label="struct_or_union_specifier"]; + q123 -> q40 [label="enum_specifier"]; + q123 -> q139 [label="parameter_declaration"]; + q123 -> q43 [label="struct_or_union"]; + q123 -> q47 [label="enumeration"]; + q125 -> q5 [label="T_IDENTIFIER"]; + q125 -> q56 [label="T_TYPEDEF_NAME"]; + q125 -> q140 [label="any_id"]; + q127 -> q141 [label="';'"]; + q128 -> q142 [label="','"]; + q130 -> q143 [label="$$3"]; + q133 -> q144 [label="')'"]; + q134 -> q145 [label="')'"]; + q135 -> q82 [label="T_TYPEDEF_NAME"]; + q135 -> q7 [label="T_DEFINE_NAME"]; + q135 -> q8 [label="T_AUTO"]; + q135 -> q65 [label="T_EXTERN"]; + q135 -> q10 [label="T_REGISTER"]; + q135 -> q11 [label="T_STATIC"]; + q135 -> q13 [label="T_INLINE"]; + q135 -> q66 [label="T_EXTENSION"]; + q135 -> q15 [label="T_CHAR"]; + q135 -> q16 [label="T_DOUBLE"]; + q135 -> q17 [label="T_FLOAT"]; + q135 -> q18 [label="T_INT"]; + q135 -> q19 [label="T_VOID"]; + q135 -> q20 [label="T_LONG"]; + q135 -> q21 [label="T_SHORT"]; + q135 -> q22 [label="T_SIGNED"]; + q135 -> q23 [label="T_UNSIGNED"]; + q135 -> q24 [label="T_ENUM"]; + q135 -> q25 [label="T_STRUCT"]; + q135 -> q26 [label="T_UNION"]; + q135 -> q27 [label="T_Bool"]; + q135 -> q28 [label="T_Complex"]; + q135 -> q29 [label="T_Imaginary"]; + q135 -> q30 [label="T_TYPE_QUALIFIER"]; + q135 -> q146 [label="')'"]; + q135 -> q99 [label="decl_specifiers"]; + q135 -> q35 [label="decl_specifier"]; + q135 -> q36 [label="storage_class"]; + q135 -> q37 [label="type_specifier"]; + q135 -> q38 [label="type_qualifier"]; + q135 -> q39 [label="struct_or_union_specifier"]; + q135 -> q40 [label="enum_specifier"]; + q135 -> q147 [label="parameter_type_list"]; + q135 -> q101 [label="parameter_list"]; + q135 -> q102 [label="parameter_declaration"]; + q135 -> q43 [label="struct_or_union"]; + q135 -> q47 [label="enumeration"]; + q137 -> q135 [label="'('"]; + q137 -> q136 [label="T_BRACKETS"]; + q142 -> q2 [label="'('"]; + q142 -> q3 [label="'*'"]; + q142 -> q4 [label="'&'"]; + q142 -> q5 [label="T_IDENTIFIER"]; + q142 -> q56 [label="T_TYPEDEF_NAME"]; + q142 -> q148 [label="declarator"]; + q142 -> q42 [label="direct_declarator"]; + q142 -> q44 [label="pointer"]; + q142 -> q45 [label="any_id"]; + q142 -> q46 [label="identifier_or_ref"]; + q143 -> q149 [label="T_MATCHRBRACE"]; + q147 -> q150 [label="')'"]; +} diff --git a/contrib/byacc/test/yacc/grammar.error b/contrib/byacc/test/yacc/grammar.error new file mode 100644 index 000000000000..d442f8abaeb5 --- /dev/null +++ b/contrib/byacc/test/yacc/grammar.error @@ -0,0 +1 @@ +YACC: 1 shift/reduce conflict, 29 reduce/reduce conflicts. diff --git a/contrib/byacc/test/yacc/grammar.output b/contrib/byacc/test/yacc/grammar.output new file mode 100644 index 000000000000..6351322345b5 --- /dev/null +++ b/contrib/byacc/test/yacc/grammar.output @@ -0,0 +1,2214 @@ + 0 $accept : program $end + + 1 program : + 2 | translation_unit + + 3 translation_unit : external_declaration + 4 | translation_unit external_declaration + + 5 external_declaration : declaration + 6 | function_definition + 7 | ';' + 8 | linkage_specification + 9 | T_ASM T_ASMARG ';' + 10 | error T_MATCHRBRACE + 11 | error ';' + + 12 braces : T_LBRACE T_MATCHRBRACE + + 13 linkage_specification : T_EXTERN T_STRING_LITERAL braces + 14 | T_EXTERN T_STRING_LITERAL declaration + + 15 declaration : decl_specifiers ';' + 16 | decl_specifiers init_declarator_list ';' + + 17 $$1 : + + 18 declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';' + + 19 any_typedef : T_EXTENSION T_TYPEDEF + 20 | T_TYPEDEF + + 21 opt_declarator_list : + 22 | declarator_list + + 23 declarator_list : declarator + 24 | declarator_list ',' declarator + + 25 $$2 : + + 26 $$3 : + + 27 function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE + + 28 $$4 : + + 29 function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE + + 30 opt_declaration_list : + 31 | T_VA_DCL + 32 | declaration_list + + 33 declaration_list : declaration + 34 | declaration_list declaration + + 35 decl_specifiers : decl_specifier + 36 | decl_specifiers decl_specifier + + 37 decl_specifier : storage_class + 38 | type_specifier + 39 | type_qualifier + + 40 storage_class : T_AUTO + 41 | T_EXTERN + 42 | T_REGISTER + 43 | T_STATIC + 44 | T_INLINE + 45 | T_EXTENSION + + 46 type_specifier : T_CHAR + 47 | T_DOUBLE + 48 | T_FLOAT + 49 | T_INT + 50 | T_LONG + 51 | T_SHORT + 52 | T_SIGNED + 53 | T_UNSIGNED + 54 | T_VOID + 55 | T_Bool + 56 | T_Complex + 57 | T_Imaginary + 58 | T_TYPEDEF_NAME + 59 | struct_or_union_specifier + 60 | enum_specifier + + 61 type_qualifier : T_TYPE_QUALIFIER + 62 | T_DEFINE_NAME + + 63 struct_or_union_specifier : struct_or_union any_id braces + 64 | struct_or_union braces + 65 | struct_or_union any_id + + 66 struct_or_union : T_STRUCT + 67 | T_UNION + + 68 init_declarator_list : init_declarator + 69 | init_declarator_list ',' init_declarator + + 70 init_declarator : declarator + + 71 $$5 : + + 72 init_declarator : declarator '=' $$5 T_INITIALIZER + + 73 enum_specifier : enumeration any_id braces + 74 | enumeration braces + 75 | enumeration any_id + + 76 enumeration : T_ENUM + + 77 any_id : T_IDENTIFIER + 78 | T_TYPEDEF_NAME + + 79 declarator : pointer direct_declarator + 80 | direct_declarator + + 81 direct_declarator : identifier_or_ref + 82 | '(' declarator ')' + 83 | direct_declarator T_BRACKETS + 84 | direct_declarator '(' parameter_type_list ')' + 85 | direct_declarator '(' opt_identifier_list ')' + + 86 pointer : '*' opt_type_qualifiers + 87 | '*' opt_type_qualifiers pointer + + 88 opt_type_qualifiers : + 89 | type_qualifier_list + + 90 type_qualifier_list : type_qualifier + 91 | type_qualifier_list type_qualifier + + 92 parameter_type_list : parameter_list + 93 | parameter_list ',' T_ELLIPSIS + + 94 parameter_list : parameter_declaration + 95 | parameter_list ',' parameter_declaration + + 96 parameter_declaration : decl_specifiers declarator + 97 | decl_specifiers abs_declarator + 98 | decl_specifiers + + 99 opt_identifier_list : + 100 | identifier_list + + 101 identifier_list : any_id + 102 | identifier_list ',' any_id + + 103 identifier_or_ref : any_id + 104 | '&' any_id + + 105 abs_declarator : pointer + 106 | pointer direct_abs_declarator + 107 | direct_abs_declarator + + 108 direct_abs_declarator : '(' abs_declarator ')' + 109 | direct_abs_declarator T_BRACKETS + 110 | T_BRACKETS + 111 | direct_abs_declarator '(' parameter_type_list ')' + 112 | direct_abs_declarator '(' ')' + 113 | '(' parameter_type_list ')' + 114 | '(' ')' + +state 0 + $accept : . program $end (0) + program : . (1) + + error shift 1 + '(' shift 2 + '*' shift 3 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 6 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 9 + T_REGISTER shift 10 + T_STATIC shift 11 + T_TYPEDEF shift 12 + T_INLINE shift 13 + T_EXTENSION shift 14 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + T_ASM shift 31 + ';' shift 32 + $end reduce 1 + + program goto 33 + decl_specifiers goto 34 + decl_specifier goto 35 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + declarator goto 41 + direct_declarator goto 42 + struct_or_union goto 43 + pointer goto 44 + any_id goto 45 + identifier_or_ref goto 46 + enumeration goto 47 + translation_unit goto 48 + external_declaration goto 49 + declaration goto 50 + function_definition goto 51 + linkage_specification goto 52 + any_typedef goto 53 + + +state 1 + external_declaration : error . T_MATCHRBRACE (10) + external_declaration : error . ';' (11) + + T_MATCHRBRACE shift 54 + ';' shift 55 + . error + + +state 2 + direct_declarator : '(' . declarator ')' (82) + + '(' shift 2 + '*' shift 3 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 56 + . error + + declarator goto 57 + direct_declarator goto 42 + pointer goto 44 + any_id goto 45 + identifier_or_ref goto 46 + + +state 3 + pointer : '*' . opt_type_qualifiers (86) + pointer : '*' . opt_type_qualifiers pointer (87) + opt_type_qualifiers : . (88) + + T_DEFINE_NAME shift 7 + T_TYPE_QUALIFIER shift 30 + '(' reduce 88 + '*' reduce 88 + '&' reduce 88 + T_IDENTIFIER reduce 88 + T_TYPEDEF_NAME reduce 88 + T_BRACKETS reduce 88 + ',' reduce 88 + ')' reduce 88 + + type_qualifier goto 58 + opt_type_qualifiers goto 59 + type_qualifier_list goto 60 + + +state 4 + identifier_or_ref : '&' . any_id (104) + + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 56 + . error + + any_id goto 61 + + +state 5 + any_id : T_IDENTIFIER . (77) + + . reduce 77 + + +6: reduce/reduce conflict (reduce 58, reduce 78) on '(' +6: reduce/reduce conflict (reduce 58, reduce 78) on T_TYPEDEF_NAME +6: reduce/reduce conflict (reduce 58, reduce 78) on T_DEFINE_NAME +6: reduce/reduce conflict (reduce 58, reduce 78) on T_AUTO +6: reduce/reduce conflict (reduce 58, reduce 78) on T_EXTERN +6: reduce/reduce conflict (reduce 58, reduce 78) on T_REGISTER +6: reduce/reduce conflict (reduce 58, reduce 78) on T_STATIC +6: reduce/reduce conflict (reduce 58, reduce 78) on T_INLINE +6: reduce/reduce conflict (reduce 58, reduce 78) on T_EXTENSION +6: reduce/reduce conflict (reduce 58, reduce 78) on T_CHAR +6: reduce/reduce conflict (reduce 58, reduce 78) on T_DOUBLE +6: reduce/reduce conflict (reduce 58, reduce 78) on T_FLOAT +6: reduce/reduce conflict (reduce 58, reduce 78) on T_INT +6: reduce/reduce conflict (reduce 58, reduce 78) on T_VOID +6: reduce/reduce conflict (reduce 58, reduce 78) on T_LONG +6: reduce/reduce conflict (reduce 58, reduce 78) on T_SHORT +6: reduce/reduce conflict (reduce 58, reduce 78) on T_SIGNED +6: reduce/reduce conflict (reduce 58, reduce 78) on T_UNSIGNED +6: reduce/reduce conflict (reduce 58, reduce 78) on T_ENUM +6: reduce/reduce conflict (reduce 58, reduce 78) on T_STRUCT +6: reduce/reduce conflict (reduce 58, reduce 78) on T_UNION +6: reduce/reduce conflict (reduce 58, reduce 78) on T_Bool +6: reduce/reduce conflict (reduce 58, reduce 78) on T_Complex +6: reduce/reduce conflict (reduce 58, reduce 78) on T_Imaginary +6: reduce/reduce conflict (reduce 58, reduce 78) on T_TYPE_QUALIFIER +6: reduce/reduce conflict (reduce 58, reduce 78) on T_BRACKETS +6: reduce/reduce conflict (reduce 58, reduce 78) on ';' +6: reduce/reduce conflict (reduce 58, reduce 78) on ',' +6: reduce/reduce conflict (reduce 58, reduce 78) on ')' +state 6 + type_specifier : T_TYPEDEF_NAME . (58) + any_id : T_TYPEDEF_NAME . (78) + + '(' reduce 58 + '*' reduce 58 + '&' reduce 58 + T_IDENTIFIER reduce 58 + T_TYPEDEF_NAME reduce 58 + T_DEFINE_NAME reduce 58 + T_AUTO reduce 58 + T_EXTERN reduce 58 + T_REGISTER reduce 58 + T_STATIC reduce 58 + T_TYPEDEF reduce 78 + T_INLINE reduce 58 + T_EXTENSION reduce 58 + T_CHAR reduce 58 + T_DOUBLE reduce 58 + T_FLOAT reduce 58 + T_INT reduce 58 + T_VOID reduce 58 + T_LONG reduce 58 + T_SHORT reduce 58 + T_SIGNED reduce 58 + T_UNSIGNED reduce 58 + T_ENUM reduce 58 + T_STRUCT reduce 58 + T_UNION reduce 58 + T_Bool reduce 58 + T_Complex reduce 58 + T_Imaginary reduce 58 + T_TYPE_QUALIFIER reduce 58 + T_BRACKETS reduce 58 + T_LBRACE reduce 78 + T_VA_DCL reduce 78 + ';' reduce 58 + ',' reduce 58 + '=' reduce 78 + ')' reduce 58 + + +state 7 + type_qualifier : T_DEFINE_NAME . (62) + + . reduce 62 + + +state 8 + storage_class : T_AUTO . (40) + + . reduce 40 + + +state 9 + linkage_specification : T_EXTERN . T_STRING_LITERAL braces (13) + linkage_specification : T_EXTERN . T_STRING_LITERAL declaration (14) + storage_class : T_EXTERN . (41) + + T_STRING_LITERAL shift 62 + '(' reduce 41 + '*' reduce 41 + '&' reduce 41 + T_IDENTIFIER reduce 41 + T_TYPEDEF_NAME reduce 41 + T_DEFINE_NAME reduce 41 + T_AUTO reduce 41 + T_EXTERN reduce 41 + T_REGISTER reduce 41 + T_STATIC reduce 41 + T_INLINE reduce 41 + T_EXTENSION reduce 41 + T_CHAR reduce 41 + T_DOUBLE reduce 41 + T_FLOAT reduce 41 + T_INT reduce 41 + T_VOID reduce 41 + T_LONG reduce 41 + T_SHORT reduce 41 + T_SIGNED reduce 41 + T_UNSIGNED reduce 41 + T_ENUM reduce 41 + T_STRUCT reduce 41 + T_UNION reduce 41 + T_Bool reduce 41 + T_Complex reduce 41 + T_Imaginary reduce 41 + T_TYPE_QUALIFIER reduce 41 + ';' reduce 41 + + +state 10 + storage_class : T_REGISTER . (42) + + . reduce 42 + + +state 11 + storage_class : T_STATIC . (43) + + . reduce 43 + + +state 12 + any_typedef : T_TYPEDEF . (20) + + . reduce 20 + + +state 13 + storage_class : T_INLINE . (44) + + . reduce 44 + + +state 14 + any_typedef : T_EXTENSION . T_TYPEDEF (19) + storage_class : T_EXTENSION . (45) + + T_TYPEDEF shift 63 + '(' reduce 45 + '*' reduce 45 + '&' reduce 45 + T_IDENTIFIER reduce 45 + T_TYPEDEF_NAME reduce 45 + T_DEFINE_NAME reduce 45 + T_AUTO reduce 45 + T_EXTERN reduce 45 + T_REGISTER reduce 45 + T_STATIC reduce 45 + T_INLINE reduce 45 + T_EXTENSION reduce 45 + T_CHAR reduce 45 + T_DOUBLE reduce 45 + T_FLOAT reduce 45 + T_INT reduce 45 + T_VOID reduce 45 + T_LONG reduce 45 + T_SHORT reduce 45 + T_SIGNED reduce 45 + T_UNSIGNED reduce 45 + T_ENUM reduce 45 + T_STRUCT reduce 45 + T_UNION reduce 45 + T_Bool reduce 45 + T_Complex reduce 45 + T_Imaginary reduce 45 + T_TYPE_QUALIFIER reduce 45 + ';' reduce 45 + + +state 15 + type_specifier : T_CHAR . (46) + + . reduce 46 + + +state 16 + type_specifier : T_DOUBLE . (47) + + . reduce 47 + + +state 17 + type_specifier : T_FLOAT . (48) + + . reduce 48 + + +state 18 + type_specifier : T_INT . (49) + + . reduce 49 + + +state 19 + type_specifier : T_VOID . (54) + + . reduce 54 + + +state 20 + type_specifier : T_LONG . (50) + + . reduce 50 + + +state 21 + type_specifier : T_SHORT . (51) + + . reduce 51 + + +state 22 + type_specifier : T_SIGNED . (52) + + . reduce 52 + + +state 23 + type_specifier : T_UNSIGNED . (53) + + . reduce 53 + + +state 24 + enumeration : T_ENUM . (76) + + . reduce 76 + + +state 25 + struct_or_union : T_STRUCT . (66) + + . reduce 66 + + +state 26 + struct_or_union : T_UNION . (67) + + . reduce 67 + + +state 27 + type_specifier : T_Bool . (55) + + . reduce 55 + + +state 28 + type_specifier : T_Complex . (56) + + . reduce 56 + + +state 29 + type_specifier : T_Imaginary . (57) + + . reduce 57 + + +state 30 + type_qualifier : T_TYPE_QUALIFIER . (61) + + . reduce 61 + + +state 31 + external_declaration : T_ASM . T_ASMARG ';' (9) + + T_ASMARG shift 64 + . error + + +state 32 + external_declaration : ';' . (7) + + . reduce 7 + + +state 33 + $accept : program . $end (0) + + $end accept + + +state 34 + declaration : decl_specifiers . ';' (15) + declaration : decl_specifiers . init_declarator_list ';' (16) + function_definition : decl_specifiers . declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27) + decl_specifiers : decl_specifiers . decl_specifier (36) + + '(' shift 2 + '*' shift 3 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 6 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_INLINE shift 13 + T_EXTENSION shift 66 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + ';' shift 67 + . error + + decl_specifier goto 68 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + init_declarator_list goto 69 + init_declarator goto 70 + declarator goto 71 + direct_declarator goto 42 + struct_or_union goto 43 + pointer goto 44 + any_id goto 45 + identifier_or_ref goto 46 + enumeration goto 47 + + +state 35 + decl_specifiers : decl_specifier . (35) + + . reduce 35 + + +state 36 + decl_specifier : storage_class . (37) + + . reduce 37 + + +state 37 + decl_specifier : type_specifier . (38) + + . reduce 38 + + +state 38 + decl_specifier : type_qualifier . (39) + + . reduce 39 + + +state 39 + type_specifier : struct_or_union_specifier . (59) + + . reduce 59 + + +state 40 + type_specifier : enum_specifier . (60) + + . reduce 60 + + +state 41 + function_definition : declarator . $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE (29) + $$4 : . (28) + + . reduce 28 + + $$4 goto 72 + + +state 42 + declarator : direct_declarator . (80) + direct_declarator : direct_declarator . T_BRACKETS (83) + direct_declarator : direct_declarator . '(' parameter_type_list ')' (84) + direct_declarator : direct_declarator . '(' opt_identifier_list ')' (85) + + '(' shift 73 + T_BRACKETS shift 74 + T_TYPEDEF_NAME reduce 80 + T_DEFINE_NAME reduce 80 + T_AUTO reduce 80 + T_EXTERN reduce 80 + T_REGISTER reduce 80 + T_STATIC reduce 80 + T_TYPEDEF reduce 80 + T_INLINE reduce 80 + T_EXTENSION reduce 80 + T_CHAR reduce 80 + T_DOUBLE reduce 80 + T_FLOAT reduce 80 + T_INT reduce 80 + T_VOID reduce 80 + T_LONG reduce 80 + T_SHORT reduce 80 + T_SIGNED reduce 80 + T_UNSIGNED reduce 80 + T_ENUM reduce 80 + T_STRUCT reduce 80 + T_UNION reduce 80 + T_Bool reduce 80 + T_Complex reduce 80 + T_Imaginary reduce 80 + T_TYPE_QUALIFIER reduce 80 + T_LBRACE reduce 80 + T_VA_DCL reduce 80 + ';' reduce 80 + ',' reduce 80 + '=' reduce 80 + ')' reduce 80 + + +state 43 + struct_or_union_specifier : struct_or_union . any_id braces (63) + struct_or_union_specifier : struct_or_union . braces (64) + struct_or_union_specifier : struct_or_union . any_id (65) + + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 56 + T_LBRACE shift 75 + . error + + any_id goto 76 + braces goto 77 + + +state 44 + declarator : pointer . direct_declarator (79) + + '(' shift 2 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 56 + . error + + direct_declarator goto 78 + any_id goto 45 + identifier_or_ref goto 46 + + +state 45 + identifier_or_ref : any_id . (103) + + . reduce 103 + + +state 46 + direct_declarator : identifier_or_ref . (81) + + . reduce 81 + + +state 47 + enum_specifier : enumeration . any_id braces (73) + enum_specifier : enumeration . braces (74) + enum_specifier : enumeration . any_id (75) + + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 56 + T_LBRACE shift 75 + . error + + any_id goto 79 + braces goto 80 + + +state 48 + program : translation_unit . (2) + translation_unit : translation_unit . external_declaration (4) + + error shift 1 + '(' shift 2 + '*' shift 3 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 6 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 9 + T_REGISTER shift 10 + T_STATIC shift 11 + T_TYPEDEF shift 12 + T_INLINE shift 13 + T_EXTENSION shift 14 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + T_ASM shift 31 + ';' shift 32 + $end reduce 2 + + decl_specifiers goto 34 + decl_specifier goto 35 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + declarator goto 41 + direct_declarator goto 42 + struct_or_union goto 43 + pointer goto 44 + any_id goto 45 + identifier_or_ref goto 46 + enumeration goto 47 + external_declaration goto 81 + declaration goto 50 + function_definition goto 51 + linkage_specification goto 52 + any_typedef goto 53 + + +state 49 + translation_unit : external_declaration . (3) + + . reduce 3 + + +state 50 + external_declaration : declaration . (5) + + . reduce 5 + + +state 51 + external_declaration : function_definition . (6) + + . reduce 6 + + +state 52 + external_declaration : linkage_specification . (8) + + . reduce 8 + + +state 53 + declaration : any_typedef . decl_specifiers $$1 opt_declarator_list ';' (18) + + T_TYPEDEF_NAME shift 82 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_INLINE shift 13 + T_EXTENSION shift 66 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + . error + + decl_specifiers goto 83 + decl_specifier goto 35 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + struct_or_union goto 43 + enumeration goto 47 + + +state 54 + external_declaration : error T_MATCHRBRACE . (10) + + . reduce 10 + + +state 55 + external_declaration : error ';' . (11) + + . reduce 11 + + +state 56 + any_id : T_TYPEDEF_NAME . (78) + + . reduce 78 + + +state 57 + direct_declarator : '(' declarator . ')' (82) + + ')' shift 84 + . error + + +state 58 + type_qualifier_list : type_qualifier . (90) + + . reduce 90 + + +state 59 + pointer : '*' opt_type_qualifiers . (86) + pointer : '*' opt_type_qualifiers . pointer (87) + + '*' shift 3 + '(' reduce 86 + '&' reduce 86 + T_IDENTIFIER reduce 86 + T_TYPEDEF_NAME reduce 86 + T_BRACKETS reduce 86 + ',' reduce 86 + ')' reduce 86 + + pointer goto 85 + + +state 60 + opt_type_qualifiers : type_qualifier_list . (89) + type_qualifier_list : type_qualifier_list . type_qualifier (91) + + T_DEFINE_NAME shift 7 + T_TYPE_QUALIFIER shift 30 + '(' reduce 89 + '*' reduce 89 + '&' reduce 89 + T_IDENTIFIER reduce 89 + T_TYPEDEF_NAME reduce 89 + T_BRACKETS reduce 89 + ',' reduce 89 + ')' reduce 89 + + type_qualifier goto 86 + + +state 61 + identifier_or_ref : '&' any_id . (104) + + . reduce 104 + + +state 62 + linkage_specification : T_EXTERN T_STRING_LITERAL . braces (13) + linkage_specification : T_EXTERN T_STRING_LITERAL . declaration (14) + + T_TYPEDEF_NAME shift 82 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_TYPEDEF shift 12 + T_INLINE shift 13 + T_EXTENSION shift 14 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + T_LBRACE shift 75 + . error + + decl_specifiers goto 87 + decl_specifier goto 35 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + struct_or_union goto 43 + enumeration goto 47 + declaration goto 88 + braces goto 89 + any_typedef goto 53 + + +state 63 + any_typedef : T_EXTENSION T_TYPEDEF . (19) + + . reduce 19 + + +state 64 + external_declaration : T_ASM T_ASMARG . ';' (9) + + ';' shift 90 + . error + + +state 65 + storage_class : T_EXTERN . (41) + + . reduce 41 + + +state 66 + storage_class : T_EXTENSION . (45) + + . reduce 45 + + +state 67 + declaration : decl_specifiers ';' . (15) + + . reduce 15 + + +state 68 + decl_specifiers : decl_specifiers decl_specifier . (36) + + . reduce 36 + + +state 69 + declaration : decl_specifiers init_declarator_list . ';' (16) + init_declarator_list : init_declarator_list . ',' init_declarator (69) + + ';' shift 91 + ',' shift 92 + . error + + +state 70 + init_declarator_list : init_declarator . (68) + + . reduce 68 + + +state 71 + function_definition : decl_specifiers declarator . $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27) + init_declarator : declarator . (70) + init_declarator : declarator . '=' $$5 T_INITIALIZER (72) + $$2 : . (25) + + '=' shift 93 + T_TYPEDEF_NAME reduce 25 + T_DEFINE_NAME reduce 25 + T_AUTO reduce 25 + T_EXTERN reduce 25 + T_REGISTER reduce 25 + T_STATIC reduce 25 + T_TYPEDEF reduce 25 + T_INLINE reduce 25 + T_EXTENSION reduce 25 + T_CHAR reduce 25 + T_DOUBLE reduce 25 + T_FLOAT reduce 25 + T_INT reduce 25 + T_VOID reduce 25 + T_LONG reduce 25 + T_SHORT reduce 25 + T_SIGNED reduce 25 + T_UNSIGNED reduce 25 + T_ENUM reduce 25 + T_STRUCT reduce 25 + T_UNION reduce 25 + T_Bool reduce 25 + T_Complex reduce 25 + T_Imaginary reduce 25 + T_TYPE_QUALIFIER reduce 25 + T_LBRACE reduce 25 + T_VA_DCL reduce 25 + ';' reduce 70 + ',' reduce 70 + + $$2 goto 94 + + +state 72 + function_definition : declarator $$4 . opt_declaration_list T_LBRACE T_MATCHRBRACE (29) + opt_declaration_list : . (30) + + T_TYPEDEF_NAME shift 82 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_TYPEDEF shift 12 + T_INLINE shift 13 + T_EXTENSION shift 14 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + T_VA_DCL shift 95 + T_LBRACE reduce 30 + + decl_specifiers goto 87 + decl_specifier goto 35 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + struct_or_union goto 43 + enumeration goto 47 + declaration goto 96 + any_typedef goto 53 + opt_declaration_list goto 97 + declaration_list goto 98 + + +state 73 + direct_declarator : direct_declarator '(' . parameter_type_list ')' (84) + direct_declarator : direct_declarator '(' . opt_identifier_list ')' (85) + opt_identifier_list : . (99) + + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 6 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_INLINE shift 13 + T_EXTENSION shift 66 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + ')' reduce 99 + + decl_specifiers goto 99 + decl_specifier goto 35 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + parameter_type_list goto 100 + parameter_list goto 101 + parameter_declaration goto 102 + opt_identifier_list goto 103 + identifier_list goto 104 + struct_or_union goto 43 + any_id goto 105 + enumeration goto 47 + + +state 74 + direct_declarator : direct_declarator T_BRACKETS . (83) + + . reduce 83 + + +state 75 + braces : T_LBRACE . T_MATCHRBRACE (12) + + T_MATCHRBRACE shift 106 + . error + + +state 76 + struct_or_union_specifier : struct_or_union any_id . braces (63) + struct_or_union_specifier : struct_or_union any_id . (65) + + T_LBRACE shift 75 + '(' reduce 65 + '*' reduce 65 + '&' reduce 65 + T_IDENTIFIER reduce 65 + T_TYPEDEF_NAME reduce 65 + T_DEFINE_NAME reduce 65 + T_AUTO reduce 65 + T_EXTERN reduce 65 + T_REGISTER reduce 65 + T_STATIC reduce 65 + T_INLINE reduce 65 + T_EXTENSION reduce 65 + T_CHAR reduce 65 + T_DOUBLE reduce 65 + T_FLOAT reduce 65 + T_INT reduce 65 + T_VOID reduce 65 + T_LONG reduce 65 + T_SHORT reduce 65 + T_SIGNED reduce 65 + T_UNSIGNED reduce 65 + T_ENUM reduce 65 + T_STRUCT reduce 65 + T_UNION reduce 65 + T_Bool reduce 65 + T_Complex reduce 65 + T_Imaginary reduce 65 + T_TYPE_QUALIFIER reduce 65 + T_BRACKETS reduce 65 + ';' reduce 65 + ',' reduce 65 + ')' reduce 65 + + braces goto 107 + + +state 77 + struct_or_union_specifier : struct_or_union braces . (64) + + . reduce 64 + + +state 78 + declarator : pointer direct_declarator . (79) + direct_declarator : direct_declarator . T_BRACKETS (83) + direct_declarator : direct_declarator . '(' parameter_type_list ')' (84) + direct_declarator : direct_declarator . '(' opt_identifier_list ')' (85) + + '(' shift 73 + T_BRACKETS shift 74 + T_TYPEDEF_NAME reduce 79 + T_DEFINE_NAME reduce 79 + T_AUTO reduce 79 + T_EXTERN reduce 79 + T_REGISTER reduce 79 + T_STATIC reduce 79 + T_TYPEDEF reduce 79 + T_INLINE reduce 79 + T_EXTENSION reduce 79 + T_CHAR reduce 79 + T_DOUBLE reduce 79 + T_FLOAT reduce 79 + T_INT reduce 79 + T_VOID reduce 79 + T_LONG reduce 79 + T_SHORT reduce 79 + T_SIGNED reduce 79 + T_UNSIGNED reduce 79 + T_ENUM reduce 79 + T_STRUCT reduce 79 + T_UNION reduce 79 + T_Bool reduce 79 + T_Complex reduce 79 + T_Imaginary reduce 79 + T_TYPE_QUALIFIER reduce 79 + T_LBRACE reduce 79 + T_VA_DCL reduce 79 + ';' reduce 79 + ',' reduce 79 + '=' reduce 79 + ')' reduce 79 + + +state 79 + enum_specifier : enumeration any_id . braces (73) + enum_specifier : enumeration any_id . (75) + + T_LBRACE shift 75 + '(' reduce 75 + '*' reduce 75 + '&' reduce 75 + T_IDENTIFIER reduce 75 + T_TYPEDEF_NAME reduce 75 + T_DEFINE_NAME reduce 75 + T_AUTO reduce 75 + T_EXTERN reduce 75 + T_REGISTER reduce 75 + T_STATIC reduce 75 + T_INLINE reduce 75 + T_EXTENSION reduce 75 + T_CHAR reduce 75 + T_DOUBLE reduce 75 + T_FLOAT reduce 75 + T_INT reduce 75 + T_VOID reduce 75 + T_LONG reduce 75 + T_SHORT reduce 75 + T_SIGNED reduce 75 + T_UNSIGNED reduce 75 + T_ENUM reduce 75 + T_STRUCT reduce 75 + T_UNION reduce 75 + T_Bool reduce 75 + T_Complex reduce 75 + T_Imaginary reduce 75 + T_TYPE_QUALIFIER reduce 75 + T_BRACKETS reduce 75 + ';' reduce 75 + ',' reduce 75 + ')' reduce 75 + + braces goto 108 + + +state 80 + enum_specifier : enumeration braces . (74) + + . reduce 74 + + +state 81 + translation_unit : translation_unit external_declaration . (4) + + . reduce 4 + + +state 82 + type_specifier : T_TYPEDEF_NAME . (58) + + . reduce 58 + + +83: shift/reduce conflict (shift 82, reduce 17) on T_TYPEDEF_NAME +state 83 + declaration : any_typedef decl_specifiers . $$1 opt_declarator_list ';' (18) + decl_specifiers : decl_specifiers . decl_specifier (36) + $$1 : . (17) + + T_TYPEDEF_NAME shift 82 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_INLINE shift 13 + T_EXTENSION shift 66 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + '(' reduce 17 + '*' reduce 17 + '&' reduce 17 + T_IDENTIFIER reduce 17 + ';' reduce 17 + + decl_specifier goto 68 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + struct_or_union goto 43 + enumeration goto 47 + $$1 goto 109 + + +state 84 + direct_declarator : '(' declarator ')' . (82) + + . reduce 82 + + +state 85 + pointer : '*' opt_type_qualifiers pointer . (87) + + . reduce 87 + + +state 86 + type_qualifier_list : type_qualifier_list type_qualifier . (91) + + . reduce 91 + + +state 87 + declaration : decl_specifiers . ';' (15) + declaration : decl_specifiers . init_declarator_list ';' (16) + decl_specifiers : decl_specifiers . decl_specifier (36) + + '(' shift 2 + '*' shift 3 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 6 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_INLINE shift 13 + T_EXTENSION shift 66 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + ';' shift 67 + . error + + decl_specifier goto 68 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + init_declarator_list goto 69 + init_declarator goto 70 + declarator goto 110 + direct_declarator goto 42 + struct_or_union goto 43 + pointer goto 44 + any_id goto 45 + identifier_or_ref goto 46 + enumeration goto 47 + + +state 88 + linkage_specification : T_EXTERN T_STRING_LITERAL declaration . (14) + + . reduce 14 + + +state 89 + linkage_specification : T_EXTERN T_STRING_LITERAL braces . (13) + + . reduce 13 + + +state 90 + external_declaration : T_ASM T_ASMARG ';' . (9) + + . reduce 9 + + +state 91 + declaration : decl_specifiers init_declarator_list ';' . (16) + + . reduce 16 + + +state 92 + init_declarator_list : init_declarator_list ',' . init_declarator (69) + + '(' shift 2 + '*' shift 3 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 56 + . error + + init_declarator goto 111 + declarator goto 110 + direct_declarator goto 42 + pointer goto 44 + any_id goto 45 + identifier_or_ref goto 46 + + +state 93 + init_declarator : declarator '=' . $$5 T_INITIALIZER (72) + $$5 : . (71) + + . reduce 71 + + $$5 goto 112 + + +state 94 + function_definition : decl_specifiers declarator $$2 . opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27) + opt_declaration_list : . (30) + + T_TYPEDEF_NAME shift 82 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_TYPEDEF shift 12 + T_INLINE shift 13 + T_EXTENSION shift 14 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + T_VA_DCL shift 95 + T_LBRACE reduce 30 + + decl_specifiers goto 87 + decl_specifier goto 35 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + struct_or_union goto 43 + enumeration goto 47 + declaration goto 96 + any_typedef goto 53 + opt_declaration_list goto 113 + declaration_list goto 98 + + +state 95 + opt_declaration_list : T_VA_DCL . (31) + + . reduce 31 + + +state 96 + declaration_list : declaration . (33) + + . reduce 33 + + +state 97 + function_definition : declarator $$4 opt_declaration_list . T_LBRACE T_MATCHRBRACE (29) + + T_LBRACE shift 114 + . error + + +state 98 + opt_declaration_list : declaration_list . (32) + declaration_list : declaration_list . declaration (34) + + T_TYPEDEF_NAME shift 82 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_TYPEDEF shift 12 + T_INLINE shift 13 + T_EXTENSION shift 14 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + T_LBRACE reduce 32 + + decl_specifiers goto 87 + decl_specifier goto 35 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + struct_or_union goto 43 + enumeration goto 47 + declaration goto 115 + any_typedef goto 53 + + +state 99 + decl_specifiers : decl_specifiers . decl_specifier (36) + parameter_declaration : decl_specifiers . declarator (96) + parameter_declaration : decl_specifiers . abs_declarator (97) + parameter_declaration : decl_specifiers . (98) + + '(' shift 116 + '*' shift 3 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 6 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_INLINE shift 13 + T_EXTENSION shift 66 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + T_BRACKETS shift 117 + ',' reduce 98 + ')' reduce 98 + + decl_specifier goto 68 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + declarator goto 118 + direct_declarator goto 42 + abs_declarator goto 119 + direct_abs_declarator goto 120 + struct_or_union goto 43 + pointer goto 121 + any_id goto 45 + identifier_or_ref goto 46 + enumeration goto 47 + + +state 100 + direct_declarator : direct_declarator '(' parameter_type_list . ')' (84) + + ')' shift 122 + . error + + +state 101 + parameter_type_list : parameter_list . (92) + parameter_type_list : parameter_list . ',' T_ELLIPSIS (93) + parameter_list : parameter_list . ',' parameter_declaration (95) + + ',' shift 123 + ')' reduce 92 + + +state 102 + parameter_list : parameter_declaration . (94) + + . reduce 94 + + +state 103 + direct_declarator : direct_declarator '(' opt_identifier_list . ')' (85) + + ')' shift 124 + . error + + +state 104 + opt_identifier_list : identifier_list . (100) + identifier_list : identifier_list . ',' any_id (102) + + ',' shift 125 + ')' reduce 100 + + +state 105 + identifier_list : any_id . (101) + + . reduce 101 + + +state 106 + braces : T_LBRACE T_MATCHRBRACE . (12) + + . reduce 12 + + +state 107 + struct_or_union_specifier : struct_or_union any_id braces . (63) + + . reduce 63 + + +state 108 + enum_specifier : enumeration any_id braces . (73) + + . reduce 73 + + +state 109 + declaration : any_typedef decl_specifiers $$1 . opt_declarator_list ';' (18) + opt_declarator_list : . (21) + + '(' shift 2 + '*' shift 3 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 56 + ';' reduce 21 + + declarator goto 126 + direct_declarator goto 42 + pointer goto 44 + any_id goto 45 + identifier_or_ref goto 46 + opt_declarator_list goto 127 + declarator_list goto 128 + + +state 110 + init_declarator : declarator . (70) + init_declarator : declarator . '=' $$5 T_INITIALIZER (72) + + '=' shift 93 + ';' reduce 70 + ',' reduce 70 + + +state 111 + init_declarator_list : init_declarator_list ',' init_declarator . (69) + + . reduce 69 + + +state 112 + init_declarator : declarator '=' $$5 . T_INITIALIZER (72) + + T_INITIALIZER shift 129 + . error + + +state 113 + function_definition : decl_specifiers declarator $$2 opt_declaration_list . T_LBRACE $$3 T_MATCHRBRACE (27) + + T_LBRACE shift 130 + . error + + +state 114 + function_definition : declarator $$4 opt_declaration_list T_LBRACE . T_MATCHRBRACE (29) + + T_MATCHRBRACE shift 131 + . error + + +state 115 + declaration_list : declaration_list declaration . (34) + + . reduce 34 + + +state 116 + direct_declarator : '(' . declarator ')' (82) + direct_abs_declarator : '(' . abs_declarator ')' (108) + direct_abs_declarator : '(' . parameter_type_list ')' (113) + direct_abs_declarator : '(' . ')' (114) + + '(' shift 116 + '*' shift 3 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 6 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_INLINE shift 13 + T_EXTENSION shift 66 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + T_BRACKETS shift 117 + ')' shift 132 + . error + + decl_specifiers goto 99 + decl_specifier goto 35 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + declarator goto 57 + direct_declarator goto 42 + abs_declarator goto 133 + direct_abs_declarator goto 120 + parameter_type_list goto 134 + parameter_list goto 101 + parameter_declaration goto 102 + struct_or_union goto 43 + pointer goto 121 + any_id goto 45 + identifier_or_ref goto 46 + enumeration goto 47 + + +state 117 + direct_abs_declarator : T_BRACKETS . (110) + + . reduce 110 + + +state 118 + parameter_declaration : decl_specifiers declarator . (96) + + . reduce 96 + + +state 119 + parameter_declaration : decl_specifiers abs_declarator . (97) + + . reduce 97 + + +state 120 + abs_declarator : direct_abs_declarator . (107) + direct_abs_declarator : direct_abs_declarator . T_BRACKETS (109) + direct_abs_declarator : direct_abs_declarator . '(' parameter_type_list ')' (111) + direct_abs_declarator : direct_abs_declarator . '(' ')' (112) + + '(' shift 135 + T_BRACKETS shift 136 + ',' reduce 107 + ')' reduce 107 + + +state 121 + declarator : pointer . direct_declarator (79) + abs_declarator : pointer . (105) + abs_declarator : pointer . direct_abs_declarator (106) + + '(' shift 116 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 56 + T_BRACKETS shift 117 + ',' reduce 105 + ')' reduce 105 + + direct_declarator goto 78 + direct_abs_declarator goto 137 + any_id goto 45 + identifier_or_ref goto 46 + + +state 122 + direct_declarator : direct_declarator '(' parameter_type_list ')' . (84) + + . reduce 84 + + +state 123 + parameter_type_list : parameter_list ',' . T_ELLIPSIS (93) + parameter_list : parameter_list ',' . parameter_declaration (95) + + T_TYPEDEF_NAME shift 82 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_INLINE shift 13 + T_EXTENSION shift 66 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + T_ELLIPSIS shift 138 + . error + + decl_specifiers goto 99 + decl_specifier goto 35 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + parameter_declaration goto 139 + struct_or_union goto 43 + enumeration goto 47 + + +state 124 + direct_declarator : direct_declarator '(' opt_identifier_list ')' . (85) + + . reduce 85 + + +state 125 + identifier_list : identifier_list ',' . any_id (102) + + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 56 + . error + + any_id goto 140 + + +state 126 + declarator_list : declarator . (23) + + . reduce 23 + + +state 127 + declaration : any_typedef decl_specifiers $$1 opt_declarator_list . ';' (18) + + ';' shift 141 + . error + + +state 128 + opt_declarator_list : declarator_list . (22) + declarator_list : declarator_list . ',' declarator (24) + + ',' shift 142 + ';' reduce 22 + + +state 129 + init_declarator : declarator '=' $$5 T_INITIALIZER . (72) + + . reduce 72 + + +state 130 + function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE . $$3 T_MATCHRBRACE (27) + $$3 : . (26) + + . reduce 26 + + $$3 goto 143 + + +state 131 + function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE . (29) + + . reduce 29 + + +state 132 + direct_abs_declarator : '(' ')' . (114) + + . reduce 114 + + +state 133 + direct_abs_declarator : '(' abs_declarator . ')' (108) + + ')' shift 144 + . error + + +state 134 + direct_abs_declarator : '(' parameter_type_list . ')' (113) + + ')' shift 145 + . error + + +state 135 + direct_abs_declarator : direct_abs_declarator '(' . parameter_type_list ')' (111) + direct_abs_declarator : direct_abs_declarator '(' . ')' (112) + + T_TYPEDEF_NAME shift 82 + T_DEFINE_NAME shift 7 + T_AUTO shift 8 + T_EXTERN shift 65 + T_REGISTER shift 10 + T_STATIC shift 11 + T_INLINE shift 13 + T_EXTENSION shift 66 + T_CHAR shift 15 + T_DOUBLE shift 16 + T_FLOAT shift 17 + T_INT shift 18 + T_VOID shift 19 + T_LONG shift 20 + T_SHORT shift 21 + T_SIGNED shift 22 + T_UNSIGNED shift 23 + T_ENUM shift 24 + T_STRUCT shift 25 + T_UNION shift 26 + T_Bool shift 27 + T_Complex shift 28 + T_Imaginary shift 29 + T_TYPE_QUALIFIER shift 30 + ')' shift 146 + . error + + decl_specifiers goto 99 + decl_specifier goto 35 + storage_class goto 36 + type_specifier goto 37 + type_qualifier goto 38 + struct_or_union_specifier goto 39 + enum_specifier goto 40 + parameter_type_list goto 147 + parameter_list goto 101 + parameter_declaration goto 102 + struct_or_union goto 43 + enumeration goto 47 + + +state 136 + direct_abs_declarator : direct_abs_declarator T_BRACKETS . (109) + + . reduce 109 + + +state 137 + abs_declarator : pointer direct_abs_declarator . (106) + direct_abs_declarator : direct_abs_declarator . T_BRACKETS (109) + direct_abs_declarator : direct_abs_declarator . '(' parameter_type_list ')' (111) + direct_abs_declarator : direct_abs_declarator . '(' ')' (112) + + '(' shift 135 + T_BRACKETS shift 136 + ',' reduce 106 + ')' reduce 106 + + +state 138 + parameter_type_list : parameter_list ',' T_ELLIPSIS . (93) + + . reduce 93 + + +state 139 + parameter_list : parameter_list ',' parameter_declaration . (95) + + . reduce 95 + + +state 140 + identifier_list : identifier_list ',' any_id . (102) + + . reduce 102 + + +state 141 + declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';' . (18) + + . reduce 18 + + +state 142 + declarator_list : declarator_list ',' . declarator (24) + + '(' shift 2 + '*' shift 3 + '&' shift 4 + T_IDENTIFIER shift 5 + T_TYPEDEF_NAME shift 56 + . error + + declarator goto 148 + direct_declarator goto 42 + pointer goto 44 + any_id goto 45 + identifier_or_ref goto 46 + + +state 143 + function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 . T_MATCHRBRACE (27) + + T_MATCHRBRACE shift 149 + . error + + +state 144 + direct_abs_declarator : '(' abs_declarator ')' . (108) + + . reduce 108 + + +state 145 + direct_abs_declarator : '(' parameter_type_list ')' . (113) + + . reduce 113 + + +state 146 + direct_abs_declarator : direct_abs_declarator '(' ')' . (112) + + . reduce 112 + + +state 147 + direct_abs_declarator : direct_abs_declarator '(' parameter_type_list . ')' (111) + + ')' shift 150 + . error + + +state 148 + declarator_list : declarator_list ',' declarator . (24) + + . reduce 24 + + +state 149 + function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE . (27) + + . reduce 27 + + +state 150 + direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')' . (111) + + . reduce 111 + + +State 6 contains 29 reduce/reduce conflicts. +State 83 contains 1 shift/reduce conflict. + + +44 terminals, 43 nonterminals +115 grammar rules, 151 states diff --git a/contrib/byacc/test/yacc/grammar.tab.c b/contrib/byacc/test/yacc/grammar.tab.c new file mode 100644 index 000000000000..e78f1881512c --- /dev/null +++ b/contrib/byacc/test/yacc/grammar.tab.c @@ -0,0 +1,2026 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse grammar_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex grammar_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror grammar_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar grammar_char +#endif /* yychar */ + +#ifndef yyval +#define yyval grammar_val +#endif /* yyval */ + +#ifndef yylval +#define yylval grammar_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug grammar_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs grammar_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag grammar_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs grammar_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen grammar_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred grammar_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto grammar_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex grammar_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex grammar_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex grammar_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable grammar_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck grammar_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname grammar_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule grammar_rule +#endif /* yyrule */ +#define YYPREFIX "grammar_" + +#define YYPURE 0 + +#line 9 "grammar.y" +#ifdef YYBISON +#include <stdlib.h> +#define YYSTYPE_IS_DECLARED +#define yyerror yaccError +#endif + +#if defined(YYBISON) || !defined(YYBYACC) +static void yyerror(const char *s); +#endif +#line 81 "grammar.y" +#include <stdio.h> +#include <ctype.h> +#include <string.h> + +#define OPT_LINTLIBRARY 1 + +#ifndef TRUE +#define TRUE (1) +#endif + +#ifndef FALSE +#define FALSE (0) +#endif + +/* #include "cproto.h" */ +#define MAX_TEXT_SIZE 1024 + +/* Prototype styles */ +#if OPT_LINTLIBRARY +#define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */ +#define PROTO_LINTLIBRARY -1 /* form lint-library source */ +#endif +#define PROTO_NONE 0 /* do not output any prototypes */ +#define PROTO_TRADITIONAL 1 /* comment out parameters */ +#define PROTO_ABSTRACT 2 /* comment out parameter names */ +#define PROTO_ANSI 3 /* ANSI C prototype */ + +typedef int PrototypeStyle; + +typedef char boolean; + +extern boolean types_out; +extern PrototypeStyle proto_style; + +#define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB) +#define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY) +#define lintLibrary() (knrLintLibrary() || ansiLintLibrary()) + +#if OPT_LINTLIBRARY +#define FUNC_UNKNOWN -1 /* unspecified */ +#else +#define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */ +#endif +#define FUNC_NONE 0 /* not a function definition */ +#define FUNC_TRADITIONAL 1 /* traditional style */ +#define FUNC_ANSI 2 /* ANSI style */ +#define FUNC_BOTH 3 /* both styles */ + +typedef int FuncDefStyle; + +/* Source file text */ +typedef struct text { + char text[MAX_TEXT_SIZE]; /* source text */ + long begin; /* offset in temporary file */ +} Text; + +/* Declaration specifier flags */ +#define DS_NONE 0 /* default */ +#define DS_EXTERN 1 /* contains "extern" specifier */ +#define DS_STATIC 2 /* contains "static" specifier */ +#define DS_CHAR 4 /* contains "char" type specifier */ +#define DS_SHORT 8 /* contains "short" type specifier */ +#define DS_FLOAT 16 /* contains "float" type specifier */ +#define DS_INLINE 32 /* contains "inline" specifier */ +#define DS_JUNK 64 /* we're not interested in this declaration */ + +/* This structure stores information about a declaration specifier. */ +typedef struct decl_spec { + unsigned short flags; /* flags defined above */ + char *text; /* source text */ + long begin; /* offset in temporary file */ +} DeclSpec; + +/* This is a list of function parameters. */ +typedef struct _ParameterList { + struct parameter *first; /* pointer to first parameter in list */ + struct parameter *last; /* pointer to last parameter in list */ + long begin_comment; /* begin offset of comment */ + long end_comment; /* end offset of comment */ + char *comment; /* comment at start of parameter list */ +} ParameterList; + +/* This structure stores information about a declarator. */ +typedef struct _Declarator { + char *name; /* name of variable or function */ + char *text; /* source text */ + long begin; /* offset in temporary file */ + long begin_comment; /* begin offset of comment */ + long end_comment; /* end offset of comment */ + FuncDefStyle func_def; /* style of function definition */ + ParameterList params; /* function parameters */ + boolean pointer; /* TRUE if it declares a pointer */ + struct _Declarator *head; /* head function declarator */ + struct _Declarator *func_stack; /* stack of function declarators */ + struct _Declarator *next; /* next declarator in list */ +} Declarator; + +/* This structure stores information about a function parameter. */ +typedef struct parameter { + struct parameter *next; /* next parameter in list */ + DeclSpec decl_spec; + Declarator *declarator; + char *comment; /* comment following the parameter */ +} Parameter; + +/* This is a list of declarators. */ +typedef struct declarator_list { + Declarator *first; /* pointer to first declarator in list */ + Declarator *last; /* pointer to last declarator in list */ +} DeclaratorList; + +/* #include "symbol.h" */ +typedef struct symbol { + struct symbol *next; /* next symbol in list */ + char *name; /* name of symbol */ + char *value; /* value of symbol (for defines) */ + short flags; /* symbol attributes */ +} Symbol; + +/* parser stack entry type */ +typedef union { + Text text; + DeclSpec decl_spec; + Parameter *parameter; + ParameterList param_list; + Declarator *declarator; + DeclaratorList decl_list; +} YYSTYPE; + +/* The hash table length should be a prime number. */ +#define SYM_MAX_HASH 251 + +typedef struct symbol_table { + Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */ +} SymbolTable; + +extern SymbolTable *new_symbol_table /* Create symbol table */ + (void); +extern void free_symbol_table /* Destroy symbol table */ + (SymbolTable *s); +extern Symbol *find_symbol /* Lookup symbol name */ + (SymbolTable *s, const char *n); +extern Symbol *new_symbol /* Define new symbol */ + (SymbolTable *s, const char *n, const char *v, int f); + +/* #include "semantic.h" */ +extern void new_decl_spec (DeclSpec *, const char *, long, int); +extern void free_decl_spec (DeclSpec *); +extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *); +extern void check_untagged (DeclSpec *); +extern Declarator *new_declarator (const char *, const char *, long); +extern void free_declarator (Declarator *); +extern void new_decl_list (DeclaratorList *, Declarator *); +extern void free_decl_list (DeclaratorList *); +extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *); +extern Parameter *new_parameter (DeclSpec *, Declarator *); +extern void free_parameter (Parameter *); +extern void new_param_list (ParameterList *, Parameter *); +extern void free_param_list (ParameterList *); +extern void add_param_list (ParameterList *, ParameterList *, Parameter *); +extern void new_ident_list (ParameterList *); +extern void add_ident_list (ParameterList *, ParameterList *, const char *); +extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *); +extern void gen_declarations (DeclSpec *, DeclaratorList *); +extern void gen_prototype (DeclSpec *, Declarator *); +extern void gen_func_declarator (Declarator *); +extern void gen_func_definition (DeclSpec *, Declarator *); + +extern void init_parser (void); +extern void process_file (FILE *infile, char *name); +extern char *cur_text (void); +extern char *cur_file_name (void); +extern char *implied_typedef (void); +extern void include_file (char *name, int convert); +extern char *supply_parm (int count); +extern char *xstrdup (const char *); +extern int already_declared (char *name); +extern int is_actual_func (Declarator *d); +extern int lint_ellipsis (Parameter *p); +extern int want_typedef (void); +extern void begin_tracking (void); +extern void begin_typedef (void); +extern void copy_typedef (char *s); +extern void ellipsis_varargs (Declarator *d); +extern void end_typedef (void); +extern void flush_varargs (void); +extern void fmt_library (int code); +extern void imply_typedef (const char *s); +extern void indent (FILE *outf); +extern void put_blankline (FILE *outf); +extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator); +extern void put_char (FILE *outf, int c); +extern void put_error (void); +extern void put_newline (FILE *outf); +extern void put_padded (FILE *outf, const char *s); +extern void put_string (FILE *outf, const char *s); +extern void track_in (void); + +extern boolean file_comments; +extern FuncDefStyle func_style; +extern char base_file[]; + +extern int yylex (void); + +/* declaration specifier attributes for the typedef statement currently being + * scanned + */ +static int cur_decl_spec_flags; + +/* pointer to parameter list for the current function definition */ +static ParameterList *func_params; + +/* A parser semantic action sets this pointer to the current declarator in + * a function parameter declaration in order to catch any comments following + * the parameter declaration on the same line. If the lexer scans a comment + * and <cur_declarator> is not NULL, then the comment is attached to the + * declarator. To ignore subsequent comments, the lexer sets this to NULL + * after scanning a comment or end of line. + */ +static Declarator *cur_declarator; + +/* temporary string buffer */ +static char buf[MAX_TEXT_SIZE]; + +/* table of typedef names */ +static SymbolTable *typedef_names; + +/* table of define names */ +static SymbolTable *define_names; + +/* table of type qualifiers */ +static SymbolTable *type_qualifiers; + +/* information about the current input file */ +typedef struct { + char *base_name; /* base input file name */ + char *file_name; /* current file name */ + FILE *file; /* input file */ + unsigned line_num; /* current line number in input file */ + FILE *tmp_file; /* temporary file */ + long begin_comment; /* tmp file offset after last written ) or ; */ + long end_comment; /* tmp file offset after last comment */ + boolean convert; /* if TRUE, convert function definitions */ + boolean changed; /* TRUE if conversion done in this file */ +} IncludeStack; + +static IncludeStack *cur_file; /* current input file */ + +/* #include "yyerror.c" */ + +static int haveAnsiParam (void); + + +/* Flags to enable us to find if a procedure returns a value. + */ +static int return_val; /* nonzero on BRACES iff return-expression found */ + +static const char * +dft_decl_spec (void) +{ + return (lintLibrary() && !return_val) ? "void" : "int"; +} + +static int +haveAnsiParam (void) +{ + Parameter *p; + if (func_params != 0) { + for (p = func_params->first; p != 0; p = p->next) { + if (p->declarator->func_def == FUNC_ANSI) { + return TRUE; + } + } + } + return FALSE; +} +#line 388 "grammar.tab.c" + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define T_IDENTIFIER 257 +#define T_TYPEDEF_NAME 258 +#define T_DEFINE_NAME 259 +#define T_AUTO 260 +#define T_EXTERN 261 +#define T_REGISTER 262 +#define T_STATIC 263 +#define T_TYPEDEF 264 +#define T_INLINE 265 +#define T_EXTENSION 266 +#define T_CHAR 267 +#define T_DOUBLE 268 +#define T_FLOAT 269 +#define T_INT 270 +#define T_VOID 271 +#define T_LONG 272 +#define T_SHORT 273 +#define T_SIGNED 274 +#define T_UNSIGNED 275 +#define T_ENUM 276 +#define T_STRUCT 277 +#define T_UNION 278 +#define T_Bool 279 +#define T_Complex 280 +#define T_Imaginary 281 +#define T_TYPE_QUALIFIER 282 +#define T_BRACKETS 283 +#define T_LBRACE 284 +#define T_MATCHRBRACE 285 +#define T_ELLIPSIS 286 +#define T_INITIALIZER 287 +#define T_STRING_LITERAL 288 +#define T_ASM 289 +#define T_ASMARG 290 +#define T_VA_DCL 291 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT grammar_lhs[] = { -1, + 0, 0, 26, 26, 27, 27, 27, 27, 27, 27, + 27, 31, 30, 30, 28, 28, 34, 28, 32, 32, + 33, 33, 35, 35, 37, 38, 29, 39, 29, 36, + 36, 36, 40, 40, 1, 1, 2, 2, 2, 3, + 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 6, 6, 6, 19, 19, 8, 8, 9, + 41, 9, 7, 7, 7, 25, 23, 23, 10, 10, + 11, 11, 11, 11, 11, 20, 20, 21, 21, 22, + 22, 14, 14, 15, 15, 16, 16, 16, 17, 17, + 18, 18, 24, 24, 12, 12, 12, 13, 13, 13, + 13, 13, 13, 13, +}; +static const YYINT grammar_len[] = { 2, + 0, 1, 1, 2, 1, 1, 1, 1, 3, 2, + 2, 2, 3, 3, 2, 3, 0, 5, 2, 1, + 0, 1, 1, 3, 0, 0, 7, 0, 5, 0, + 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 2, 2, 1, 1, 1, 3, 1, + 0, 4, 3, 2, 2, 1, 1, 1, 2, 1, + 1, 3, 2, 4, 4, 2, 3, 0, 1, 1, + 2, 1, 3, 1, 3, 2, 2, 1, 0, 1, + 1, 3, 1, 2, 1, 2, 1, 3, 2, 1, + 4, 3, 3, 2, +}; +static const YYINT grammar_defred[] = { 0, + 0, 0, 0, 0, 77, 0, 62, 40, 0, 42, + 43, 20, 44, 0, 46, 47, 48, 49, 54, 50, + 51, 52, 53, 76, 66, 67, 55, 56, 57, 61, + 0, 7, 0, 0, 35, 37, 38, 39, 59, 60, + 28, 0, 0, 0, 103, 81, 0, 0, 3, 5, + 6, 8, 0, 10, 11, 78, 0, 90, 0, 0, + 104, 0, 19, 0, 41, 45, 15, 36, 0, 68, + 0, 0, 0, 83, 0, 0, 64, 0, 0, 74, + 4, 58, 0, 82, 87, 91, 0, 14, 13, 9, + 16, 0, 71, 0, 31, 33, 0, 0, 0, 0, + 0, 94, 0, 0, 101, 12, 63, 73, 0, 0, + 69, 0, 0, 0, 34, 0, 110, 96, 97, 0, + 0, 84, 0, 85, 0, 23, 0, 0, 72, 26, + 29, 114, 0, 0, 0, 109, 0, 93, 95, 102, + 18, 0, 0, 108, 113, 112, 0, 24, 27, 111, +}; +static const YYINT grammar_dgoto[] = { 33, + 87, 35, 36, 37, 38, 39, 40, 69, 70, 41, + 42, 119, 120, 100, 101, 102, 103, 104, 43, 44, + 59, 60, 45, 46, 47, 48, 49, 50, 51, 52, + 77, 53, 127, 109, 128, 97, 94, 143, 72, 98, + 112, +}; +static const YYINT grammar_sindex[] = { -2, + -3, 27, -239, -177, 0, 0, 0, 0, -274, 0, + 0, 0, 0, -246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -266, 0, 0, 455, 0, 0, 0, 0, 0, 0, + 0, -35, -245, 128, 0, 0, -245, -2, 0, 0, + 0, 0, 642, 0, 0, 0, -15, 0, -12, -239, + 0, 590, 0, -27, 0, 0, 0, 0, -10, 0, + -11, 534, -72, 0, -237, -232, 0, -35, -232, 0, + 0, 0, 642, 0, 0, 0, 455, 0, 0, 0, + 0, 27, 0, 534, 0, 0, -222, 617, 209, 34, + 39, 0, 44, 42, 0, 0, 0, 0, 27, -11, + 0, -200, -196, -195, 0, 174, 0, 0, 0, -33, + 243, 0, 561, 0, -177, 0, 33, 49, 0, 0, + 0, 0, 53, 55, 417, 0, -33, 0, 0, 0, + 0, 27, -188, 0, 0, 0, 57, 0, 0, 0, +}; +static const YYINT grammar_rindex[] = { 99, + 0, 0, 275, 0, 0, -38, 0, 0, 481, 0, + 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 0, 0, 0, 0, 0, 101, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 343, 309, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 98, -182, 62, 0, 0, 133, 0, 64, 379, 0, + 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -182, 0, 0, 0, -180, -19, 0, + 65, 0, 0, 68, 0, 0, 0, 0, 51, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, + 19, 0, 0, 0, 0, 0, 0, 52, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; +static const YYINT grammar_gindex[] = { 0, + 11, -17, 0, 0, 13, 0, 0, 0, 20, 8, + -43, -1, -8, -89, 0, -9, 0, 0, 0, -44, + 0, 0, 4, 0, 0, 0, 70, -53, 0, 0, + -18, 0, 0, 0, 0, 22, 0, 0, 0, 0, + 0, +}; +#define YYTABLESIZE 924 +static const YYINT grammar_table[] = { 58, + 78, 58, 58, 58, 73, 58, 135, 61, 88, 57, + 34, 5, 56, 62, 85, 58, 68, 63, 96, 7, + 58, 98, 78, 64, 98, 84, 134, 107, 80, 3, + 107, 90, 17, 92, 17, 4, 17, 2, 75, 3, + 96, 71, 30, 89, 115, 147, 76, 106, 91, 93, + 79, 75, 70, 17, 121, 55, 32, 107, 34, 105, + 108, 114, 105, 83, 4, 68, 2, 70, 3, 68, + 80, 121, 86, 80, 122, 106, 105, 78, 106, 5, + 56, 68, 123, 99, 124, 125, 129, 130, 80, 131, + 80, 141, 142, 144, 110, 145, 149, 150, 1, 110, + 2, 30, 99, 32, 79, 92, 118, 79, 100, 21, + 22, 111, 137, 139, 133, 113, 126, 81, 0, 0, + 0, 0, 79, 57, 79, 0, 99, 0, 140, 0, + 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, + 0, 70, 0, 0, 0, 99, 0, 0, 0, 148, + 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, + 0, 0, 0, 0, 0, 4, 0, 2, 0, 0, + 65, 0, 65, 65, 65, 0, 65, 0, 0, 0, + 0, 0, 0, 0, 5, 6, 7, 8, 65, 10, + 11, 65, 13, 66, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 0, 4, 0, 116, 132, 3, 0, 0, 58, 58, + 58, 58, 58, 58, 58, 78, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 78, 4, 74, 116, 136, + 3, 17, 78, 1, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 4, 54, 116, 5, 56, 0, 31, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 88, 80, 88, 88, 88, 0, 88, 0, + 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 89, 79, 89, 89, + 89, 0, 89, 0, 79, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 86, 25, 86, 86, 5, 56, 86, 0, 25, 65, + 65, 65, 65, 65, 65, 65, 0, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 75, 0, 75, 75, + 75, 0, 75, 0, 0, 0, 0, 0, 0, 0, + 5, 6, 7, 8, 65, 10, 11, 75, 13, 66, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 117, 146, 0, 0, + 0, 0, 0, 0, 0, 5, 6, 7, 8, 65, + 10, 11, 0, 13, 66, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 117, 4, 0, 2, 0, 3, 0, 0, 5, + 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 67, 0, 0, 0, 0, 41, 0, + 41, 0, 41, 0, 0, 117, 0, 0, 0, 0, + 0, 88, 88, 0, 0, 0, 0, 0, 0, 41, + 0, 0, 0, 0, 0, 0, 45, 0, 45, 0, + 45, 0, 0, 0, 0, 0, 0, 88, 0, 0, + 0, 0, 0, 0, 0, 89, 89, 45, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 89, 0, 0, 0, 0, 0, 0, 0, 86, + 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 75, 75, 75, 75, 75, + 75, 75, 0, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 82, 7, 8, 65, 10, 11, + 0, 13, 66, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 6, 7, 8, 65, 10, 11, 0, 13, + 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 41, 41, 41, + 41, 41, 41, 41, 0, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 0, 0, 45, 45, 45, 45, 45, + 45, 45, 0, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 82, 7, 8, 65, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 0, 0, 82, 7, + 8, 65, 10, 11, 95, 13, 66, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 0, 0, 0, 138, 82, 7, 8, + 65, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 0, 75, 82, 7, 8, 65, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 82, + 7, 8, 65, 10, 11, 0, 13, 66, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, +}; +static const YYINT grammar_check[] = { 38, + 44, 40, 41, 42, 40, 44, 40, 4, 62, 2, + 0, 257, 258, 288, 59, 3, 34, 264, 72, 259, + 59, 41, 61, 290, 44, 41, 116, 41, 47, 42, + 44, 59, 38, 44, 40, 38, 42, 40, 284, 42, + 94, 34, 282, 62, 98, 135, 43, 285, 59, 61, + 47, 284, 44, 59, 99, 59, 59, 76, 48, 41, + 79, 284, 44, 53, 38, 83, 40, 59, 42, 87, + 41, 116, 60, 44, 41, 41, 73, 121, 44, 257, + 258, 99, 44, 73, 41, 44, 287, 284, 59, 285, + 61, 59, 44, 41, 87, 41, 285, 41, 0, 92, + 0, 284, 41, 284, 41, 41, 99, 44, 41, 59, + 59, 92, 121, 123, 116, 94, 109, 48, -1, -1, + -1, -1, 59, 116, 61, -1, 116, -1, 125, -1, + -1, -1, -1, 123, -1, -1, -1, -1, -1, -1, + -1, 44, -1, -1, -1, 135, -1, -1, -1, 142, + -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, + -1, -1, -1, -1, -1, 38, -1, 40, -1, -1, + 38, -1, 40, 41, 42, -1, 44, -1, -1, -1, + -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, + 263, 59, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + -1, 38, -1, 40, 41, 42, -1, -1, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 38, 283, 40, 283, + 42, 257, 291, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 38, 285, 40, 257, 258, -1, 289, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 38, 284, 40, 41, 42, -1, 44, -1, + 291, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 38, 284, 40, 41, + 42, -1, 44, -1, 291, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 38, 284, 40, 41, 257, 258, 44, -1, 291, 257, + 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 38, -1, 40, 41, + 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, 261, 262, 263, 59, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 41, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, + 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 38, -1, 40, -1, 42, -1, -1, 257, + 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, 38, -1, + 40, -1, 42, -1, -1, 283, -1, -1, -1, -1, + -1, 257, 258, -1, -1, -1, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, 38, -1, 40, -1, + 42, -1, -1, -1, -1, -1, -1, 283, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 283, -1, -1, -1, -1, -1, -1, -1, 257, + 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 283, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, + 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 258, 259, 260, 261, 262, 263, + -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 257, 258, 259, 260, 261, 262, 263, -1, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 257, 258, 259, + 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, -1, -1, 257, 258, 259, 260, 261, + 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, -1, -1, 258, 259, + 260, 261, 262, 263, 291, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, -1, -1, -1, 286, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, -1, 284, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 258, + 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, +}; +#define YYFINAL 33 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 291 +#define YYUNDFTOKEN 335 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const grammar_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,"'&'",0,"'('","')'","'*'",0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,"';'",0, +"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +"T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME","T_AUTO","T_EXTERN", +"T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE","T_EXTENSION","T_CHAR", +"T_DOUBLE","T_FLOAT","T_INT","T_VOID","T_LONG","T_SHORT","T_SIGNED", +"T_UNSIGNED","T_ENUM","T_STRUCT","T_UNION","T_Bool","T_Complex","T_Imaginary", +"T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE","T_ELLIPSIS", +"T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL",0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +"illegal-symbol", +}; +static const char *const grammar_rule[] = { +"$accept : program", +"program :", +"program : translation_unit", +"translation_unit : external_declaration", +"translation_unit : translation_unit external_declaration", +"external_declaration : declaration", +"external_declaration : function_definition", +"external_declaration : ';'", +"external_declaration : linkage_specification", +"external_declaration : T_ASM T_ASMARG ';'", +"external_declaration : error T_MATCHRBRACE", +"external_declaration : error ';'", +"braces : T_LBRACE T_MATCHRBRACE", +"linkage_specification : T_EXTERN T_STRING_LITERAL braces", +"linkage_specification : T_EXTERN T_STRING_LITERAL declaration", +"declaration : decl_specifiers ';'", +"declaration : decl_specifiers init_declarator_list ';'", +"$$1 :", +"declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'", +"any_typedef : T_EXTENSION T_TYPEDEF", +"any_typedef : T_TYPEDEF", +"opt_declarator_list :", +"opt_declarator_list : declarator_list", +"declarator_list : declarator", +"declarator_list : declarator_list ',' declarator", +"$$2 :", +"$$3 :", +"function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE", +"$$4 :", +"function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE", +"opt_declaration_list :", +"opt_declaration_list : T_VA_DCL", +"opt_declaration_list : declaration_list", +"declaration_list : declaration", +"declaration_list : declaration_list declaration", +"decl_specifiers : decl_specifier", +"decl_specifiers : decl_specifiers decl_specifier", +"decl_specifier : storage_class", +"decl_specifier : type_specifier", +"decl_specifier : type_qualifier", +"storage_class : T_AUTO", +"storage_class : T_EXTERN", +"storage_class : T_REGISTER", +"storage_class : T_STATIC", +"storage_class : T_INLINE", +"storage_class : T_EXTENSION", +"type_specifier : T_CHAR", +"type_specifier : T_DOUBLE", +"type_specifier : T_FLOAT", +"type_specifier : T_INT", +"type_specifier : T_LONG", +"type_specifier : T_SHORT", +"type_specifier : T_SIGNED", +"type_specifier : T_UNSIGNED", +"type_specifier : T_VOID", +"type_specifier : T_Bool", +"type_specifier : T_Complex", +"type_specifier : T_Imaginary", +"type_specifier : T_TYPEDEF_NAME", +"type_specifier : struct_or_union_specifier", +"type_specifier : enum_specifier", +"type_qualifier : T_TYPE_QUALIFIER", +"type_qualifier : T_DEFINE_NAME", +"struct_or_union_specifier : struct_or_union any_id braces", +"struct_or_union_specifier : struct_or_union braces", +"struct_or_union_specifier : struct_or_union any_id", +"struct_or_union : T_STRUCT", +"struct_or_union : T_UNION", +"init_declarator_list : init_declarator", +"init_declarator_list : init_declarator_list ',' init_declarator", +"init_declarator : declarator", +"$$5 :", +"init_declarator : declarator '=' $$5 T_INITIALIZER", +"enum_specifier : enumeration any_id braces", +"enum_specifier : enumeration braces", +"enum_specifier : enumeration any_id", +"enumeration : T_ENUM", +"any_id : T_IDENTIFIER", +"any_id : T_TYPEDEF_NAME", +"declarator : pointer direct_declarator", +"declarator : direct_declarator", +"direct_declarator : identifier_or_ref", +"direct_declarator : '(' declarator ')'", +"direct_declarator : direct_declarator T_BRACKETS", +"direct_declarator : direct_declarator '(' parameter_type_list ')'", +"direct_declarator : direct_declarator '(' opt_identifier_list ')'", +"pointer : '*' opt_type_qualifiers", +"pointer : '*' opt_type_qualifiers pointer", +"opt_type_qualifiers :", +"opt_type_qualifiers : type_qualifier_list", +"type_qualifier_list : type_qualifier", +"type_qualifier_list : type_qualifier_list type_qualifier", +"parameter_type_list : parameter_list", +"parameter_type_list : parameter_list ',' T_ELLIPSIS", +"parameter_list : parameter_declaration", +"parameter_list : parameter_list ',' parameter_declaration", +"parameter_declaration : decl_specifiers declarator", +"parameter_declaration : decl_specifiers abs_declarator", +"parameter_declaration : decl_specifiers", +"opt_identifier_list :", +"opt_identifier_list : identifier_list", +"identifier_list : any_id", +"identifier_list : identifier_list ',' any_id", +"identifier_or_ref : any_id", +"identifier_or_ref : '&' any_id", +"abs_declarator : pointer", +"abs_declarator : pointer direct_abs_declarator", +"abs_declarator : direct_abs_declarator", +"direct_abs_declarator : '(' abs_declarator ')'", +"direct_abs_declarator : direct_abs_declarator T_BRACKETS", +"direct_abs_declarator : T_BRACKETS", +"direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'", +"direct_abs_declarator : direct_abs_declarator '(' ')'", +"direct_abs_declarator : '(' parameter_type_list ')'", +"direct_abs_declarator : '(' ')'", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 1014 "grammar.y" + +/* lex.yy.c */ +#define BEGIN yy_start = 1 + 2 * + +#define CPP1 1 +#define INIT1 2 +#define INIT2 3 +#define CURLY 4 +#define LEXYACC 5 +#define ASM 6 +#define CPP_INLINE 7 + +extern char *yytext; +extern FILE *yyin, *yyout; + +static int curly; /* number of curly brace nesting levels */ +static int ly_count; /* number of occurances of %% */ +static int inc_depth; /* include nesting level */ +static SymbolTable *included_files; /* files already included */ +static int yy_start = 0; /* start state number */ + +#define grammar_error(s) yaccError(s) + +static void +yaccError (const char *msg) +{ + func_params = NULL; + put_error(); /* tell what line we're on, and what file */ + fprintf(stderr, "%s at token '%s'\n", msg, yytext); +} + +/* Initialize the table of type qualifier keywords recognized by the lexical + * analyzer. + */ +void +init_parser (void) +{ + static const char *keywords[] = { + "const", + "restrict", + "volatile", + "interrupt", +#ifdef vms + "noshare", + "readonly", +#endif +#if defined(MSDOS) || defined(OS2) + "__cdecl", + "__export", + "__far", + "__fastcall", + "__fortran", + "__huge", + "__inline", + "__interrupt", + "__loadds", + "__near", + "__pascal", + "__saveregs", + "__segment", + "__stdcall", + "__syscall", + "_cdecl", + "_cs", + "_ds", + "_es", + "_export", + "_far", + "_fastcall", + "_fortran", + "_huge", + "_interrupt", + "_loadds", + "_near", + "_pascal", + "_saveregs", + "_seg", + "_segment", + "_ss", + "cdecl", + "far", + "huge", + "near", + "pascal", +#ifdef OS2 + "__far16", +#endif +#endif +#ifdef __GNUC__ + /* gcc aliases */ + "__builtin_va_arg", + "__builtin_va_list", + "__const", + "__const__", + "__inline", + "__inline__", + "__restrict", + "__restrict__", + "__volatile", + "__volatile__", +#endif + }; + unsigned i; + + /* Initialize type qualifier table. */ + type_qualifiers = new_symbol_table(); + for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) { + new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE); + } +} + +/* Process the C source file. Write function prototypes to the standard + * output. Convert function definitions and write the converted source + * code to a temporary file. + */ +void +process_file (FILE *infile, char *name) +{ + char *s; + + if (strlen(name) > 2) { + s = name + strlen(name) - 2; + if (*s == '.') { + ++s; + if (*s == 'l' || *s == 'y') + BEGIN LEXYACC; +#if defined(MSDOS) || defined(OS2) + if (*s == 'L' || *s == 'Y') + BEGIN LEXYACC; +#endif + } + } + + included_files = new_symbol_table(); + typedef_names = new_symbol_table(); + define_names = new_symbol_table(); + inc_depth = -1; + curly = 0; + ly_count = 0; + func_params = NULL; + yyin = infile; + include_file(strcpy(base_file, name), func_style != FUNC_NONE); + if (file_comments) { +#if OPT_LINTLIBRARY + if (lintLibrary()) { + put_blankline(stdout); + begin_tracking(); + } +#endif + put_string(stdout, "/* "); + put_string(stdout, cur_file_name()); + put_string(stdout, " */\n"); + } + yyparse(); + free_symbol_table(define_names); + free_symbol_table(typedef_names); + free_symbol_table(included_files); +} + +#ifdef NO_LEAKS +void +free_parser(void) +{ + free_symbol_table (type_qualifiers); +#ifdef FLEX_SCANNER + if (yy_current_buffer != 0) + yy_delete_buffer(yy_current_buffer); +#endif +} +#endif +#line 1092 "grammar.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 10: +#line 377 "grammar.y" + { + yyerrok; + } +break; +case 11: +#line 381 "grammar.y" + { + yyerrok; + } +break; +case 13: +#line 392 "grammar.y" + { + /* Provide an empty action here so bison will not complain about + * incompatible types in the default action it normally would + * have generated. + */ + } +break; +case 14: +#line 399 "grammar.y" + { + /* empty */ + } +break; +case 15: +#line 406 "grammar.y" + { +#if OPT_LINTLIBRARY + if (types_out && want_typedef()) { + gen_declarations(&yystack.l_mark[-1].decl_spec, (DeclaratorList *)0); + flush_varargs(); + } +#endif + free_decl_spec(&yystack.l_mark[-1].decl_spec); + end_typedef(); + } +break; +case 16: +#line 417 "grammar.y" + { + if (func_params != NULL) { + set_param_types(func_params, &yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list); + } else { + gen_declarations(&yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list); +#if OPT_LINTLIBRARY + flush_varargs(); +#endif + free_decl_list(&yystack.l_mark[-1].decl_list); + } + free_decl_spec(&yystack.l_mark[-2].decl_spec); + end_typedef(); + } +break; +case 17: +#line 431 "grammar.y" + { + cur_decl_spec_flags = yystack.l_mark[0].decl_spec.flags; + free_decl_spec(&yystack.l_mark[0].decl_spec); + } +break; +case 18: +#line 436 "grammar.y" + { + end_typedef(); + } +break; +case 19: +#line 443 "grammar.y" + { + begin_typedef(); + } +break; +case 20: +#line 447 "grammar.y" + { + begin_typedef(); + } +break; +case 23: +#line 459 "grammar.y" + { + int flags = cur_decl_spec_flags; + + /* If the typedef is a pointer type, then reset the short type + * flags so it does not get promoted. + */ + if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0) + flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT); + new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags); + free_declarator(yystack.l_mark[0].declarator); + } +break; +case 24: +#line 471 "grammar.y" + { + int flags = cur_decl_spec_flags; + + if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0) + flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT); + new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags); + free_declarator(yystack.l_mark[0].declarator); + } +break; +case 25: +#line 483 "grammar.y" + { + check_untagged(&yystack.l_mark[-1].decl_spec); + if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) { + yyerror("syntax error"); + YYERROR; + } + func_params = &(yystack.l_mark[0].declarator->head->params); + func_params->begin_comment = cur_file->begin_comment; + func_params->end_comment = cur_file->end_comment; + } +break; +case 26: +#line 494 "grammar.y" + { + /* If we're converting to K&R and we've got a nominally K&R + * function which has a parameter which is ANSI (i.e., a prototyped + * function pointer), then we must override the deciphered value of + * 'func_def' so that the parameter will be converted. + */ + if (func_style == FUNC_TRADITIONAL + && haveAnsiParam() + && yystack.l_mark[-3].declarator->head->func_def == func_style) { + yystack.l_mark[-3].declarator->head->func_def = FUNC_BOTH; + } + + func_params = NULL; + + if (cur_file->convert) + gen_func_definition(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator); + gen_prototype(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator); +#if OPT_LINTLIBRARY + flush_varargs(); +#endif + free_decl_spec(&yystack.l_mark[-4].decl_spec); + free_declarator(yystack.l_mark[-3].declarator); + } +break; +case 28: +#line 519 "grammar.y" + { + if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) { + yyerror("syntax error"); + YYERROR; + } + func_params = &(yystack.l_mark[0].declarator->head->params); + func_params->begin_comment = cur_file->begin_comment; + func_params->end_comment = cur_file->end_comment; + } +break; +case 29: +#line 529 "grammar.y" + { + DeclSpec decl_spec; + + func_params = NULL; + + new_decl_spec(&decl_spec, dft_decl_spec(), yystack.l_mark[-4].declarator->begin, DS_NONE); + if (cur_file->convert) + gen_func_definition(&decl_spec, yystack.l_mark[-4].declarator); + gen_prototype(&decl_spec, yystack.l_mark[-4].declarator); +#if OPT_LINTLIBRARY + flush_varargs(); +#endif + free_decl_spec(&decl_spec); + free_declarator(yystack.l_mark[-4].declarator); + } +break; +case 36: +#line 560 "grammar.y" + { + join_decl_specs(&yyval.decl_spec, &yystack.l_mark[-1].decl_spec, &yystack.l_mark[0].decl_spec); + free(yystack.l_mark[-1].decl_spec.text); + free(yystack.l_mark[0].decl_spec.text); + } +break; +case 40: +#line 575 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); + } +break; +case 41: +#line 579 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_EXTERN); + } +break; +case 42: +#line 583 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); + } +break; +case 43: +#line 587 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_STATIC); + } +break; +case 44: +#line 591 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_INLINE); + } +break; +case 45: +#line 595 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_JUNK); + } +break; +case 46: +#line 602 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR); + } +break; +case 47: +#line 606 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); + } +break; +case 48: +#line 610 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_FLOAT); + } +break; +case 49: +#line 614 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); + } +break; +case 50: +#line 618 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); + } +break; +case 51: +#line 622 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_SHORT); + } +break; +case 52: +#line 626 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); + } +break; +case 53: +#line 630 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); + } +break; +case 54: +#line 634 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); + } +break; +case 55: +#line 638 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR); + } +break; +case 56: +#line 642 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); + } +break; +case 57: +#line 646 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); + } +break; +case 58: +#line 650 "grammar.y" + { + Symbol *s; + s = find_symbol(typedef_names, yystack.l_mark[0].text.text); + if (s != NULL) + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags); + } +break; +case 61: +#line 662 "grammar.y" + { + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); + } +break; +case 62: +#line 666 "grammar.y" + { + /* This rule allows the <pointer> nonterminal to scan #define + * names as if they were type modifiers. + */ + Symbol *s; + s = find_symbol(define_names, yystack.l_mark[0].text.text); + if (s != NULL) + new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags); + } +break; +case 63: +#line 679 "grammar.y" + { + char *s; + if ((s = implied_typedef()) == 0) + (void)sprintf(s = buf, "%s %s", yystack.l_mark[-2].text.text, yystack.l_mark[-1].text.text); + new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE); + } +break; +case 64: +#line 686 "grammar.y" + { + char *s; + if ((s = implied_typedef()) == 0) + (void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text); + new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE); + } +break; +case 65: +#line 693 "grammar.y" + { + (void)sprintf(buf, "%s %s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text); + new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE); + } +break; +case 66: +#line 701 "grammar.y" + { + imply_typedef(yyval.text.text); + } +break; +case 67: +#line 705 "grammar.y" + { + imply_typedef(yyval.text.text); + } +break; +case 68: +#line 712 "grammar.y" + { + new_decl_list(&yyval.decl_list, yystack.l_mark[0].declarator); + } +break; +case 69: +#line 716 "grammar.y" + { + add_decl_list(&yyval.decl_list, &yystack.l_mark[-2].decl_list, yystack.l_mark[0].declarator); + } +break; +case 70: +#line 723 "grammar.y" + { + if (yystack.l_mark[0].declarator->func_def != FUNC_NONE && func_params == NULL && + func_style == FUNC_TRADITIONAL && cur_file->convert) { + gen_func_declarator(yystack.l_mark[0].declarator); + fputs(cur_text(), cur_file->tmp_file); + } + cur_declarator = yyval.declarator; + } +break; +case 71: +#line 732 "grammar.y" + { + if (yystack.l_mark[-1].declarator->func_def != FUNC_NONE && func_params == NULL && + func_style == FUNC_TRADITIONAL && cur_file->convert) { + gen_func_declarator(yystack.l_mark[-1].declarator); + fputs(" =", cur_file->tmp_file); + } + } +break; +case 73: +#line 744 "grammar.y" + { + char *s; + if ((s = implied_typedef()) == 0) + (void)sprintf(s = buf, "enum %s", yystack.l_mark[-1].text.text); + new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE); + } +break; +case 74: +#line 751 "grammar.y" + { + char *s; + if ((s = implied_typedef()) == 0) + (void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text); + new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE); + } +break; +case 75: +#line 758 "grammar.y" + { + (void)sprintf(buf, "enum %s", yystack.l_mark[0].text.text); + new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE); + } +break; +case 76: +#line 766 "grammar.y" + { + imply_typedef("enum"); + yyval.text = yystack.l_mark[0].text; + } +break; +case 79: +#line 779 "grammar.y" + { + yyval.declarator = yystack.l_mark[0].declarator; + (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, yyval.declarator->text); + free(yyval.declarator->text); + yyval.declarator->text = xstrdup(buf); + yyval.declarator->begin = yystack.l_mark[-1].text.begin; + yyval.declarator->pointer = TRUE; + } +break; +case 81: +#line 792 "grammar.y" + { + yyval.declarator = new_declarator(yystack.l_mark[0].text.text, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin); + } +break; +case 82: +#line 796 "grammar.y" + { + yyval.declarator = yystack.l_mark[-1].declarator; + (void)sprintf(buf, "(%s)", yyval.declarator->text); + free(yyval.declarator->text); + yyval.declarator->text = xstrdup(buf); + yyval.declarator->begin = yystack.l_mark[-2].text.begin; + } +break; +case 83: +#line 804 "grammar.y" + { + yyval.declarator = yystack.l_mark[-1].declarator; + (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text); + free(yyval.declarator->text); + yyval.declarator->text = xstrdup(buf); + } +break; +case 84: +#line 811 "grammar.y" + { + yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin); + yyval.declarator->params = yystack.l_mark[-1].param_list; + yyval.declarator->func_stack = yystack.l_mark[-3].declarator; + yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; + yyval.declarator->func_def = FUNC_ANSI; + } +break; +case 85: +#line 819 "grammar.y" + { + yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin); + yyval.declarator->params = yystack.l_mark[-1].param_list; + yyval.declarator->func_stack = yystack.l_mark[-3].declarator; + yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; + yyval.declarator->func_def = FUNC_TRADITIONAL; + } +break; +case 86: +#line 830 "grammar.y" + { + (void)sprintf(yyval.text.text, "*%s", yystack.l_mark[0].text.text); + yyval.text.begin = yystack.l_mark[-1].text.begin; + } +break; +case 87: +#line 835 "grammar.y" + { + (void)sprintf(yyval.text.text, "*%s%s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text); + yyval.text.begin = yystack.l_mark[-2].text.begin; + } +break; +case 88: +#line 843 "grammar.y" + { + strcpy(yyval.text.text, ""); + yyval.text.begin = 0L; + } +break; +case 90: +#line 852 "grammar.y" + { + (void)sprintf(yyval.text.text, "%s ", yystack.l_mark[0].decl_spec.text); + yyval.text.begin = yystack.l_mark[0].decl_spec.begin; + free(yystack.l_mark[0].decl_spec.text); + } +break; +case 91: +#line 858 "grammar.y" + { + (void)sprintf(yyval.text.text, "%s%s ", yystack.l_mark[-1].text.text, yystack.l_mark[0].decl_spec.text); + yyval.text.begin = yystack.l_mark[-1].text.begin; + free(yystack.l_mark[0].decl_spec.text); + } +break; +case 93: +#line 868 "grammar.y" + { + add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, "..."); + } +break; +case 94: +#line 875 "grammar.y" + { + new_param_list(&yyval.param_list, yystack.l_mark[0].parameter); + } +break; +case 95: +#line 879 "grammar.y" + { + add_param_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].parameter); + } +break; +case 96: +#line 886 "grammar.y" + { + check_untagged(&yystack.l_mark[-1].decl_spec); + yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator); + } +break; +case 97: +#line 891 "grammar.y" + { + check_untagged(&yystack.l_mark[-1].decl_spec); + yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator); + } +break; +case 98: +#line 896 "grammar.y" + { + check_untagged(&yystack.l_mark[0].decl_spec); + yyval.parameter = new_parameter(&yystack.l_mark[0].decl_spec, (Declarator *)0); + } +break; +case 99: +#line 904 "grammar.y" + { + new_ident_list(&yyval.param_list); + } +break; +case 101: +#line 912 "grammar.y" + { + new_ident_list(&yyval.param_list); + add_ident_list(&yyval.param_list, &yyval.param_list, yystack.l_mark[0].text.text); + } +break; +case 102: +#line 917 "grammar.y" + { + add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].text.text); + } +break; +case 103: +#line 924 "grammar.y" + { + yyval.text = yystack.l_mark[0].text; + } +break; +case 104: +#line 928 "grammar.y" + { +#if OPT_LINTLIBRARY + if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */ + yyval.text = yystack.l_mark[0].text; + } else +#endif + (void)sprintf(yyval.text.text, "&%s", yystack.l_mark[0].text.text); + yyval.text.begin = yystack.l_mark[-1].text.begin; + } +break; +case 105: +#line 941 "grammar.y" + { + yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin); + } +break; +case 106: +#line 945 "grammar.y" + { + yyval.declarator = yystack.l_mark[0].declarator; + (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, yyval.declarator->text); + free(yyval.declarator->text); + yyval.declarator->text = xstrdup(buf); + yyval.declarator->begin = yystack.l_mark[-1].text.begin; + } +break; +case 108: +#line 957 "grammar.y" + { + yyval.declarator = yystack.l_mark[-1].declarator; + (void)sprintf(buf, "(%s)", yyval.declarator->text); + free(yyval.declarator->text); + yyval.declarator->text = xstrdup(buf); + yyval.declarator->begin = yystack.l_mark[-2].text.begin; + } +break; +case 109: +#line 965 "grammar.y" + { + yyval.declarator = yystack.l_mark[-1].declarator; + (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text); + free(yyval.declarator->text); + yyval.declarator->text = xstrdup(buf); + } +break; +case 110: +#line 972 "grammar.y" + { + yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin); + } +break; +case 111: +#line 976 "grammar.y" + { + yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-3].declarator->begin); + yyval.declarator->params = yystack.l_mark[-1].param_list; + yyval.declarator->func_stack = yystack.l_mark[-3].declarator; + yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; + yyval.declarator->func_def = FUNC_ANSI; + } +break; +case 112: +#line 984 "grammar.y" + { + yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].declarator->begin); + yyval.declarator->func_stack = yystack.l_mark[-2].declarator; + yyval.declarator->head = (yystack.l_mark[-2].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-2].declarator->head; + yyval.declarator->func_def = FUNC_ANSI; + } +break; +case 113: +#line 991 "grammar.y" + { + Declarator *d; + + d = new_declarator("", "", yystack.l_mark[-2].text.begin); + yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].text.begin); + yyval.declarator->params = yystack.l_mark[-1].param_list; + yyval.declarator->func_stack = d; + yyval.declarator->head = yyval.declarator; + yyval.declarator->func_def = FUNC_ANSI; + } +break; +case 114: +#line 1002 "grammar.y" + { + Declarator *d; + + d = new_declarator("", "", yystack.l_mark[-1].text.begin); + yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-1].text.begin); + yyval.declarator->func_stack = d; + yyval.declarator->head = yyval.declarator; + yyval.declarator->func_def = FUNC_ANSI; + } +break; +#line 1968 "grammar.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/grammar.tab.h b/contrib/byacc/test/yacc/grammar.tab.h new file mode 100644 index 000000000000..531dd2e849b2 --- /dev/null +++ b/contrib/byacc/test/yacc/grammar.tab.h @@ -0,0 +1,35 @@ +#define T_IDENTIFIER 257 +#define T_TYPEDEF_NAME 258 +#define T_DEFINE_NAME 259 +#define T_AUTO 260 +#define T_EXTERN 261 +#define T_REGISTER 262 +#define T_STATIC 263 +#define T_TYPEDEF 264 +#define T_INLINE 265 +#define T_EXTENSION 266 +#define T_CHAR 267 +#define T_DOUBLE 268 +#define T_FLOAT 269 +#define T_INT 270 +#define T_VOID 271 +#define T_LONG 272 +#define T_SHORT 273 +#define T_SIGNED 274 +#define T_UNSIGNED 275 +#define T_ENUM 276 +#define T_STRUCT 277 +#define T_UNION 278 +#define T_Bool 279 +#define T_Complex 280 +#define T_Imaginary 281 +#define T_TYPE_QUALIFIER 282 +#define T_BRACKETS 283 +#define T_LBRACE 284 +#define T_MATCHRBRACE 285 +#define T_ELLIPSIS 286 +#define T_INITIALIZER 287 +#define T_STRING_LITERAL 288 +#define T_ASM 289 +#define T_ASMARG 290 +#define T_VA_DCL 291 diff --git a/contrib/byacc/test/yacc/help.error b/contrib/byacc/test/yacc/help.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/help.error diff --git a/contrib/byacc/test/yacc/help.output b/contrib/byacc/test/yacc/help.output new file mode 100644 index 000000000000..28e455543be0 --- /dev/null +++ b/contrib/byacc/test/yacc/help.output @@ -0,0 +1,19 @@ +Usage: YACC [options] filename + +Options: + -b file_prefix set filename prefix (default "y.") + -B create a backtracking parser + -d write definitions (.tab.h) + -D enable value stack memory reclamation + -i write interface (y.tab.i) + -g write a graphical description + -l suppress #line directives + -L enable position processing, e.g., "%locations" + -o output_file (default ".tab.c") + -p symbol_prefix set symbol prefix (default "yy") + -P create a reentrant parser, e.g., "%pure-parser" + -r produce separate code and table files (y.code.c) + -s suppress #define's for quoted names in %token lines + -t add debugging support + -v write description (y.output) + -V show version information and exit diff --git a/contrib/byacc/test/yacc/no_b_opt.error b/contrib/byacc/test/yacc/no_b_opt.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_b_opt.error diff --git a/contrib/byacc/test/yacc/no_b_opt.output b/contrib/byacc/test/yacc/no_b_opt.output new file mode 100644 index 000000000000..28e455543be0 --- /dev/null +++ b/contrib/byacc/test/yacc/no_b_opt.output @@ -0,0 +1,19 @@ +Usage: YACC [options] filename + +Options: + -b file_prefix set filename prefix (default "y.") + -B create a backtracking parser + -d write definitions (.tab.h) + -D enable value stack memory reclamation + -i write interface (y.tab.i) + -g write a graphical description + -l suppress #line directives + -L enable position processing, e.g., "%locations" + -o output_file (default ".tab.c") + -p symbol_prefix set symbol prefix (default "yy") + -P create a reentrant parser, e.g., "%pure-parser" + -r produce separate code and table files (y.code.c) + -s suppress #define's for quoted names in %token lines + -t add debugging support + -v write description (y.output) + -V show version information and exit diff --git a/contrib/byacc/test/yacc/no_b_opt1.error b/contrib/byacc/test/yacc/no_b_opt1.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_b_opt1.error diff --git a/contrib/byacc/test/yacc/no_b_opt1.output b/contrib/byacc/test/yacc/no_b_opt1.output new file mode 100644 index 000000000000..87286c2661e6 --- /dev/null +++ b/contrib/byacc/test/yacc/no_b_opt1.output @@ -0,0 +1 @@ +YACC: f - cannot open "nosuchfile.c" diff --git a/contrib/byacc/test/yacc/no_code_c.error b/contrib/byacc/test/yacc/no_code_c.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_code_c.error diff --git a/contrib/byacc/test/yacc/no_code_c.output b/contrib/byacc/test/yacc/no_code_c.output new file mode 100644 index 000000000000..87286c2661e6 --- /dev/null +++ b/contrib/byacc/test/yacc/no_code_c.output @@ -0,0 +1 @@ +YACC: f - cannot open "nosuchfile.c" diff --git a/contrib/byacc/test/yacc/no_defines.error b/contrib/byacc/test/yacc/no_defines.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_defines.error diff --git a/contrib/byacc/test/yacc/no_defines.output b/contrib/byacc/test/yacc/no_defines.output new file mode 100644 index 000000000000..773985d66f33 --- /dev/null +++ b/contrib/byacc/test/yacc/no_defines.output @@ -0,0 +1 @@ +YACC: f - cannot open "nosuchfile.h" diff --git a/contrib/byacc/test/yacc/no_graph.error b/contrib/byacc/test/yacc/no_graph.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_graph.error diff --git a/contrib/byacc/test/yacc/no_graph.output b/contrib/byacc/test/yacc/no_graph.output new file mode 100644 index 000000000000..d5575f400421 --- /dev/null +++ b/contrib/byacc/test/yacc/no_graph.output @@ -0,0 +1 @@ +YACC: f - cannot open "nosuchfile.dot" diff --git a/contrib/byacc/test/yacc/no_include.error b/contrib/byacc/test/yacc/no_include.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_include.error diff --git a/contrib/byacc/test/yacc/no_include.output b/contrib/byacc/test/yacc/no_include.output new file mode 100644 index 000000000000..3ece4a454e39 --- /dev/null +++ b/contrib/byacc/test/yacc/no_include.output @@ -0,0 +1 @@ +YACC: f - cannot open "nosuchfile.i" diff --git a/contrib/byacc/test/yacc/no_opts.error b/contrib/byacc/test/yacc/no_opts.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_opts.error diff --git a/contrib/byacc/test/yacc/no_opts.output b/contrib/byacc/test/yacc/no_opts.output new file mode 100644 index 000000000000..ad3131a69ab6 --- /dev/null +++ b/contrib/byacc/test/yacc/no_opts.output @@ -0,0 +1 @@ +YACC: f - cannot open "nosuchfile.y" diff --git a/contrib/byacc/test/yacc/no_output.error b/contrib/byacc/test/yacc/no_output.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_output.error diff --git a/contrib/byacc/test/yacc/no_output.output b/contrib/byacc/test/yacc/no_output.output new file mode 100644 index 000000000000..a2f142a9d531 --- /dev/null +++ b/contrib/byacc/test/yacc/no_output.output @@ -0,0 +1 @@ +YACC: f - cannot open "nosuchfile.output" diff --git a/contrib/byacc/test/yacc/no_output1.error b/contrib/byacc/test/yacc/no_output1.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_output1.error diff --git a/contrib/byacc/test/yacc/no_output1.output b/contrib/byacc/test/yacc/no_output1.output new file mode 100644 index 000000000000..a2f142a9d531 --- /dev/null +++ b/contrib/byacc/test/yacc/no_output1.output @@ -0,0 +1 @@ +YACC: f - cannot open "nosuchfile.output" diff --git a/contrib/byacc/test/yacc/no_output2.error b/contrib/byacc/test/yacc/no_output2.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_output2.error diff --git a/contrib/byacc/test/yacc/no_output2.output b/contrib/byacc/test/yacc/no_output2.output new file mode 100644 index 000000000000..28e455543be0 --- /dev/null +++ b/contrib/byacc/test/yacc/no_output2.output @@ -0,0 +1,19 @@ +Usage: YACC [options] filename + +Options: + -b file_prefix set filename prefix (default "y.") + -B create a backtracking parser + -d write definitions (.tab.h) + -D enable value stack memory reclamation + -i write interface (y.tab.i) + -g write a graphical description + -l suppress #line directives + -L enable position processing, e.g., "%locations" + -o output_file (default ".tab.c") + -p symbol_prefix set symbol prefix (default "yy") + -P create a reentrant parser, e.g., "%pure-parser" + -r produce separate code and table files (y.code.c) + -s suppress #define's for quoted names in %token lines + -t add debugging support + -v write description (y.output) + -V show version information and exit diff --git a/contrib/byacc/test/yacc/no_p_opt.error b/contrib/byacc/test/yacc/no_p_opt.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_p_opt.error diff --git a/contrib/byacc/test/yacc/no_p_opt.output b/contrib/byacc/test/yacc/no_p_opt.output new file mode 100644 index 000000000000..28e455543be0 --- /dev/null +++ b/contrib/byacc/test/yacc/no_p_opt.output @@ -0,0 +1,19 @@ +Usage: YACC [options] filename + +Options: + -b file_prefix set filename prefix (default "y.") + -B create a backtracking parser + -d write definitions (.tab.h) + -D enable value stack memory reclamation + -i write interface (y.tab.i) + -g write a graphical description + -l suppress #line directives + -L enable position processing, e.g., "%locations" + -o output_file (default ".tab.c") + -p symbol_prefix set symbol prefix (default "yy") + -P create a reentrant parser, e.g., "%pure-parser" + -r produce separate code and table files (y.code.c) + -s suppress #define's for quoted names in %token lines + -t add debugging support + -v write description (y.output) + -V show version information and exit diff --git a/contrib/byacc/test/yacc/no_p_opt1.error b/contrib/byacc/test/yacc/no_p_opt1.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_p_opt1.error diff --git a/contrib/byacc/test/yacc/no_p_opt1.output b/contrib/byacc/test/yacc/no_p_opt1.output new file mode 100644 index 000000000000..87286c2661e6 --- /dev/null +++ b/contrib/byacc/test/yacc/no_p_opt1.output @@ -0,0 +1 @@ +YACC: f - cannot open "nosuchfile.c" diff --git a/contrib/byacc/test/yacc/no_verbose.error b/contrib/byacc/test/yacc/no_verbose.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/no_verbose.error diff --git a/contrib/byacc/test/yacc/no_verbose.output b/contrib/byacc/test/yacc/no_verbose.output new file mode 100644 index 000000000000..a2f142a9d531 --- /dev/null +++ b/contrib/byacc/test/yacc/no_verbose.output @@ -0,0 +1 @@ +YACC: f - cannot open "nosuchfile.output" diff --git a/contrib/byacc/test/yacc/nostdin.error b/contrib/byacc/test/yacc/nostdin.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/nostdin.error diff --git a/contrib/byacc/test/yacc/nostdin.output b/contrib/byacc/test/yacc/nostdin.output new file mode 100644 index 000000000000..28e455543be0 --- /dev/null +++ b/contrib/byacc/test/yacc/nostdin.output @@ -0,0 +1,19 @@ +Usage: YACC [options] filename + +Options: + -b file_prefix set filename prefix (default "y.") + -B create a backtracking parser + -d write definitions (.tab.h) + -D enable value stack memory reclamation + -i write interface (y.tab.i) + -g write a graphical description + -l suppress #line directives + -L enable position processing, e.g., "%locations" + -o output_file (default ".tab.c") + -p symbol_prefix set symbol prefix (default "yy") + -P create a reentrant parser, e.g., "%pure-parser" + -r produce separate code and table files (y.code.c) + -s suppress #define's for quoted names in %token lines + -t add debugging support + -v write description (y.output) + -V show version information and exit diff --git a/contrib/byacc/test/yacc/ok_syntax1.error b/contrib/byacc/test/yacc/ok_syntax1.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/ok_syntax1.error diff --git a/contrib/byacc/test/yacc/ok_syntax1.output b/contrib/byacc/test/yacc/ok_syntax1.output new file mode 100644 index 000000000000..105a1d30d484 --- /dev/null +++ b/contrib/byacc/test/yacc/ok_syntax1.output @@ -0,0 +1,461 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr '+' expr + 8 | expr '-' expr + 9 | expr '*' expr + 10 | expr '/' expr + 11 | expr '%' expr + 12 | expr '&' expr + 13 | expr '|' expr + 14 | '-' expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + DIGIT shift 3 + LETTER shift 4 + '-' shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + number : DIGIT . (17) + + . reduce 17 + + +state 4 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 11 + '\n' reduce 15 + '|' reduce 15 + '&' reduce 15 + '+' reduce 15 + '-' reduce 15 + '*' reduce 15 + '/' reduce 15 + '%' reduce 15 + + +state 5 + expr : '-' . expr (14) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 13 + number goto 9 + + +state 6 + expr : '(' . expr ')' (6) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + '\n' reduce 16 + '|' reduce 16 + '&' reduce 16 + '+' reduce 16 + '-' reduce 16 + '*' reduce 16 + '/' reduce 16 + '%' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + stat : LETTER '=' . expr (5) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 12 + expr : LETTER . (15) + + . reduce 15 + + +state 13 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : '-' expr . (14) + + . reduce 14 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr '|' . expr (13) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr '&' . expr (12) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr '+' . expr (7) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr '-' . expr (8) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr '*' . expr (9) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr '/' . expr (10) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '%' . expr (11) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +state 26 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 13 + '|' reduce 13 + ')' reduce 13 + + +state 27 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr '&' expr . (12) + expr : expr . '|' expr (13) + + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 12 + '|' reduce 12 + '&' reduce 12 + ')' reduce 12 + + +state 28 + expr : expr . '+' expr (7) + expr : expr '+' expr . (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 7 + '|' reduce 7 + '&' reduce 7 + '+' reduce 7 + '-' reduce 7 + ')' reduce 7 + + +state 29 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr '-' expr . (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 8 + '|' reduce 8 + '&' reduce 8 + '+' reduce 8 + '-' reduce 8 + ')' reduce 8 + + +state 30 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr '*' expr . (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 9 + + +state 31 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr '/' expr . (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 10 + + +state 32 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr '%' expr . (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 11 + + +42 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/ok_syntax1.tab.c b/contrib/byacc/test/yacc/ok_syntax1.tab.c new file mode 100644 index 000000000000..990623e75de8 --- /dev/null +++ b/contrib/byacc/test/yacc/ok_syntax1.tab.c @@ -0,0 +1,716 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse ok_syntax1_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex ok_syntax1_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror ok_syntax1_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar ok_syntax1_char +#endif /* yychar */ + +#ifndef yyval +#define yyval ok_syntax1_val +#endif /* yyval */ + +#ifndef yylval +#define yylval ok_syntax1_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug ok_syntax1_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs ok_syntax1_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag ok_syntax1_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs ok_syntax1_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen ok_syntax1_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred ok_syntax1_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto ok_syntax1_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex ok_syntax1_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex ok_syntax1_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex ok_syntax1_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable ok_syntax1_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck ok_syntax1_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname ok_syntax1_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule ok_syntax1_rule +#endif /* yyrule */ +#define YYPREFIX "ok_syntax1_" + +#define YYPURE 1 + +#line 9 "ok_syntax1.y" +# include <stdio.h> +# include <ctype.h> + +#ifdef YYBISON +#define YYSTYPE int +#define YYLEX_PARAM base +#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) +#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) +int YYLEX_DECL(); +static void YYERROR_DECL(); +#endif + +#line 43 "ok_syntax1.y" +#ifdef YYSTYPE +#undef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +#endif +#ifndef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +typedef union +{ + char * cval; + int ival; + double dval; +} YYSTYPE; +#endif /* !YYSTYPE_IS_DECLARED */ +#line 128 "ok_syntax1.tab.c" + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(int regs[26], int * base) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# ifdef YYLEX_PARAM_TYPE +# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) +# else +# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) +# endif +# define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(YYSTYPE *yylval, int * base) +# define YYLEX yylex(&yylval, base) +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(int regs[26], int * base, const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(regs, base, msg) +#endif + +extern int YYPARSE_DECL(); + +#define DIGIT 257 +#define LETTER 258 +#define OCT1 259 +#define HEX1 260 +#define HEX2 261 +#define HEX3 262 +#define STR1 263 +#define STR2 265 +#define BELL 266 +#define BS 267 +#define NL 268 +#define LF 269 +#define CR 270 +#define TAB 271 +#define VT 272 +#define UMINUS 273 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT ok_syntax1_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT ok_syntax1_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT ok_syntax1_defred[] = { 1, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, + 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, + 10, 11, +}; +static const YYINT ok_syntax1_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT ok_syntax1_sindex[] = { 0, + -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, + -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, + -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, + 0, 0, +}; +static const YYINT ok_syntax1_rindex[] = { 0, + 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, + 0, 0, +}; +static const YYINT ok_syntax1_gindex[] = { 0, + 0, 65, 0, +}; +#define YYTABLESIZE 220 +static const YYINT ok_syntax1_table[] = { 6, + 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, + 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, + 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, + 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, + 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, + 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, + 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, + 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, + 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, + 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, + 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, +}; +static const YYINT ok_syntax1_check[] = { 40, + 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, + 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, + -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, + -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, + -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, + 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, + -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, + 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, + 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, + -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, + -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, + -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, + -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 273 +#define YYUNDFTOKEN 279 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const ok_syntax1_name[] = { + +"end-of-file",0,0,0,0,0,0,"'\\a'","'\\b'","'\\t'","'\\n'","'\\v'","'\\f'", +"'\\r'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'#'",0,"'%'","'&'",0,"'('", +"')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,0,"'='",0,0,"'@'",0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,"'~'","'\\177'",0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +"'\\377'",0,"DIGIT","LETTER","OCT1","HEX1","HEX2","HEX3","STR1", +"\"\\177\\177\\\\\\n\"","STR2","BELL","BS","NL","LF","CR","TAB","VT","UMINUS",0, +0,0,0,0,"illegal-symbol", +}; +static const char *const ok_syntax1_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr '+' expr", +"expr : expr '-' expr", +"expr : expr '*' expr", +"expr : expr '/' expr", +"expr : expr '%' expr", +"expr : expr '&' expr", +"expr : expr '|' expr", +"expr : '-' expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +#line 104 "ok_syntax1.y" + /* start of programs */ + +#ifdef YYBYACC +extern int YYLEX_DECL(); +#endif + +int +main (void) +{ + int regs[26]; + int base = 10; + + while(!feof(stdin)) { + yyparse(regs, &base); + } + return 0; +} + +#define UNUSED(x) ((void)(x)) + +static void +YYERROR_DECL() +{ + UNUSED(regs); /* %parse-param regs is not actually used here */ + UNUSED(base); /* %parse-param base is not actually used here */ + fprintf(stderr, "%s\n", s); +} + +int +YYLEX_DECL() +{ + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval->ival = (c - 'a'); + return ( LETTER ); + } + if( isdigit( c )) { + yylval->ival = (c - '0') % (*base); + return ( DIGIT ); + } + return( c ); +} +#line 389 "ok_syntax1.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yyerrflag; + int yychar; + YYSTYPE yyval; + YYSTYPE yylval; + + /* variables for the parser stack */ + YYSTACKDATA yystack; + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 66 "ok_syntax1.y" + { yyerrok ; } +break; +case 4: +#line 70 "ok_syntax1.y" + { printf("%d\n",yystack.l_mark[0].ival);} +break; +case 5: +#line 72 "ok_syntax1.y" + { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; } +break; +case 6: +#line 76 "ok_syntax1.y" + { yyval.ival = yystack.l_mark[-1].ival; } +break; +case 7: +#line 78 "ok_syntax1.y" + { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; } +break; +case 8: +#line 80 "ok_syntax1.y" + { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; } +break; +case 9: +#line 82 "ok_syntax1.y" + { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; } +break; +case 10: +#line 84 "ok_syntax1.y" + { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; } +break; +case 11: +#line 86 "ok_syntax1.y" + { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; } +break; +case 12: +#line 88 "ok_syntax1.y" + { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; } +break; +case 13: +#line 90 "ok_syntax1.y" + { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; } +break; +case 14: +#line 92 "ok_syntax1.y" + { yyval.ival = - yystack.l_mark[0].ival; } +break; +case 15: +#line 94 "ok_syntax1.y" + { yyval.ival = regs[yystack.l_mark[0].ival]; } +break; +case 17: +#line 99 "ok_syntax1.y" + { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; } +break; +case 18: +#line 101 "ok_syntax1.y" + { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; } +break; +#line 658 "ok_syntax1.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/ok_syntax1.tab.h b/contrib/byacc/test/yacc/ok_syntax1.tab.h new file mode 100644 index 000000000000..8a51fa00660e --- /dev/null +++ b/contrib/byacc/test/yacc/ok_syntax1.tab.h @@ -0,0 +1,30 @@ +#define DIGIT 257 +#define LETTER 258 +#define OCT1 259 +#define HEX1 260 +#define HEX2 261 +#define HEX3 262 +#define STR1 263 +#define STR2 265 +#define BELL 266 +#define BS 267 +#define NL 268 +#define LF 269 +#define CR 270 +#define TAB 271 +#define VT 272 +#define UMINUS 273 +#ifdef YYSTYPE +#undef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +#endif +#ifndef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +typedef union +{ + char * cval; + int ival; + double dval; +} YYSTYPE; +#endif /* !YYSTYPE_IS_DECLARED */ +extern YYSTYPE ok_syntax1_lval; diff --git a/contrib/byacc/test/yacc/pure_calc.error b/contrib/byacc/test/yacc/pure_calc.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/pure_calc.error diff --git a/contrib/byacc/test/yacc/pure_calc.output b/contrib/byacc/test/yacc/pure_calc.output new file mode 100644 index 000000000000..3aed47511c93 --- /dev/null +++ b/contrib/byacc/test/yacc/pure_calc.output @@ -0,0 +1,461 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr '+' expr + 8 | expr '-' expr + 9 | expr '*' expr + 10 | expr '/' expr + 11 | expr '%' expr + 12 | expr '&' expr + 13 | expr '|' expr + 14 | '-' expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + DIGIT shift 3 + LETTER shift 4 + '-' shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + number : DIGIT . (17) + + . reduce 17 + + +state 4 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 11 + '|' reduce 15 + '&' reduce 15 + '+' reduce 15 + '-' reduce 15 + '*' reduce 15 + '/' reduce 15 + '%' reduce 15 + '\n' reduce 15 + + +state 5 + expr : '-' . expr (14) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 13 + number goto 9 + + +state 6 + expr : '(' . expr ')' (6) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + '|' reduce 16 + '&' reduce 16 + '+' reduce 16 + '-' reduce 16 + '*' reduce 16 + '/' reduce 16 + '%' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + stat : LETTER '=' . expr (5) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 12 + expr : LETTER . (15) + + . reduce 15 + + +state 13 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : '-' expr . (14) + + . reduce 14 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr '|' . expr (13) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr '&' . expr (12) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr '+' . expr (7) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr '-' . expr (8) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr '*' . expr (9) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr '/' . expr (10) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '%' . expr (11) + + DIGIT shift 3 + LETTER shift 12 + '-' shift 5 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '|' shift 16 + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +state 26 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + '&' shift 17 + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +state 27 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr '&' expr . (12) + expr : expr . '|' expr (13) + + '+' shift 18 + '-' shift 19 + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 12 + '&' reduce 12 + '\n' reduce 12 + ')' reduce 12 + + +state 28 + expr : expr . '+' expr (7) + expr : expr '+' expr . (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 7 + '&' reduce 7 + '+' reduce 7 + '-' reduce 7 + '\n' reduce 7 + ')' reduce 7 + + +state 29 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr '-' expr . (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + '*' shift 20 + '/' shift 21 + '%' shift 22 + '|' reduce 8 + '&' reduce 8 + '+' reduce 8 + '-' reduce 8 + '\n' reduce 8 + ')' reduce 8 + + +state 30 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr '*' expr . (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 9 + + +state 31 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr '/' expr . (10) + expr : expr . '%' expr (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 10 + + +state 32 + expr : expr . '+' expr (7) + expr : expr . '-' expr (8) + expr : expr . '*' expr (9) + expr : expr . '/' expr (10) + expr : expr . '%' expr (11) + expr : expr '%' expr . (11) + expr : expr . '&' expr (12) + expr : expr . '|' expr (13) + + . reduce 11 + + +16 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/pure_calc.tab.c b/contrib/byacc/test/yacc/pure_calc.tab.c new file mode 100644 index 000000000000..911db408e31a --- /dev/null +++ b/contrib/byacc/test/yacc/pure_calc.tab.c @@ -0,0 +1,688 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse calc_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex calc_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror calc_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar calc_char +#endif /* yychar */ + +#ifndef yyval +#define yyval calc_val +#endif /* yyval */ + +#ifndef yylval +#define yylval calc_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug calc_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs calc_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag calc_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs calc_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen calc_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred calc_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto calc_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex calc_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex calc_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex calc_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable calc_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck calc_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname calc_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule calc_rule +#endif /* yyrule */ +#define YYPREFIX "calc_" + +#define YYPURE 1 + +#line 2 "pure_calc.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +#ifdef YYBISON +#define YYSTYPE int +#define YYLEX_PARAM &yylval +#define YYLEX_DECL() yylex(YYSTYPE *yylval) +#define YYERROR_DECL() yyerror(const char *s) +int YYLEX_DECL(); +static void YYERROR_DECL(); +#endif + +#line 117 "pure_calc.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# ifdef YYLEX_PARAM_TYPE +# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) +# else +# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) +# endif +# define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(YYSTYPE *yylval) +# define YYLEX yylex(&yylval) +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define DIGIT 257 +#define LETTER 258 +#define UMINUS 259 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT calc_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT calc_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT calc_defred[] = { 1, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, + 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, + 10, 11, +}; +static const YYINT calc_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT calc_sindex[] = { 0, + -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, + -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, + -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, + 0, 0, +}; +static const YYINT calc_rindex[] = { 0, + 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, + 0, 0, +}; +static const YYINT calc_gindex[] = { 0, + 0, 65, 0, +}; +#define YYTABLESIZE 220 +static const YYINT calc_table[] = { 6, + 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, + 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, + 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, + 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, + 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, + 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, + 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, + 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, + 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, + 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, + 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, +}; +static const YYINT calc_check[] = { 40, + 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, + 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, + -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, + -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, + -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, + 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, + -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, + 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, + 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, + -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, + -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, + -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, + -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, + -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 259 +#define YYUNDFTOKEN 265 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const calc_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", +}; +static const char *const calc_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr '+' expr", +"expr : expr '-' expr", +"expr : expr '*' expr", +"expr : expr '/' expr", +"expr : expr '%' expr", +"expr : expr '&' expr", +"expr : expr '|' expr", +"expr : '-' expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +#line 72 "pure_calc.y" + /* start of programs */ + +#ifdef YYBYACC +static int YYLEX_DECL(); +#endif + +int +main (void) +{ + while(!feof(stdin)) { + yyparse(); + } + return 0; +} + +static void +YYERROR_DECL() +{ + fprintf(stderr, "%s\n", s); +} + +int +YYLEX_DECL() +{ + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + *yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + *yylval = c - '0'; + return ( DIGIT ); + } + return( c ); +} +#line 361 "pure_calc.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yyerrflag; + int yychar; + YYSTYPE yyval; + YYSTYPE yylval; + + /* variables for the parser stack */ + YYSTACKDATA yystack; + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 34 "pure_calc.y" + { yyerrok ; } +break; +case 4: +#line 38 "pure_calc.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 40 "pure_calc.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 44 "pure_calc.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 46 "pure_calc.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 48 "pure_calc.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 50 "pure_calc.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 52 "pure_calc.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 54 "pure_calc.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 56 "pure_calc.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 58 "pure_calc.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 60 "pure_calc.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 62 "pure_calc.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 67 "pure_calc.y" + { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 69 "pure_calc.y" + { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 630 "pure_calc.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/pure_calc.tab.h b/contrib/byacc/test/yacc/pure_calc.tab.h new file mode 100644 index 000000000000..19211182d6b3 --- /dev/null +++ b/contrib/byacc/test/yacc/pure_calc.tab.h @@ -0,0 +1,3 @@ +#define DIGIT 257 +#define LETTER 258 +#define UMINUS 259 diff --git a/contrib/byacc/test/yacc/pure_error.error b/contrib/byacc/test/yacc/pure_error.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/pure_error.error diff --git a/contrib/byacc/test/yacc/pure_error.output b/contrib/byacc/test/yacc/pure_error.output new file mode 100644 index 000000000000..0c4db6225e24 --- /dev/null +++ b/contrib/byacc/test/yacc/pure_error.output @@ -0,0 +1,27 @@ + 0 $accept : S $end + + 1 S : error + +state 0 + $accept : . S $end (0) + + error shift 1 + . error + + S goto 2 + + +state 1 + S : error . (1) + + . reduce 1 + + +state 2 + $accept : S . $end (0) + + $end accept + + +2 terminals, 2 nonterminals +2 grammar rules, 3 states diff --git a/contrib/byacc/test/yacc/pure_error.tab.c b/contrib/byacc/test/yacc/pure_error.tab.c new file mode 100644 index 000000000000..0184e924fabd --- /dev/null +++ b/contrib/byacc/test/yacc/pure_error.tab.c @@ -0,0 +1,524 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse error_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex error_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror error_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar error_char +#endif /* yychar */ + +#ifndef yyval +#define yyval error_val +#endif /* yyval */ + +#ifndef yylval +#define yylval error_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug error_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs error_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag error_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs error_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen error_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred error_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto error_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex error_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex error_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex error_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable error_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck error_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname error_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule error_rule +#endif /* yyrule */ +#define YYPREFIX "error_" + +#define YYPURE 1 + +#line 2 "pure_error.y" + +#ifdef YYBISON +#define YYSTYPE int +#define YYLEX_PARAM &yylval +#define YYLEX_DECL() yylex(YYSTYPE *yylval) +#define YYERROR_DECL() yyerror(const char *s) +int YYLEX_DECL(); +static void YYERROR_DECL(); +#endif + +#line 112 "pure_error.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# ifdef YYLEX_PARAM_TYPE +# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) +# else +# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) +# endif +# define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(YYSTYPE *yylval) +# define YYLEX yylex(&yylval) +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT error_lhs[] = { -1, + 0, +}; +static const YYINT error_len[] = { 2, + 1, +}; +static const YYINT error_defred[] = { 0, + 1, 0, +}; +static const YYINT error_dgoto[] = { 2, +}; +static const YYINT error_sindex[] = { -256, + 0, 0, +}; +static const YYINT error_rindex[] = { 0, + 0, 0, +}; +static const YYINT error_gindex[] = { 0, +}; +#define YYTABLESIZE 0 +static const YYINT error_table[] = { 1, +}; +static const YYINT error_check[] = { 256, +}; +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 256 +#define YYUNDFTOKEN 259 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const error_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", +}; +static const char *const error_rule[] = { +"$accept : S", +"S : error", + +}; +#endif + +int yydebug; +int yynerrs; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +#line 17 "pure_error.y" + +#include <stdio.h> + +#ifdef YYBYACC +extern int YYLEX_DECL(); +#endif + +int +main(void) +{ + printf("yyparse() = %d\n", yyparse()); + return 0; +} + +int +yylex(YYSTYPE *value) +{ + return value ? 0 : -1; +} + +static void +yyerror(const char* s) +{ + printf("%s\n", s); +} +#line 258 "pure_error.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yyerrflag; + int yychar; + YYSTYPE yyval; + YYSTYPE yylval; + + /* variables for the parser stack */ + YYSTACKDATA yystack; + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/pure_error.tab.h b/contrib/byacc/test/yacc/pure_error.tab.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/pure_error.tab.h diff --git a/contrib/byacc/test/yacc/quote_calc-s.error b/contrib/byacc/test/yacc/quote_calc-s.error new file mode 100644 index 000000000000..729d01c0abba --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc-s.error @@ -0,0 +1 @@ +YACC: 54 shift/reduce conflicts. diff --git a/contrib/byacc/test/yacc/quote_calc-s.output b/contrib/byacc/test/yacc/quote_calc-s.output new file mode 100644 index 000000000000..0306652bfaa1 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc-s.output @@ -0,0 +1,557 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr OP_ADD expr + 8 | expr OP_SUB expr + 9 | expr OP_MUL expr + 10 | expr OP_DIV expr + 11 | expr OP_MOD expr + 12 | expr OP_AND expr + 13 | expr '|' expr + 14 | OP_SUB expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + expr : OP_SUB . expr (14) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 12 + number goto 9 + + +state 4 + number : DIGIT . (17) + + . reduce 17 + + +state 5 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 13 + OP_ADD reduce 15 + OP_SUB reduce 15 + OP_MUL reduce 15 + OP_DIV reduce 15 + OP_MOD reduce 15 + OP_AND reduce 15 + '|' reduce 15 + '\n' reduce 15 + + +state 6 + expr : '(' . expr ')' (6) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + OP_ADD reduce 16 + OP_SUB reduce 16 + OP_MUL reduce 16 + OP_DIV reduce 16 + OP_MOD reduce 16 + OP_AND reduce 16 + '|' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + expr : LETTER . (15) + + . reduce 15 + + +12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD +12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB +12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL +12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV +12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD +12: shift/reduce conflict (shift 21, reduce 14) on OP_AND +state 12 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + expr : OP_SUB expr . (14) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' reduce 14 + '\n' reduce 14 + ')' reduce 14 + + +state 13 + stat : LETTER '=' . expr (5) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr OP_ADD . expr (7) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr OP_SUB . expr (8) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr OP_MUL . expr (9) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr OP_DIV . expr (10) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr OP_MOD . expr (11) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr OP_AND . expr (12) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '|' . expr (13) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD +26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB +26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL +26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV +26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD +26: shift/reduce conflict (shift 21, reduce 7) on OP_AND +26: shift/reduce conflict (shift 22, reduce 7) on '|' +state 26 + expr : expr . OP_ADD expr (7) + expr : expr OP_ADD expr . (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 7 + ')' reduce 7 + + +27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD +27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB +27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL +27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV +27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD +27: shift/reduce conflict (shift 21, reduce 8) on OP_AND +27: shift/reduce conflict (shift 22, reduce 8) on '|' +state 27 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr OP_SUB expr . (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 8 + ')' reduce 8 + + +28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD +28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB +28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL +28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV +28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD +28: shift/reduce conflict (shift 21, reduce 9) on OP_AND +28: shift/reduce conflict (shift 22, reduce 9) on '|' +state 28 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr OP_MUL expr . (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 9 + ')' reduce 9 + + +29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD +29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB +29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL +29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV +29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD +29: shift/reduce conflict (shift 21, reduce 10) on OP_AND +29: shift/reduce conflict (shift 22, reduce 10) on '|' +state 29 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr OP_DIV expr . (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 10 + ')' reduce 10 + + +30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD +30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB +30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL +30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV +30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD +30: shift/reduce conflict (shift 21, reduce 11) on OP_AND +30: shift/reduce conflict (shift 22, reduce 11) on '|' +state 30 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr OP_MOD expr . (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 11 + ')' reduce 11 + + +31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD +31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB +31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL +31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV +31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD +31: shift/reduce conflict (shift 21, reduce 12) on OP_AND +31: shift/reduce conflict (shift 22, reduce 12) on '|' +state 31 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr OP_AND expr . (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 12 + ')' reduce 12 + + +32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD +32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB +32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL +32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV +32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD +32: shift/reduce conflict (shift 21, reduce 13) on OP_AND +state 32 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +State 12 contains 6 shift/reduce conflicts. +State 26 contains 7 shift/reduce conflicts. +State 27 contains 7 shift/reduce conflicts. +State 28 contains 7 shift/reduce conflicts. +State 29 contains 7 shift/reduce conflicts. +State 30 contains 7 shift/reduce conflicts. +State 31 contains 7 shift/reduce conflicts. +State 32 contains 6 shift/reduce conflicts. + + +28 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/quote_calc-s.tab.c b/contrib/byacc/test/yacc/quote_calc-s.tab.c new file mode 100644 index 000000000000..9d4d7bd5835d --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc-s.tab.c @@ -0,0 +1,689 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse quote_calc_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex quote_calc_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror quote_calc_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar quote_calc_char +#endif /* yychar */ + +#ifndef yyval +#define yyval quote_calc_val +#endif /* yyval */ + +#ifndef yylval +#define yylval quote_calc_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug quote_calc_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs quote_calc_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag quote_calc_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs quote_calc_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen quote_calc_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred quote_calc_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto quote_calc_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex quote_calc_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex quote_calc_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex quote_calc_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable quote_calc_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck quote_calc_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname quote_calc_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule quote_calc_rule +#endif /* yyrule */ +#define YYPREFIX "quote_calc_" + +#define YYPURE 0 + +#line 2 "quote_calc.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +int yylex(void); +static void yyerror(const char *s); + +#line 111 "quote_calc-s.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT quote_calc_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT quote_calc_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT quote_calc_defred[] = { 1, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, + 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, + 0, 0, +}; +static const YYINT quote_calc_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT quote_calc_sindex[] = { 0, + -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, + 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, + -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, + -121, -243, +}; +static const YYINT quote_calc_rindex[] = { 0, + 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, + 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, + 3, -4, +}; +static const YYINT quote_calc_gindex[] = { 0, + 0, 42, 0, +}; +#define YYTABLESIZE 258 +static const YYINT quote_calc_table[] = { 16, + 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, + 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, + 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, + 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, + 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, + 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, + 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, + 16, 15, 16, 15, 16, 15, 16, 15, +}; +static const YYINT quote_calc_check[] = { 10, + 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, + 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, + 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, + 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, + -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, + -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, + 19, 20, 21, 22, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 124, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, + -1, 263, -1, 265, -1, 267, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, + 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, + 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, + 261, 261, 263, 263, 265, 265, 267, 267, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 271 +#define YYUNDFTOKEN 277 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const quote_calc_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", +"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0, +0,0,"illegal-symbol", +}; +static const char *const quote_calc_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr OP_ADD expr", +"expr : expr OP_SUB expr", +"expr : expr OP_MUL expr", +"expr : expr OP_DIV expr", +"expr : expr OP_MOD expr", +"expr : expr OP_AND expr", +"expr : expr '|' expr", +"expr : OP_SUB expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 73 "quote_calc.y" + /* start of programs */ + +int +main (void) +{ + while(!feof(stdin)) { + yyparse(); + } + return 0; +} + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) { + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + yylval = c - '0'; + return ( DIGIT ); + } + return( c ); +} +#line 369 "quote_calc-s.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 35 "quote_calc.y" + { yyerrok ; } +break; +case 4: +#line 39 "quote_calc.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 41 "quote_calc.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 45 "quote_calc.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 47 "quote_calc.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 49 "quote_calc.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 51 "quote_calc.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 53 "quote_calc.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 55 "quote_calc.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 57 "quote_calc.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 59 "quote_calc.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 61 "quote_calc.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 63 "quote_calc.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 68 "quote_calc.y" + { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 70 "quote_calc.y" + { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 631 "quote_calc-s.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/quote_calc-s.tab.h b/contrib/byacc/test/yacc/quote_calc-s.tab.h new file mode 100644 index 000000000000..1a4657903411 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc-s.tab.h @@ -0,0 +1,9 @@ +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 diff --git a/contrib/byacc/test/yacc/quote_calc.error b/contrib/byacc/test/yacc/quote_calc.error new file mode 100644 index 000000000000..729d01c0abba --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc.error @@ -0,0 +1 @@ +YACC: 54 shift/reduce conflicts. diff --git a/contrib/byacc/test/yacc/quote_calc.output b/contrib/byacc/test/yacc/quote_calc.output new file mode 100644 index 000000000000..0306652bfaa1 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc.output @@ -0,0 +1,557 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr OP_ADD expr + 8 | expr OP_SUB expr + 9 | expr OP_MUL expr + 10 | expr OP_DIV expr + 11 | expr OP_MOD expr + 12 | expr OP_AND expr + 13 | expr '|' expr + 14 | OP_SUB expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + expr : OP_SUB . expr (14) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 12 + number goto 9 + + +state 4 + number : DIGIT . (17) + + . reduce 17 + + +state 5 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 13 + OP_ADD reduce 15 + OP_SUB reduce 15 + OP_MUL reduce 15 + OP_DIV reduce 15 + OP_MOD reduce 15 + OP_AND reduce 15 + '|' reduce 15 + '\n' reduce 15 + + +state 6 + expr : '(' . expr ')' (6) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + OP_ADD reduce 16 + OP_SUB reduce 16 + OP_MUL reduce 16 + OP_DIV reduce 16 + OP_MOD reduce 16 + OP_AND reduce 16 + '|' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + expr : LETTER . (15) + + . reduce 15 + + +12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD +12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB +12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL +12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV +12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD +12: shift/reduce conflict (shift 21, reduce 14) on OP_AND +state 12 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + expr : OP_SUB expr . (14) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' reduce 14 + '\n' reduce 14 + ')' reduce 14 + + +state 13 + stat : LETTER '=' . expr (5) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr OP_ADD . expr (7) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr OP_SUB . expr (8) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr OP_MUL . expr (9) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr OP_DIV . expr (10) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr OP_MOD . expr (11) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr OP_AND . expr (12) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '|' . expr (13) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD +26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB +26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL +26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV +26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD +26: shift/reduce conflict (shift 21, reduce 7) on OP_AND +26: shift/reduce conflict (shift 22, reduce 7) on '|' +state 26 + expr : expr . OP_ADD expr (7) + expr : expr OP_ADD expr . (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 7 + ')' reduce 7 + + +27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD +27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB +27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL +27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV +27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD +27: shift/reduce conflict (shift 21, reduce 8) on OP_AND +27: shift/reduce conflict (shift 22, reduce 8) on '|' +state 27 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr OP_SUB expr . (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 8 + ')' reduce 8 + + +28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD +28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB +28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL +28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV +28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD +28: shift/reduce conflict (shift 21, reduce 9) on OP_AND +28: shift/reduce conflict (shift 22, reduce 9) on '|' +state 28 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr OP_MUL expr . (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 9 + ')' reduce 9 + + +29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD +29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB +29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL +29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV +29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD +29: shift/reduce conflict (shift 21, reduce 10) on OP_AND +29: shift/reduce conflict (shift 22, reduce 10) on '|' +state 29 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr OP_DIV expr . (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 10 + ')' reduce 10 + + +30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD +30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB +30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL +30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV +30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD +30: shift/reduce conflict (shift 21, reduce 11) on OP_AND +30: shift/reduce conflict (shift 22, reduce 11) on '|' +state 30 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr OP_MOD expr . (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 11 + ')' reduce 11 + + +31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD +31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB +31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL +31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV +31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD +31: shift/reduce conflict (shift 21, reduce 12) on OP_AND +31: shift/reduce conflict (shift 22, reduce 12) on '|' +state 31 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr OP_AND expr . (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 12 + ')' reduce 12 + + +32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD +32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB +32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL +32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV +32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD +32: shift/reduce conflict (shift 21, reduce 13) on OP_AND +state 32 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +State 12 contains 6 shift/reduce conflicts. +State 26 contains 7 shift/reduce conflicts. +State 27 contains 7 shift/reduce conflicts. +State 28 contains 7 shift/reduce conflicts. +State 29 contains 7 shift/reduce conflicts. +State 30 contains 7 shift/reduce conflicts. +State 31 contains 7 shift/reduce conflicts. +State 32 contains 6 shift/reduce conflicts. + + +28 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/quote_calc.tab.c b/contrib/byacc/test/yacc/quote_calc.tab.c new file mode 100644 index 000000000000..affdbe56db35 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc.tab.c @@ -0,0 +1,695 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse quote_calc_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex quote_calc_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror quote_calc_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar quote_calc_char +#endif /* yychar */ + +#ifndef yyval +#define yyval quote_calc_val +#endif /* yyval */ + +#ifndef yylval +#define yylval quote_calc_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug quote_calc_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs quote_calc_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag quote_calc_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs quote_calc_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen quote_calc_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred quote_calc_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto quote_calc_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex quote_calc_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex quote_calc_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex quote_calc_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable quote_calc_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck quote_calc_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname quote_calc_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule quote_calc_rule +#endif /* yyrule */ +#define YYPREFIX "quote_calc_" + +#define YYPURE 0 + +#line 2 "quote_calc.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +int yylex(void); +static void yyerror(const char *s); + +#line 111 "quote_calc.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define OP_ADD 257 +#define ADD 258 +#define OP_SUB 259 +#define SUB 260 +#define OP_MUL 261 +#define MUL 262 +#define OP_DIV 263 +#define DIV 264 +#define OP_MOD 265 +#define MOD 266 +#define OP_AND 267 +#define AND 268 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT quote_calc_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT quote_calc_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT quote_calc_defred[] = { 1, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, + 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, + 0, 0, +}; +static const YYINT quote_calc_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT quote_calc_sindex[] = { 0, + -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, + 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, + -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, + -121, -243, +}; +static const YYINT quote_calc_rindex[] = { 0, + 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, + 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, + 3, -4, +}; +static const YYINT quote_calc_gindex[] = { 0, + 0, 42, 0, +}; +#define YYTABLESIZE 258 +static const YYINT quote_calc_table[] = { 16, + 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, + 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, + 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, + 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, + 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, + 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, + 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, + 16, 15, 16, 15, 16, 15, 16, 15, +}; +static const YYINT quote_calc_check[] = { 10, + 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, + 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, + 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, + 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, + -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, + -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, + 19, 20, 21, 22, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 124, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, + -1, 263, -1, 265, -1, 267, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, + 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, + 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, + 261, 261, 263, 263, 265, 265, 267, 267, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 271 +#define YYUNDFTOKEN 277 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const quote_calc_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", +"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0, +0,0,"illegal-symbol", +}; +static const char *const quote_calc_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr OP_ADD expr", +"expr : expr OP_SUB expr", +"expr : expr OP_MUL expr", +"expr : expr OP_DIV expr", +"expr : expr OP_MOD expr", +"expr : expr OP_AND expr", +"expr : expr '|' expr", +"expr : OP_SUB expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 73 "quote_calc.y" + /* start of programs */ + +int +main (void) +{ + while(!feof(stdin)) { + yyparse(); + } + return 0; +} + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) { + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + yylval = c - '0'; + return ( DIGIT ); + } + return( c ); +} +#line 375 "quote_calc.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 35 "quote_calc.y" + { yyerrok ; } +break; +case 4: +#line 39 "quote_calc.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 41 "quote_calc.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 45 "quote_calc.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 47 "quote_calc.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 49 "quote_calc.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 51 "quote_calc.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 53 "quote_calc.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 55 "quote_calc.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 57 "quote_calc.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 59 "quote_calc.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 61 "quote_calc.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 63 "quote_calc.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 68 "quote_calc.y" + { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 70 "quote_calc.y" + { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 637 "quote_calc.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/quote_calc.tab.h b/contrib/byacc/test/yacc/quote_calc.tab.h new file mode 100644 index 000000000000..498eff210dbe --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc.tab.h @@ -0,0 +1,15 @@ +#define OP_ADD 257 +#define ADD 258 +#define OP_SUB 259 +#define SUB 260 +#define OP_MUL 261 +#define MUL 262 +#define OP_DIV 263 +#define DIV 264 +#define OP_MOD 265 +#define MOD 266 +#define OP_AND 267 +#define AND 268 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 diff --git a/contrib/byacc/test/yacc/quote_calc2-s.error b/contrib/byacc/test/yacc/quote_calc2-s.error new file mode 100644 index 000000000000..729d01c0abba --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc2-s.error @@ -0,0 +1 @@ +YACC: 54 shift/reduce conflicts. diff --git a/contrib/byacc/test/yacc/quote_calc2-s.output b/contrib/byacc/test/yacc/quote_calc2-s.output new file mode 100644 index 000000000000..ed28ae2f21c0 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc2-s.output @@ -0,0 +1,557 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr "ADD" expr + 8 | expr "SUB" expr + 9 | expr "MUL" expr + 10 | expr "DIV" expr + 11 | expr "MOD" expr + 12 | expr "AND" expr + 13 | expr '|' expr + 14 | "SUB" expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + expr : "SUB" . expr (14) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 12 + number goto 9 + + +state 4 + number : DIGIT . (17) + + . reduce 17 + + +state 5 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 13 + "ADD" reduce 15 + "SUB" reduce 15 + "MUL" reduce 15 + "DIV" reduce 15 + "MOD" reduce 15 + "AND" reduce 15 + '|' reduce 15 + '\n' reduce 15 + + +state 6 + expr : '(' . expr ')' (6) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + "ADD" reduce 16 + "SUB" reduce 16 + "MUL" reduce 16 + "DIV" reduce 16 + "MOD" reduce 16 + "AND" reduce 16 + '|' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + expr : LETTER . (15) + + . reduce 15 + + +12: shift/reduce conflict (shift 16, reduce 14) on "ADD" +12: shift/reduce conflict (shift 17, reduce 14) on "SUB" +12: shift/reduce conflict (shift 18, reduce 14) on "MUL" +12: shift/reduce conflict (shift 19, reduce 14) on "DIV" +12: shift/reduce conflict (shift 20, reduce 14) on "MOD" +12: shift/reduce conflict (shift 21, reduce 14) on "AND" +state 12 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + expr : "SUB" expr . (14) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' reduce 14 + '\n' reduce 14 + ')' reduce 14 + + +state 13 + stat : LETTER '=' . expr (5) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr "ADD" . expr (7) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr "SUB" . expr (8) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr "MUL" . expr (9) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr "DIV" . expr (10) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr "MOD" . expr (11) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr "AND" . expr (12) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '|' . expr (13) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +26: shift/reduce conflict (shift 16, reduce 7) on "ADD" +26: shift/reduce conflict (shift 17, reduce 7) on "SUB" +26: shift/reduce conflict (shift 18, reduce 7) on "MUL" +26: shift/reduce conflict (shift 19, reduce 7) on "DIV" +26: shift/reduce conflict (shift 20, reduce 7) on "MOD" +26: shift/reduce conflict (shift 21, reduce 7) on "AND" +26: shift/reduce conflict (shift 22, reduce 7) on '|' +state 26 + expr : expr . "ADD" expr (7) + expr : expr "ADD" expr . (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 7 + ')' reduce 7 + + +27: shift/reduce conflict (shift 16, reduce 8) on "ADD" +27: shift/reduce conflict (shift 17, reduce 8) on "SUB" +27: shift/reduce conflict (shift 18, reduce 8) on "MUL" +27: shift/reduce conflict (shift 19, reduce 8) on "DIV" +27: shift/reduce conflict (shift 20, reduce 8) on "MOD" +27: shift/reduce conflict (shift 21, reduce 8) on "AND" +27: shift/reduce conflict (shift 22, reduce 8) on '|' +state 27 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr "SUB" expr . (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 8 + ')' reduce 8 + + +28: shift/reduce conflict (shift 16, reduce 9) on "ADD" +28: shift/reduce conflict (shift 17, reduce 9) on "SUB" +28: shift/reduce conflict (shift 18, reduce 9) on "MUL" +28: shift/reduce conflict (shift 19, reduce 9) on "DIV" +28: shift/reduce conflict (shift 20, reduce 9) on "MOD" +28: shift/reduce conflict (shift 21, reduce 9) on "AND" +28: shift/reduce conflict (shift 22, reduce 9) on '|' +state 28 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr "MUL" expr . (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 9 + ')' reduce 9 + + +29: shift/reduce conflict (shift 16, reduce 10) on "ADD" +29: shift/reduce conflict (shift 17, reduce 10) on "SUB" +29: shift/reduce conflict (shift 18, reduce 10) on "MUL" +29: shift/reduce conflict (shift 19, reduce 10) on "DIV" +29: shift/reduce conflict (shift 20, reduce 10) on "MOD" +29: shift/reduce conflict (shift 21, reduce 10) on "AND" +29: shift/reduce conflict (shift 22, reduce 10) on '|' +state 29 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr "DIV" expr . (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 10 + ')' reduce 10 + + +30: shift/reduce conflict (shift 16, reduce 11) on "ADD" +30: shift/reduce conflict (shift 17, reduce 11) on "SUB" +30: shift/reduce conflict (shift 18, reduce 11) on "MUL" +30: shift/reduce conflict (shift 19, reduce 11) on "DIV" +30: shift/reduce conflict (shift 20, reduce 11) on "MOD" +30: shift/reduce conflict (shift 21, reduce 11) on "AND" +30: shift/reduce conflict (shift 22, reduce 11) on '|' +state 30 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr "MOD" expr . (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 11 + ')' reduce 11 + + +31: shift/reduce conflict (shift 16, reduce 12) on "ADD" +31: shift/reduce conflict (shift 17, reduce 12) on "SUB" +31: shift/reduce conflict (shift 18, reduce 12) on "MUL" +31: shift/reduce conflict (shift 19, reduce 12) on "DIV" +31: shift/reduce conflict (shift 20, reduce 12) on "MOD" +31: shift/reduce conflict (shift 21, reduce 12) on "AND" +31: shift/reduce conflict (shift 22, reduce 12) on '|' +state 31 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr "AND" expr . (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 12 + ')' reduce 12 + + +32: shift/reduce conflict (shift 16, reduce 13) on "ADD" +32: shift/reduce conflict (shift 17, reduce 13) on "SUB" +32: shift/reduce conflict (shift 18, reduce 13) on "MUL" +32: shift/reduce conflict (shift 19, reduce 13) on "DIV" +32: shift/reduce conflict (shift 20, reduce 13) on "MOD" +32: shift/reduce conflict (shift 21, reduce 13) on "AND" +state 32 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +State 12 contains 6 shift/reduce conflicts. +State 26 contains 7 shift/reduce conflicts. +State 27 contains 7 shift/reduce conflicts. +State 28 contains 7 shift/reduce conflicts. +State 29 contains 7 shift/reduce conflicts. +State 30 contains 7 shift/reduce conflicts. +State 31 contains 7 shift/reduce conflicts. +State 32 contains 6 shift/reduce conflicts. + + +28 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/quote_calc2-s.tab.c b/contrib/byacc/test/yacc/quote_calc2-s.tab.c new file mode 100644 index 000000000000..47b8fd0d3b15 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc2-s.tab.c @@ -0,0 +1,689 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse quote_calc2_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex quote_calc2_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror quote_calc2_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar quote_calc2_char +#endif /* yychar */ + +#ifndef yyval +#define yyval quote_calc2_val +#endif /* yyval */ + +#ifndef yylval +#define yylval quote_calc2_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug quote_calc2_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs quote_calc2_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag quote_calc2_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs quote_calc2_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen quote_calc2_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred quote_calc2_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto quote_calc2_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex quote_calc2_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex quote_calc2_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex quote_calc2_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable quote_calc2_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck quote_calc2_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname quote_calc2_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule quote_calc2_rule +#endif /* yyrule */ +#define YYPREFIX "quote_calc2_" + +#define YYPURE 0 + +#line 2 "quote_calc2.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +int yylex(void); +static void yyerror(const char *s); + +#line 111 "quote_calc2-s.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT quote_calc2_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT quote_calc2_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT quote_calc2_defred[] = { 1, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, + 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, + 0, 0, +}; +static const YYINT quote_calc2_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT quote_calc2_sindex[] = { 0, + -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, + 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, + -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, + -121, -243, +}; +static const YYINT quote_calc2_rindex[] = { 0, + 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, + 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, + 3, -4, +}; +static const YYINT quote_calc2_gindex[] = { 0, + 0, 42, 0, +}; +#define YYTABLESIZE 259 +static const YYINT quote_calc2_table[] = { 16, + 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, + 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, + 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, + 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, + 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, + 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, + 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, + 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, + 15, 16, 15, 16, 15, 16, 15, 16, 15, +}; +static const YYINT quote_calc2_check[] = { 10, + 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, + 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, + 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, + 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, + -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, + -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, + 19, 20, 21, 22, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, + 262, -1, 264, -1, 266, -1, 268, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, + 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, + 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, + 260, 262, 262, 264, 264, 266, 266, 268, 268, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 271 +#define YYUNDFTOKEN 277 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const quote_calc2_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", +"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0, +0,0,"illegal-symbol", +}; +static const char *const quote_calc2_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr \"ADD\" expr", +"expr : expr \"SUB\" expr", +"expr : expr \"MUL\" expr", +"expr : expr \"DIV\" expr", +"expr : expr \"MOD\" expr", +"expr : expr \"AND\" expr", +"expr : expr '|' expr", +"expr : \"SUB\" expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 73 "quote_calc2.y" + /* start of programs */ + +int +main (void) +{ + while(!feof(stdin)) { + yyparse(); + } + return 0; +} + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) { + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + yylval = c - '0'; + return ( DIGIT ); + } + return( c ); +} +#line 369 "quote_calc2-s.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 35 "quote_calc2.y" + { yyerrok ; } +break; +case 4: +#line 39 "quote_calc2.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 41 "quote_calc2.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 45 "quote_calc2.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 47 "quote_calc2.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 49 "quote_calc2.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 51 "quote_calc2.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 53 "quote_calc2.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 55 "quote_calc2.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 57 "quote_calc2.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 59 "quote_calc2.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 61 "quote_calc2.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 63 "quote_calc2.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 68 "quote_calc2.y" + { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 70 "quote_calc2.y" + { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 631 "quote_calc2-s.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/quote_calc2-s.tab.h b/contrib/byacc/test/yacc/quote_calc2-s.tab.h new file mode 100644 index 000000000000..1a4657903411 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc2-s.tab.h @@ -0,0 +1,9 @@ +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 diff --git a/contrib/byacc/test/yacc/quote_calc2.error b/contrib/byacc/test/yacc/quote_calc2.error new file mode 100644 index 000000000000..729d01c0abba --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc2.error @@ -0,0 +1 @@ +YACC: 54 shift/reduce conflicts. diff --git a/contrib/byacc/test/yacc/quote_calc2.output b/contrib/byacc/test/yacc/quote_calc2.output new file mode 100644 index 000000000000..ed28ae2f21c0 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc2.output @@ -0,0 +1,557 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr "ADD" expr + 8 | expr "SUB" expr + 9 | expr "MUL" expr + 10 | expr "DIV" expr + 11 | expr "MOD" expr + 12 | expr "AND" expr + 13 | expr '|' expr + 14 | "SUB" expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + expr : "SUB" . expr (14) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 12 + number goto 9 + + +state 4 + number : DIGIT . (17) + + . reduce 17 + + +state 5 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 13 + "ADD" reduce 15 + "SUB" reduce 15 + "MUL" reduce 15 + "DIV" reduce 15 + "MOD" reduce 15 + "AND" reduce 15 + '|' reduce 15 + '\n' reduce 15 + + +state 6 + expr : '(' . expr ')' (6) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + "ADD" reduce 16 + "SUB" reduce 16 + "MUL" reduce 16 + "DIV" reduce 16 + "MOD" reduce 16 + "AND" reduce 16 + '|' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + expr : LETTER . (15) + + . reduce 15 + + +12: shift/reduce conflict (shift 16, reduce 14) on "ADD" +12: shift/reduce conflict (shift 17, reduce 14) on "SUB" +12: shift/reduce conflict (shift 18, reduce 14) on "MUL" +12: shift/reduce conflict (shift 19, reduce 14) on "DIV" +12: shift/reduce conflict (shift 20, reduce 14) on "MOD" +12: shift/reduce conflict (shift 21, reduce 14) on "AND" +state 12 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + expr : "SUB" expr . (14) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' reduce 14 + '\n' reduce 14 + ')' reduce 14 + + +state 13 + stat : LETTER '=' . expr (5) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr "ADD" . expr (7) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr "SUB" . expr (8) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr "MUL" . expr (9) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr "DIV" . expr (10) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr "MOD" . expr (11) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr "AND" . expr (12) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '|' . expr (13) + + "SUB" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +26: shift/reduce conflict (shift 16, reduce 7) on "ADD" +26: shift/reduce conflict (shift 17, reduce 7) on "SUB" +26: shift/reduce conflict (shift 18, reduce 7) on "MUL" +26: shift/reduce conflict (shift 19, reduce 7) on "DIV" +26: shift/reduce conflict (shift 20, reduce 7) on "MOD" +26: shift/reduce conflict (shift 21, reduce 7) on "AND" +26: shift/reduce conflict (shift 22, reduce 7) on '|' +state 26 + expr : expr . "ADD" expr (7) + expr : expr "ADD" expr . (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 7 + ')' reduce 7 + + +27: shift/reduce conflict (shift 16, reduce 8) on "ADD" +27: shift/reduce conflict (shift 17, reduce 8) on "SUB" +27: shift/reduce conflict (shift 18, reduce 8) on "MUL" +27: shift/reduce conflict (shift 19, reduce 8) on "DIV" +27: shift/reduce conflict (shift 20, reduce 8) on "MOD" +27: shift/reduce conflict (shift 21, reduce 8) on "AND" +27: shift/reduce conflict (shift 22, reduce 8) on '|' +state 27 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr "SUB" expr . (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 8 + ')' reduce 8 + + +28: shift/reduce conflict (shift 16, reduce 9) on "ADD" +28: shift/reduce conflict (shift 17, reduce 9) on "SUB" +28: shift/reduce conflict (shift 18, reduce 9) on "MUL" +28: shift/reduce conflict (shift 19, reduce 9) on "DIV" +28: shift/reduce conflict (shift 20, reduce 9) on "MOD" +28: shift/reduce conflict (shift 21, reduce 9) on "AND" +28: shift/reduce conflict (shift 22, reduce 9) on '|' +state 28 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr "MUL" expr . (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 9 + ')' reduce 9 + + +29: shift/reduce conflict (shift 16, reduce 10) on "ADD" +29: shift/reduce conflict (shift 17, reduce 10) on "SUB" +29: shift/reduce conflict (shift 18, reduce 10) on "MUL" +29: shift/reduce conflict (shift 19, reduce 10) on "DIV" +29: shift/reduce conflict (shift 20, reduce 10) on "MOD" +29: shift/reduce conflict (shift 21, reduce 10) on "AND" +29: shift/reduce conflict (shift 22, reduce 10) on '|' +state 29 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr "DIV" expr . (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 10 + ')' reduce 10 + + +30: shift/reduce conflict (shift 16, reduce 11) on "ADD" +30: shift/reduce conflict (shift 17, reduce 11) on "SUB" +30: shift/reduce conflict (shift 18, reduce 11) on "MUL" +30: shift/reduce conflict (shift 19, reduce 11) on "DIV" +30: shift/reduce conflict (shift 20, reduce 11) on "MOD" +30: shift/reduce conflict (shift 21, reduce 11) on "AND" +30: shift/reduce conflict (shift 22, reduce 11) on '|' +state 30 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr "MOD" expr . (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 11 + ')' reduce 11 + + +31: shift/reduce conflict (shift 16, reduce 12) on "ADD" +31: shift/reduce conflict (shift 17, reduce 12) on "SUB" +31: shift/reduce conflict (shift 18, reduce 12) on "MUL" +31: shift/reduce conflict (shift 19, reduce 12) on "DIV" +31: shift/reduce conflict (shift 20, reduce 12) on "MOD" +31: shift/reduce conflict (shift 21, reduce 12) on "AND" +31: shift/reduce conflict (shift 22, reduce 12) on '|' +state 31 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr "AND" expr . (12) + expr : expr . '|' expr (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' shift 22 + '\n' reduce 12 + ')' reduce 12 + + +32: shift/reduce conflict (shift 16, reduce 13) on "ADD" +32: shift/reduce conflict (shift 17, reduce 13) on "SUB" +32: shift/reduce conflict (shift 18, reduce 13) on "MUL" +32: shift/reduce conflict (shift 19, reduce 13) on "DIV" +32: shift/reduce conflict (shift 20, reduce 13) on "MOD" +32: shift/reduce conflict (shift 21, reduce 13) on "AND" +state 32 + expr : expr . "ADD" expr (7) + expr : expr . "SUB" expr (8) + expr : expr . "MUL" expr (9) + expr : expr . "DIV" expr (10) + expr : expr . "MOD" expr (11) + expr : expr . "AND" expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + "ADD" shift 16 + "SUB" shift 17 + "MUL" shift 18 + "DIV" shift 19 + "MOD" shift 20 + "AND" shift 21 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +State 12 contains 6 shift/reduce conflicts. +State 26 contains 7 shift/reduce conflicts. +State 27 contains 7 shift/reduce conflicts. +State 28 contains 7 shift/reduce conflicts. +State 29 contains 7 shift/reduce conflicts. +State 30 contains 7 shift/reduce conflicts. +State 31 contains 7 shift/reduce conflicts. +State 32 contains 6 shift/reduce conflicts. + + +28 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/quote_calc2.tab.c b/contrib/byacc/test/yacc/quote_calc2.tab.c new file mode 100644 index 000000000000..cdf8171f02e4 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc2.tab.c @@ -0,0 +1,695 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse quote_calc2_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex quote_calc2_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror quote_calc2_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar quote_calc2_char +#endif /* yychar */ + +#ifndef yyval +#define yyval quote_calc2_val +#endif /* yyval */ + +#ifndef yylval +#define yylval quote_calc2_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug quote_calc2_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs quote_calc2_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag quote_calc2_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs quote_calc2_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen quote_calc2_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred quote_calc2_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto quote_calc2_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex quote_calc2_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex quote_calc2_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex quote_calc2_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable quote_calc2_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck quote_calc2_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname quote_calc2_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule quote_calc2_rule +#endif /* yyrule */ +#define YYPREFIX "quote_calc2_" + +#define YYPURE 0 + +#line 2 "quote_calc2.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +int yylex(void); +static void yyerror(const char *s); + +#line 111 "quote_calc2.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define OP_ADD 257 +#define ADD 258 +#define OP_SUB 259 +#define SUB 260 +#define OP_MUL 261 +#define MUL 262 +#define OP_DIV 263 +#define DIV 264 +#define OP_MOD 265 +#define MOD 266 +#define OP_AND 267 +#define AND 268 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT quote_calc2_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT quote_calc2_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT quote_calc2_defred[] = { 1, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, + 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, + 0, 0, +}; +static const YYINT quote_calc2_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT quote_calc2_sindex[] = { 0, + -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, + 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, + -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, + -121, -243, +}; +static const YYINT quote_calc2_rindex[] = { 0, + 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, + 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, + 3, -4, +}; +static const YYINT quote_calc2_gindex[] = { 0, + 0, 42, 0, +}; +#define YYTABLESIZE 259 +static const YYINT quote_calc2_table[] = { 16, + 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, + 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, + 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, + 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, + 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, + 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, + 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, + 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, + 15, 16, 15, 16, 15, 16, 15, 16, 15, +}; +static const YYINT quote_calc2_check[] = { 10, + 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, + 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, + 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, + 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, + -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, + -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, + 19, 20, 21, 22, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, + 262, -1, 264, -1, 266, -1, 268, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, + 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, + 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, + 260, 262, 262, 264, 264, 266, 266, 268, 268, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 271 +#define YYUNDFTOKEN 277 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const quote_calc2_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", +"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0, +0,0,"illegal-symbol", +}; +static const char *const quote_calc2_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr \"ADD\" expr", +"expr : expr \"SUB\" expr", +"expr : expr \"MUL\" expr", +"expr : expr \"DIV\" expr", +"expr : expr \"MOD\" expr", +"expr : expr \"AND\" expr", +"expr : expr '|' expr", +"expr : \"SUB\" expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 73 "quote_calc2.y" + /* start of programs */ + +int +main (void) +{ + while(!feof(stdin)) { + yyparse(); + } + return 0; +} + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) { + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + yylval = c - '0'; + return ( DIGIT ); + } + return( c ); +} +#line 375 "quote_calc2.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 35 "quote_calc2.y" + { yyerrok ; } +break; +case 4: +#line 39 "quote_calc2.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 41 "quote_calc2.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 45 "quote_calc2.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 47 "quote_calc2.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 49 "quote_calc2.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 51 "quote_calc2.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 53 "quote_calc2.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 55 "quote_calc2.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 57 "quote_calc2.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 59 "quote_calc2.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 61 "quote_calc2.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 63 "quote_calc2.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 68 "quote_calc2.y" + { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 70 "quote_calc2.y" + { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 637 "quote_calc2.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/quote_calc2.tab.h b/contrib/byacc/test/yacc/quote_calc2.tab.h new file mode 100644 index 000000000000..498eff210dbe --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc2.tab.h @@ -0,0 +1,15 @@ +#define OP_ADD 257 +#define ADD 258 +#define OP_SUB 259 +#define SUB 260 +#define OP_MUL 261 +#define MUL 262 +#define OP_DIV 263 +#define DIV 264 +#define OP_MOD 265 +#define MOD 266 +#define OP_AND 267 +#define AND 268 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 diff --git a/contrib/byacc/test/yacc/quote_calc3-s.error b/contrib/byacc/test/yacc/quote_calc3-s.error new file mode 100644 index 000000000000..729d01c0abba --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc3-s.error @@ -0,0 +1 @@ +YACC: 54 shift/reduce conflicts. diff --git a/contrib/byacc/test/yacc/quote_calc3-s.output b/contrib/byacc/test/yacc/quote_calc3-s.output new file mode 100644 index 000000000000..0306652bfaa1 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc3-s.output @@ -0,0 +1,557 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr OP_ADD expr + 8 | expr OP_SUB expr + 9 | expr OP_MUL expr + 10 | expr OP_DIV expr + 11 | expr OP_MOD expr + 12 | expr OP_AND expr + 13 | expr '|' expr + 14 | OP_SUB expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + expr : OP_SUB . expr (14) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 12 + number goto 9 + + +state 4 + number : DIGIT . (17) + + . reduce 17 + + +state 5 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 13 + OP_ADD reduce 15 + OP_SUB reduce 15 + OP_MUL reduce 15 + OP_DIV reduce 15 + OP_MOD reduce 15 + OP_AND reduce 15 + '|' reduce 15 + '\n' reduce 15 + + +state 6 + expr : '(' . expr ')' (6) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + OP_ADD reduce 16 + OP_SUB reduce 16 + OP_MUL reduce 16 + OP_DIV reduce 16 + OP_MOD reduce 16 + OP_AND reduce 16 + '|' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + expr : LETTER . (15) + + . reduce 15 + + +12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD +12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB +12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL +12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV +12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD +12: shift/reduce conflict (shift 21, reduce 14) on OP_AND +state 12 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + expr : OP_SUB expr . (14) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' reduce 14 + '\n' reduce 14 + ')' reduce 14 + + +state 13 + stat : LETTER '=' . expr (5) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr OP_ADD . expr (7) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr OP_SUB . expr (8) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr OP_MUL . expr (9) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr OP_DIV . expr (10) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr OP_MOD . expr (11) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr OP_AND . expr (12) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '|' . expr (13) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD +26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB +26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL +26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV +26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD +26: shift/reduce conflict (shift 21, reduce 7) on OP_AND +26: shift/reduce conflict (shift 22, reduce 7) on '|' +state 26 + expr : expr . OP_ADD expr (7) + expr : expr OP_ADD expr . (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 7 + ')' reduce 7 + + +27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD +27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB +27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL +27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV +27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD +27: shift/reduce conflict (shift 21, reduce 8) on OP_AND +27: shift/reduce conflict (shift 22, reduce 8) on '|' +state 27 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr OP_SUB expr . (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 8 + ')' reduce 8 + + +28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD +28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB +28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL +28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV +28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD +28: shift/reduce conflict (shift 21, reduce 9) on OP_AND +28: shift/reduce conflict (shift 22, reduce 9) on '|' +state 28 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr OP_MUL expr . (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 9 + ')' reduce 9 + + +29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD +29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB +29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL +29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV +29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD +29: shift/reduce conflict (shift 21, reduce 10) on OP_AND +29: shift/reduce conflict (shift 22, reduce 10) on '|' +state 29 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr OP_DIV expr . (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 10 + ')' reduce 10 + + +30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD +30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB +30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL +30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV +30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD +30: shift/reduce conflict (shift 21, reduce 11) on OP_AND +30: shift/reduce conflict (shift 22, reduce 11) on '|' +state 30 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr OP_MOD expr . (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 11 + ')' reduce 11 + + +31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD +31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB +31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL +31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV +31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD +31: shift/reduce conflict (shift 21, reduce 12) on OP_AND +31: shift/reduce conflict (shift 22, reduce 12) on '|' +state 31 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr OP_AND expr . (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 12 + ')' reduce 12 + + +32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD +32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB +32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL +32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV +32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD +32: shift/reduce conflict (shift 21, reduce 13) on OP_AND +state 32 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +State 12 contains 6 shift/reduce conflicts. +State 26 contains 7 shift/reduce conflicts. +State 27 contains 7 shift/reduce conflicts. +State 28 contains 7 shift/reduce conflicts. +State 29 contains 7 shift/reduce conflicts. +State 30 contains 7 shift/reduce conflicts. +State 31 contains 7 shift/reduce conflicts. +State 32 contains 6 shift/reduce conflicts. + + +28 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/quote_calc3-s.tab.c b/contrib/byacc/test/yacc/quote_calc3-s.tab.c new file mode 100644 index 000000000000..b91c1a14a022 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc3-s.tab.c @@ -0,0 +1,690 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse quote_calc3_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex quote_calc3_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror quote_calc3_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar quote_calc3_char +#endif /* yychar */ + +#ifndef yyval +#define yyval quote_calc3_val +#endif /* yyval */ + +#ifndef yylval +#define yylval quote_calc3_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug quote_calc3_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs quote_calc3_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag quote_calc3_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs quote_calc3_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen quote_calc3_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred quote_calc3_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto quote_calc3_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex quote_calc3_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex quote_calc3_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex quote_calc3_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable quote_calc3_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck quote_calc3_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname quote_calc3_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule quote_calc3_rule +#endif /* yyrule */ +#define YYPREFIX "quote_calc3_" + +#define YYPURE 0 + +#line 2 "quote_calc3.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +int yylex(void); +static void yyerror(const char *s); + +#line 111 "quote_calc3-s.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT quote_calc3_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT quote_calc3_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT quote_calc3_defred[] = { 1, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, + 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, + 0, 0, +}; +static const YYINT quote_calc3_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT quote_calc3_sindex[] = { 0, + -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, + 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, + -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, + -121, -243, +}; +static const YYINT quote_calc3_rindex[] = { 0, + 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, + 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, + 3, -4, +}; +static const YYINT quote_calc3_gindex[] = { 0, + 0, 42, 0, +}; +#define YYTABLESIZE 258 +static const YYINT quote_calc3_table[] = { 16, + 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, + 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, + 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, + 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, + 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, + 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, + 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, + 16, 15, 16, 15, 16, 15, 16, 15, +}; +static const YYINT quote_calc3_check[] = { 10, + 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, + 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, + 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, + 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, + -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, + -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, + 19, 20, 21, 22, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 124, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, + -1, 263, -1, 265, -1, 267, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, + 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, + 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, + 261, 261, 263, 263, 265, 265, 267, 267, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 271 +#define YYUNDFTOKEN 277 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const quote_calc3_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", +"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", +"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0, +"illegal-symbol", +}; +static const char *const quote_calc3_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr OP_ADD expr", +"expr : expr OP_SUB expr", +"expr : expr OP_MUL expr", +"expr : expr OP_DIV expr", +"expr : expr OP_MOD expr", +"expr : expr OP_AND expr", +"expr : expr '|' expr", +"expr : OP_SUB expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 73 "quote_calc3.y" + /* start of programs */ + +int +main (void) +{ + while(!feof(stdin)) { + yyparse(); + } + return 0; +} + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) { + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + yylval = c - '0'; + return ( DIGIT ); + } + return( c ); +} +#line 370 "quote_calc3-s.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 35 "quote_calc3.y" + { yyerrok ; } +break; +case 4: +#line 39 "quote_calc3.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 41 "quote_calc3.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 45 "quote_calc3.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 47 "quote_calc3.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 49 "quote_calc3.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 51 "quote_calc3.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 53 "quote_calc3.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 55 "quote_calc3.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 57 "quote_calc3.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 59 "quote_calc3.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 61 "quote_calc3.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 63 "quote_calc3.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 68 "quote_calc3.y" + { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 70 "quote_calc3.y" + { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 632 "quote_calc3-s.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/quote_calc3-s.tab.h b/contrib/byacc/test/yacc/quote_calc3-s.tab.h new file mode 100644 index 000000000000..1a4657903411 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc3-s.tab.h @@ -0,0 +1,9 @@ +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 diff --git a/contrib/byacc/test/yacc/quote_calc3.error b/contrib/byacc/test/yacc/quote_calc3.error new file mode 100644 index 000000000000..729d01c0abba --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc3.error @@ -0,0 +1 @@ +YACC: 54 shift/reduce conflicts. diff --git a/contrib/byacc/test/yacc/quote_calc3.output b/contrib/byacc/test/yacc/quote_calc3.output new file mode 100644 index 000000000000..0306652bfaa1 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc3.output @@ -0,0 +1,557 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr OP_ADD expr + 8 | expr OP_SUB expr + 9 | expr OP_MUL expr + 10 | expr OP_DIV expr + 11 | expr OP_MOD expr + 12 | expr OP_AND expr + 13 | expr '|' expr + 14 | OP_SUB expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + expr : OP_SUB . expr (14) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 12 + number goto 9 + + +state 4 + number : DIGIT . (17) + + . reduce 17 + + +state 5 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 13 + OP_ADD reduce 15 + OP_SUB reduce 15 + OP_MUL reduce 15 + OP_DIV reduce 15 + OP_MOD reduce 15 + OP_AND reduce 15 + '|' reduce 15 + '\n' reduce 15 + + +state 6 + expr : '(' . expr ')' (6) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + OP_ADD reduce 16 + OP_SUB reduce 16 + OP_MUL reduce 16 + OP_DIV reduce 16 + OP_MOD reduce 16 + OP_AND reduce 16 + '|' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + expr : LETTER . (15) + + . reduce 15 + + +12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD +12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB +12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL +12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV +12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD +12: shift/reduce conflict (shift 21, reduce 14) on OP_AND +state 12 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + expr : OP_SUB expr . (14) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' reduce 14 + '\n' reduce 14 + ')' reduce 14 + + +state 13 + stat : LETTER '=' . expr (5) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr OP_ADD . expr (7) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr OP_SUB . expr (8) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr OP_MUL . expr (9) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr OP_DIV . expr (10) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr OP_MOD . expr (11) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr OP_AND . expr (12) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '|' . expr (13) + + OP_SUB shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD +26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB +26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL +26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV +26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD +26: shift/reduce conflict (shift 21, reduce 7) on OP_AND +26: shift/reduce conflict (shift 22, reduce 7) on '|' +state 26 + expr : expr . OP_ADD expr (7) + expr : expr OP_ADD expr . (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 7 + ')' reduce 7 + + +27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD +27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB +27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL +27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV +27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD +27: shift/reduce conflict (shift 21, reduce 8) on OP_AND +27: shift/reduce conflict (shift 22, reduce 8) on '|' +state 27 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr OP_SUB expr . (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 8 + ')' reduce 8 + + +28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD +28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB +28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL +28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV +28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD +28: shift/reduce conflict (shift 21, reduce 9) on OP_AND +28: shift/reduce conflict (shift 22, reduce 9) on '|' +state 28 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr OP_MUL expr . (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 9 + ')' reduce 9 + + +29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD +29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB +29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL +29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV +29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD +29: shift/reduce conflict (shift 21, reduce 10) on OP_AND +29: shift/reduce conflict (shift 22, reduce 10) on '|' +state 29 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr OP_DIV expr . (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 10 + ')' reduce 10 + + +30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD +30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB +30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL +30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV +30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD +30: shift/reduce conflict (shift 21, reduce 11) on OP_AND +30: shift/reduce conflict (shift 22, reduce 11) on '|' +state 30 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr OP_MOD expr . (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 11 + ')' reduce 11 + + +31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD +31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB +31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL +31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV +31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD +31: shift/reduce conflict (shift 21, reduce 12) on OP_AND +31: shift/reduce conflict (shift 22, reduce 12) on '|' +state 31 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr OP_AND expr . (12) + expr : expr . '|' expr (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' shift 22 + '\n' reduce 12 + ')' reduce 12 + + +32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD +32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB +32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL +32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV +32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD +32: shift/reduce conflict (shift 21, reduce 13) on OP_AND +state 32 + expr : expr . OP_ADD expr (7) + expr : expr . OP_SUB expr (8) + expr : expr . OP_MUL expr (9) + expr : expr . OP_DIV expr (10) + expr : expr . OP_MOD expr (11) + expr : expr . OP_AND expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + OP_ADD shift 16 + OP_SUB shift 17 + OP_MUL shift 18 + OP_DIV shift 19 + OP_MOD shift 20 + OP_AND shift 21 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +State 12 contains 6 shift/reduce conflicts. +State 26 contains 7 shift/reduce conflicts. +State 27 contains 7 shift/reduce conflicts. +State 28 contains 7 shift/reduce conflicts. +State 29 contains 7 shift/reduce conflicts. +State 30 contains 7 shift/reduce conflicts. +State 31 contains 7 shift/reduce conflicts. +State 32 contains 6 shift/reduce conflicts. + + +28 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/quote_calc3.tab.c b/contrib/byacc/test/yacc/quote_calc3.tab.c new file mode 100644 index 000000000000..ad4fe1ae6bf3 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc3.tab.c @@ -0,0 +1,690 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse quote_calc3_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex quote_calc3_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror quote_calc3_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar quote_calc3_char +#endif /* yychar */ + +#ifndef yyval +#define yyval quote_calc3_val +#endif /* yyval */ + +#ifndef yylval +#define yylval quote_calc3_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug quote_calc3_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs quote_calc3_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag quote_calc3_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs quote_calc3_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen quote_calc3_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred quote_calc3_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto quote_calc3_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex quote_calc3_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex quote_calc3_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex quote_calc3_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable quote_calc3_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck quote_calc3_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname quote_calc3_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule quote_calc3_rule +#endif /* yyrule */ +#define YYPREFIX "quote_calc3_" + +#define YYPURE 0 + +#line 2 "quote_calc3.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +int yylex(void); +static void yyerror(const char *s); + +#line 111 "quote_calc3.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT quote_calc3_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT quote_calc3_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT quote_calc3_defred[] = { 1, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, + 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, + 0, 0, +}; +static const YYINT quote_calc3_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT quote_calc3_sindex[] = { 0, + -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, + 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, + -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, + -121, -243, +}; +static const YYINT quote_calc3_rindex[] = { 0, + 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, + 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, + 3, -4, +}; +static const YYINT quote_calc3_gindex[] = { 0, + 0, 42, 0, +}; +#define YYTABLESIZE 258 +static const YYINT quote_calc3_table[] = { 16, + 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, + 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, + 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, + 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, + 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, + 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, + 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, + 16, 15, 16, 15, 16, 15, 16, 15, +}; +static const YYINT quote_calc3_check[] = { 10, + 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, + 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, + 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, + 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, + -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, + -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, + 19, 20, 21, 22, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 124, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, + -1, 263, -1, 265, -1, 267, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, + 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, + 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, + 261, 261, 263, 263, 265, 265, 267, 267, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 271 +#define YYUNDFTOKEN 277 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const quote_calc3_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", +"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", +"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0, +"illegal-symbol", +}; +static const char *const quote_calc3_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr OP_ADD expr", +"expr : expr OP_SUB expr", +"expr : expr OP_MUL expr", +"expr : expr OP_DIV expr", +"expr : expr OP_MOD expr", +"expr : expr OP_AND expr", +"expr : expr '|' expr", +"expr : OP_SUB expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 73 "quote_calc3.y" + /* start of programs */ + +int +main (void) +{ + while(!feof(stdin)) { + yyparse(); + } + return 0; +} + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) { + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + yylval = c - '0'; + return ( DIGIT ); + } + return( c ); +} +#line 370 "quote_calc3.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 35 "quote_calc3.y" + { yyerrok ; } +break; +case 4: +#line 39 "quote_calc3.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 41 "quote_calc3.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 45 "quote_calc3.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 47 "quote_calc3.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 49 "quote_calc3.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 51 "quote_calc3.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 53 "quote_calc3.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 55 "quote_calc3.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 57 "quote_calc3.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 59 "quote_calc3.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 61 "quote_calc3.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 63 "quote_calc3.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 68 "quote_calc3.y" + { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 70 "quote_calc3.y" + { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 632 "quote_calc3.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/quote_calc3.tab.h b/contrib/byacc/test/yacc/quote_calc3.tab.h new file mode 100644 index 000000000000..1a4657903411 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc3.tab.h @@ -0,0 +1,9 @@ +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 diff --git a/contrib/byacc/test/yacc/quote_calc4-s.error b/contrib/byacc/test/yacc/quote_calc4-s.error new file mode 100644 index 000000000000..729d01c0abba --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc4-s.error @@ -0,0 +1 @@ +YACC: 54 shift/reduce conflicts. diff --git a/contrib/byacc/test/yacc/quote_calc4-s.output b/contrib/byacc/test/yacc/quote_calc4-s.output new file mode 100644 index 000000000000..a1d5afc95796 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc4-s.output @@ -0,0 +1,557 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr "ADD-operator" expr + 8 | expr "SUB-operator" expr + 9 | expr "MUL-operator" expr + 10 | expr "DIV-operator" expr + 11 | expr "MOD-operator" expr + 12 | expr "AND-operator" expr + 13 | expr '|' expr + 14 | "SUB-operator" expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + expr : "SUB-operator" . expr (14) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 12 + number goto 9 + + +state 4 + number : DIGIT . (17) + + . reduce 17 + + +state 5 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 13 + "ADD-operator" reduce 15 + "SUB-operator" reduce 15 + "MUL-operator" reduce 15 + "DIV-operator" reduce 15 + "MOD-operator" reduce 15 + "AND-operator" reduce 15 + '|' reduce 15 + '\n' reduce 15 + + +state 6 + expr : '(' . expr ')' (6) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + "ADD-operator" reduce 16 + "SUB-operator" reduce 16 + "MUL-operator" reduce 16 + "DIV-operator" reduce 16 + "MOD-operator" reduce 16 + "AND-operator" reduce 16 + '|' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + expr : LETTER . (15) + + . reduce 15 + + +12: shift/reduce conflict (shift 16, reduce 14) on "ADD-operator" +12: shift/reduce conflict (shift 17, reduce 14) on "SUB-operator" +12: shift/reduce conflict (shift 18, reduce 14) on "MUL-operator" +12: shift/reduce conflict (shift 19, reduce 14) on "DIV-operator" +12: shift/reduce conflict (shift 20, reduce 14) on "MOD-operator" +12: shift/reduce conflict (shift 21, reduce 14) on "AND-operator" +state 12 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + expr : "SUB-operator" expr . (14) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' reduce 14 + '\n' reduce 14 + ')' reduce 14 + + +state 13 + stat : LETTER '=' . expr (5) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr "ADD-operator" . expr (7) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr "SUB-operator" . expr (8) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr "MUL-operator" . expr (9) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr "DIV-operator" . expr (10) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr "MOD-operator" . expr (11) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr "AND-operator" . expr (12) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '|' . expr (13) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +26: shift/reduce conflict (shift 16, reduce 7) on "ADD-operator" +26: shift/reduce conflict (shift 17, reduce 7) on "SUB-operator" +26: shift/reduce conflict (shift 18, reduce 7) on "MUL-operator" +26: shift/reduce conflict (shift 19, reduce 7) on "DIV-operator" +26: shift/reduce conflict (shift 20, reduce 7) on "MOD-operator" +26: shift/reduce conflict (shift 21, reduce 7) on "AND-operator" +26: shift/reduce conflict (shift 22, reduce 7) on '|' +state 26 + expr : expr . "ADD-operator" expr (7) + expr : expr "ADD-operator" expr . (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 7 + ')' reduce 7 + + +27: shift/reduce conflict (shift 16, reduce 8) on "ADD-operator" +27: shift/reduce conflict (shift 17, reduce 8) on "SUB-operator" +27: shift/reduce conflict (shift 18, reduce 8) on "MUL-operator" +27: shift/reduce conflict (shift 19, reduce 8) on "DIV-operator" +27: shift/reduce conflict (shift 20, reduce 8) on "MOD-operator" +27: shift/reduce conflict (shift 21, reduce 8) on "AND-operator" +27: shift/reduce conflict (shift 22, reduce 8) on '|' +state 27 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr "SUB-operator" expr . (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 8 + ')' reduce 8 + + +28: shift/reduce conflict (shift 16, reduce 9) on "ADD-operator" +28: shift/reduce conflict (shift 17, reduce 9) on "SUB-operator" +28: shift/reduce conflict (shift 18, reduce 9) on "MUL-operator" +28: shift/reduce conflict (shift 19, reduce 9) on "DIV-operator" +28: shift/reduce conflict (shift 20, reduce 9) on "MOD-operator" +28: shift/reduce conflict (shift 21, reduce 9) on "AND-operator" +28: shift/reduce conflict (shift 22, reduce 9) on '|' +state 28 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr "MUL-operator" expr . (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 9 + ')' reduce 9 + + +29: shift/reduce conflict (shift 16, reduce 10) on "ADD-operator" +29: shift/reduce conflict (shift 17, reduce 10) on "SUB-operator" +29: shift/reduce conflict (shift 18, reduce 10) on "MUL-operator" +29: shift/reduce conflict (shift 19, reduce 10) on "DIV-operator" +29: shift/reduce conflict (shift 20, reduce 10) on "MOD-operator" +29: shift/reduce conflict (shift 21, reduce 10) on "AND-operator" +29: shift/reduce conflict (shift 22, reduce 10) on '|' +state 29 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr "DIV-operator" expr . (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 10 + ')' reduce 10 + + +30: shift/reduce conflict (shift 16, reduce 11) on "ADD-operator" +30: shift/reduce conflict (shift 17, reduce 11) on "SUB-operator" +30: shift/reduce conflict (shift 18, reduce 11) on "MUL-operator" +30: shift/reduce conflict (shift 19, reduce 11) on "DIV-operator" +30: shift/reduce conflict (shift 20, reduce 11) on "MOD-operator" +30: shift/reduce conflict (shift 21, reduce 11) on "AND-operator" +30: shift/reduce conflict (shift 22, reduce 11) on '|' +state 30 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr "MOD-operator" expr . (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 11 + ')' reduce 11 + + +31: shift/reduce conflict (shift 16, reduce 12) on "ADD-operator" +31: shift/reduce conflict (shift 17, reduce 12) on "SUB-operator" +31: shift/reduce conflict (shift 18, reduce 12) on "MUL-operator" +31: shift/reduce conflict (shift 19, reduce 12) on "DIV-operator" +31: shift/reduce conflict (shift 20, reduce 12) on "MOD-operator" +31: shift/reduce conflict (shift 21, reduce 12) on "AND-operator" +31: shift/reduce conflict (shift 22, reduce 12) on '|' +state 31 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr "AND-operator" expr . (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 12 + ')' reduce 12 + + +32: shift/reduce conflict (shift 16, reduce 13) on "ADD-operator" +32: shift/reduce conflict (shift 17, reduce 13) on "SUB-operator" +32: shift/reduce conflict (shift 18, reduce 13) on "MUL-operator" +32: shift/reduce conflict (shift 19, reduce 13) on "DIV-operator" +32: shift/reduce conflict (shift 20, reduce 13) on "MOD-operator" +32: shift/reduce conflict (shift 21, reduce 13) on "AND-operator" +state 32 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +State 12 contains 6 shift/reduce conflicts. +State 26 contains 7 shift/reduce conflicts. +State 27 contains 7 shift/reduce conflicts. +State 28 contains 7 shift/reduce conflicts. +State 29 contains 7 shift/reduce conflicts. +State 30 contains 7 shift/reduce conflicts. +State 31 contains 7 shift/reduce conflicts. +State 32 contains 6 shift/reduce conflicts. + + +28 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/quote_calc4-s.tab.c b/contrib/byacc/test/yacc/quote_calc4-s.tab.c new file mode 100644 index 000000000000..4d1e3d4376f3 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc4-s.tab.c @@ -0,0 +1,690 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse quote_calc4_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex quote_calc4_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror quote_calc4_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar quote_calc4_char +#endif /* yychar */ + +#ifndef yyval +#define yyval quote_calc4_val +#endif /* yyval */ + +#ifndef yylval +#define yylval quote_calc4_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug quote_calc4_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs quote_calc4_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag quote_calc4_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs quote_calc4_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen quote_calc4_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred quote_calc4_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto quote_calc4_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex quote_calc4_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex quote_calc4_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex quote_calc4_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable quote_calc4_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck quote_calc4_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname quote_calc4_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule quote_calc4_rule +#endif /* yyrule */ +#define YYPREFIX "quote_calc4_" + +#define YYPURE 0 + +#line 2 "quote_calc4.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +int yylex(void); +static void yyerror(const char *s); + +#line 111 "quote_calc4-s.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT quote_calc4_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT quote_calc4_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT quote_calc4_defred[] = { 1, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, + 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, + 0, 0, +}; +static const YYINT quote_calc4_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT quote_calc4_sindex[] = { 0, + -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, + 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, + -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, + -121, -243, +}; +static const YYINT quote_calc4_rindex[] = { 0, + 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, + 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, + 3, -4, +}; +static const YYINT quote_calc4_gindex[] = { 0, + 0, 42, 0, +}; +#define YYTABLESIZE 259 +static const YYINT quote_calc4_table[] = { 16, + 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, + 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, + 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, + 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, + 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, + 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, + 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, + 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, + 15, 16, 15, 16, 15, 16, 15, 16, 15, +}; +static const YYINT quote_calc4_check[] = { 10, + 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, + 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, + 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, + 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, + -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, + -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, + 19, 20, 21, 22, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, + 262, -1, 264, -1, 266, -1, 268, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, + 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, + 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, + 260, 262, 262, 264, 264, 266, 266, 268, 268, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 271 +#define YYUNDFTOKEN 277 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const quote_calc4_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", +"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", +"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0, +"illegal-symbol", +}; +static const char *const quote_calc4_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr \"ADD-operator\" expr", +"expr : expr \"SUB-operator\" expr", +"expr : expr \"MUL-operator\" expr", +"expr : expr \"DIV-operator\" expr", +"expr : expr \"MOD-operator\" expr", +"expr : expr \"AND-operator\" expr", +"expr : expr '|' expr", +"expr : \"SUB-operator\" expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 73 "quote_calc4.y" + /* start of programs */ + +int +main (void) +{ + while(!feof(stdin)) { + yyparse(); + } + return 0; +} + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) { + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + yylval = c - '0'; + return ( DIGIT ); + } + return( c ); +} +#line 370 "quote_calc4-s.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 35 "quote_calc4.y" + { yyerrok ; } +break; +case 4: +#line 39 "quote_calc4.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 41 "quote_calc4.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 45 "quote_calc4.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 47 "quote_calc4.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 49 "quote_calc4.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 51 "quote_calc4.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 53 "quote_calc4.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 55 "quote_calc4.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 57 "quote_calc4.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 59 "quote_calc4.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 61 "quote_calc4.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 63 "quote_calc4.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 68 "quote_calc4.y" + { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 70 "quote_calc4.y" + { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 632 "quote_calc4-s.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/quote_calc4-s.tab.h b/contrib/byacc/test/yacc/quote_calc4-s.tab.h new file mode 100644 index 000000000000..1a4657903411 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc4-s.tab.h @@ -0,0 +1,9 @@ +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 diff --git a/contrib/byacc/test/yacc/quote_calc4.error b/contrib/byacc/test/yacc/quote_calc4.error new file mode 100644 index 000000000000..729d01c0abba --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc4.error @@ -0,0 +1 @@ +YACC: 54 shift/reduce conflicts. diff --git a/contrib/byacc/test/yacc/quote_calc4.output b/contrib/byacc/test/yacc/quote_calc4.output new file mode 100644 index 000000000000..a1d5afc95796 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc4.output @@ -0,0 +1,557 @@ + 0 $accept : list $end + + 1 list : + 2 | list stat '\n' + 3 | list error '\n' + + 4 stat : expr + 5 | LETTER '=' expr + + 6 expr : '(' expr ')' + 7 | expr "ADD-operator" expr + 8 | expr "SUB-operator" expr + 9 | expr "MUL-operator" expr + 10 | expr "DIV-operator" expr + 11 | expr "MOD-operator" expr + 12 | expr "AND-operator" expr + 13 | expr '|' expr + 14 | "SUB-operator" expr + 15 | LETTER + 16 | number + + 17 number : DIGIT + 18 | number DIGIT + +state 0 + $accept : . list $end (0) + list : . (1) + + . reduce 1 + + list goto 1 + + +state 1 + $accept : list . $end (0) + list : list . stat '\n' (2) + list : list . error '\n' (3) + + $end accept + error shift 2 + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 5 + '(' shift 6 + . error + + stat goto 7 + expr goto 8 + number goto 9 + + +state 2 + list : list error . '\n' (3) + + '\n' shift 10 + . error + + +state 3 + expr : "SUB-operator" . expr (14) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 12 + number goto 9 + + +state 4 + number : DIGIT . (17) + + . reduce 17 + + +state 5 + stat : LETTER . '=' expr (5) + expr : LETTER . (15) + + '=' shift 13 + "ADD-operator" reduce 15 + "SUB-operator" reduce 15 + "MUL-operator" reduce 15 + "DIV-operator" reduce 15 + "MOD-operator" reduce 15 + "AND-operator" reduce 15 + '|' reduce 15 + '\n' reduce 15 + + +state 6 + expr : '(' . expr ')' (6) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 14 + number goto 9 + + +state 7 + list : list stat . '\n' (2) + + '\n' shift 15 + . error + + +state 8 + stat : expr . (4) + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 4 + + +state 9 + expr : number . (16) + number : number . DIGIT (18) + + DIGIT shift 23 + "ADD-operator" reduce 16 + "SUB-operator" reduce 16 + "MUL-operator" reduce 16 + "DIV-operator" reduce 16 + "MOD-operator" reduce 16 + "AND-operator" reduce 16 + '|' reduce 16 + '\n' reduce 16 + ')' reduce 16 + + +state 10 + list : list error '\n' . (3) + + . reduce 3 + + +state 11 + expr : LETTER . (15) + + . reduce 15 + + +12: shift/reduce conflict (shift 16, reduce 14) on "ADD-operator" +12: shift/reduce conflict (shift 17, reduce 14) on "SUB-operator" +12: shift/reduce conflict (shift 18, reduce 14) on "MUL-operator" +12: shift/reduce conflict (shift 19, reduce 14) on "DIV-operator" +12: shift/reduce conflict (shift 20, reduce 14) on "MOD-operator" +12: shift/reduce conflict (shift 21, reduce 14) on "AND-operator" +state 12 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + expr : "SUB-operator" expr . (14) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' reduce 14 + '\n' reduce 14 + ')' reduce 14 + + +state 13 + stat : LETTER '=' . expr (5) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 24 + number goto 9 + + +state 14 + expr : '(' expr . ')' (6) + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + ')' shift 25 + . error + + +state 15 + list : list stat '\n' . (2) + + . reduce 2 + + +state 16 + expr : expr "ADD-operator" . expr (7) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 26 + number goto 9 + + +state 17 + expr : expr "SUB-operator" . expr (8) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 27 + number goto 9 + + +state 18 + expr : expr "MUL-operator" . expr (9) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 28 + number goto 9 + + +state 19 + expr : expr "DIV-operator" . expr (10) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 29 + number goto 9 + + +state 20 + expr : expr "MOD-operator" . expr (11) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 30 + number goto 9 + + +state 21 + expr : expr "AND-operator" . expr (12) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 31 + number goto 9 + + +state 22 + expr : expr '|' . expr (13) + + "SUB-operator" shift 3 + DIGIT shift 4 + LETTER shift 11 + '(' shift 6 + . error + + expr goto 32 + number goto 9 + + +state 23 + number : number DIGIT . (18) + + . reduce 18 + + +state 24 + stat : LETTER '=' expr . (5) + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 5 + + +state 25 + expr : '(' expr ')' . (6) + + . reduce 6 + + +26: shift/reduce conflict (shift 16, reduce 7) on "ADD-operator" +26: shift/reduce conflict (shift 17, reduce 7) on "SUB-operator" +26: shift/reduce conflict (shift 18, reduce 7) on "MUL-operator" +26: shift/reduce conflict (shift 19, reduce 7) on "DIV-operator" +26: shift/reduce conflict (shift 20, reduce 7) on "MOD-operator" +26: shift/reduce conflict (shift 21, reduce 7) on "AND-operator" +26: shift/reduce conflict (shift 22, reduce 7) on '|' +state 26 + expr : expr . "ADD-operator" expr (7) + expr : expr "ADD-operator" expr . (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 7 + ')' reduce 7 + + +27: shift/reduce conflict (shift 16, reduce 8) on "ADD-operator" +27: shift/reduce conflict (shift 17, reduce 8) on "SUB-operator" +27: shift/reduce conflict (shift 18, reduce 8) on "MUL-operator" +27: shift/reduce conflict (shift 19, reduce 8) on "DIV-operator" +27: shift/reduce conflict (shift 20, reduce 8) on "MOD-operator" +27: shift/reduce conflict (shift 21, reduce 8) on "AND-operator" +27: shift/reduce conflict (shift 22, reduce 8) on '|' +state 27 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr "SUB-operator" expr . (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 8 + ')' reduce 8 + + +28: shift/reduce conflict (shift 16, reduce 9) on "ADD-operator" +28: shift/reduce conflict (shift 17, reduce 9) on "SUB-operator" +28: shift/reduce conflict (shift 18, reduce 9) on "MUL-operator" +28: shift/reduce conflict (shift 19, reduce 9) on "DIV-operator" +28: shift/reduce conflict (shift 20, reduce 9) on "MOD-operator" +28: shift/reduce conflict (shift 21, reduce 9) on "AND-operator" +28: shift/reduce conflict (shift 22, reduce 9) on '|' +state 28 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr "MUL-operator" expr . (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 9 + ')' reduce 9 + + +29: shift/reduce conflict (shift 16, reduce 10) on "ADD-operator" +29: shift/reduce conflict (shift 17, reduce 10) on "SUB-operator" +29: shift/reduce conflict (shift 18, reduce 10) on "MUL-operator" +29: shift/reduce conflict (shift 19, reduce 10) on "DIV-operator" +29: shift/reduce conflict (shift 20, reduce 10) on "MOD-operator" +29: shift/reduce conflict (shift 21, reduce 10) on "AND-operator" +29: shift/reduce conflict (shift 22, reduce 10) on '|' +state 29 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr "DIV-operator" expr . (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 10 + ')' reduce 10 + + +30: shift/reduce conflict (shift 16, reduce 11) on "ADD-operator" +30: shift/reduce conflict (shift 17, reduce 11) on "SUB-operator" +30: shift/reduce conflict (shift 18, reduce 11) on "MUL-operator" +30: shift/reduce conflict (shift 19, reduce 11) on "DIV-operator" +30: shift/reduce conflict (shift 20, reduce 11) on "MOD-operator" +30: shift/reduce conflict (shift 21, reduce 11) on "AND-operator" +30: shift/reduce conflict (shift 22, reduce 11) on '|' +state 30 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr "MOD-operator" expr . (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 11 + ')' reduce 11 + + +31: shift/reduce conflict (shift 16, reduce 12) on "ADD-operator" +31: shift/reduce conflict (shift 17, reduce 12) on "SUB-operator" +31: shift/reduce conflict (shift 18, reduce 12) on "MUL-operator" +31: shift/reduce conflict (shift 19, reduce 12) on "DIV-operator" +31: shift/reduce conflict (shift 20, reduce 12) on "MOD-operator" +31: shift/reduce conflict (shift 21, reduce 12) on "AND-operator" +31: shift/reduce conflict (shift 22, reduce 12) on '|' +state 31 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr "AND-operator" expr . (12) + expr : expr . '|' expr (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' shift 22 + '\n' reduce 12 + ')' reduce 12 + + +32: shift/reduce conflict (shift 16, reduce 13) on "ADD-operator" +32: shift/reduce conflict (shift 17, reduce 13) on "SUB-operator" +32: shift/reduce conflict (shift 18, reduce 13) on "MUL-operator" +32: shift/reduce conflict (shift 19, reduce 13) on "DIV-operator" +32: shift/reduce conflict (shift 20, reduce 13) on "MOD-operator" +32: shift/reduce conflict (shift 21, reduce 13) on "AND-operator" +state 32 + expr : expr . "ADD-operator" expr (7) + expr : expr . "SUB-operator" expr (8) + expr : expr . "MUL-operator" expr (9) + expr : expr . "DIV-operator" expr (10) + expr : expr . "MOD-operator" expr (11) + expr : expr . "AND-operator" expr (12) + expr : expr . '|' expr (13) + expr : expr '|' expr . (13) + + "ADD-operator" shift 16 + "SUB-operator" shift 17 + "MUL-operator" shift 18 + "DIV-operator" shift 19 + "MOD-operator" shift 20 + "AND-operator" shift 21 + '|' reduce 13 + '\n' reduce 13 + ')' reduce 13 + + +State 12 contains 6 shift/reduce conflicts. +State 26 contains 7 shift/reduce conflicts. +State 27 contains 7 shift/reduce conflicts. +State 28 contains 7 shift/reduce conflicts. +State 29 contains 7 shift/reduce conflicts. +State 30 contains 7 shift/reduce conflicts. +State 31 contains 7 shift/reduce conflicts. +State 32 contains 6 shift/reduce conflicts. + + +28 terminals, 5 nonterminals +19 grammar rules, 33 states diff --git a/contrib/byacc/test/yacc/quote_calc4.tab.c b/contrib/byacc/test/yacc/quote_calc4.tab.c new file mode 100644 index 000000000000..a5f047ec8d3e --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc4.tab.c @@ -0,0 +1,690 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 + +#ifndef yyparse +#define yyparse quote_calc4_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex quote_calc4_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror quote_calc4_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar quote_calc4_char +#endif /* yychar */ + +#ifndef yyval +#define yyval quote_calc4_val +#endif /* yyval */ + +#ifndef yylval +#define yylval quote_calc4_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug quote_calc4_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs quote_calc4_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag quote_calc4_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs quote_calc4_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen quote_calc4_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred quote_calc4_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto quote_calc4_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex quote_calc4_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex quote_calc4_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex quote_calc4_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable quote_calc4_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck quote_calc4_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname quote_calc4_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule quote_calc4_rule +#endif /* yyrule */ +#define YYPREFIX "quote_calc4_" + +#define YYPURE 0 + +#line 2 "quote_calc4.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +int yylex(void); +static void yyerror(const char *s); + +#line 111 "quote_calc4.tab.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT quote_calc4_lhs[] = { -1, + 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, +}; +static const YYINT quote_calc4_len[] = { 2, + 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 1, 1, 2, +}; +static const YYINT quote_calc4_defred[] = { 1, + 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, + 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, + 0, 0, +}; +static const YYINT quote_calc4_dgoto[] = { 1, + 7, 8, 9, +}; +static const YYINT quote_calc4_sindex[] = { 0, + -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, + 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, + -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, + -121, -243, +}; +static const YYINT quote_calc4_rindex[] = { 0, + 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, + 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, + 3, -4, +}; +static const YYINT quote_calc4_gindex[] = { 0, + 0, 42, 0, +}; +#define YYTABLESIZE 259 +static const YYINT quote_calc4_table[] = { 16, + 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, + 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, + 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, + 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, + 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, + 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, + 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, + 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, + 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, + 15, 16, 15, 16, 15, 16, 15, 16, 15, +}; +static const YYINT quote_calc4_check[] = { 10, + 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, + 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, + 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, + 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, + -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, + -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, + 19, 20, 21, 22, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, + 262, -1, 264, -1, 266, -1, 268, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, + 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, + 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, + 260, 262, 262, 264, 264, 266, 266, 268, 268, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 271 +#define YYUNDFTOKEN 277 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const quote_calc4_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, +0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", +"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", +"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0, +"illegal-symbol", +}; +static const char *const quote_calc4_rule[] = { +"$accept : list", +"list :", +"list : list stat '\\n'", +"list : list error '\\n'", +"stat : expr", +"stat : LETTER '=' expr", +"expr : '(' expr ')'", +"expr : expr \"ADD-operator\" expr", +"expr : expr \"SUB-operator\" expr", +"expr : expr \"MUL-operator\" expr", +"expr : expr \"DIV-operator\" expr", +"expr : expr \"MOD-operator\" expr", +"expr : expr \"AND-operator\" expr", +"expr : expr '|' expr", +"expr : \"SUB-operator\" expr", +"expr : LETTER", +"expr : number", +"number : DIGIT", +"number : number DIGIT", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 73 "quote_calc4.y" + /* start of programs */ + +int +main (void) +{ + while(!feof(stdin)) { + yyparse(); + } + return 0; +} + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) { + /* lexical analysis routine */ + /* returns LETTER for a lower case letter, yylval = 0 through 25 */ + /* return DIGIT for a digit, yylval = 0 through 9 */ + /* all other characters are returned immediately */ + + int c; + + while( (c=getchar()) == ' ' ) { /* skip blanks */ } + + /* c is now nonblank */ + + if( islower( c )) { + yylval = c - 'a'; + return ( LETTER ); + } + if( isdigit( c )) { + yylval = c - '0'; + return ( DIGIT ); + } + return( c ); +} +#line 370 "quote_calc4.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 35 "quote_calc4.y" + { yyerrok ; } +break; +case 4: +#line 39 "quote_calc4.y" + { printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 41 "quote_calc4.y" + { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 45 "quote_calc4.y" + { yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 47 "quote_calc4.y" + { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 49 "quote_calc4.y" + { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 51 "quote_calc4.y" + { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 53 "quote_calc4.y" + { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 55 "quote_calc4.y" + { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 57 "quote_calc4.y" + { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 59 "quote_calc4.y" + { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 61 "quote_calc4.y" + { yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 63 "quote_calc4.y" + { yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 68 "quote_calc4.y" + { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 70 "quote_calc4.y" + { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 632 "quote_calc4.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/quote_calc4.tab.h b/contrib/byacc/test/yacc/quote_calc4.tab.h new file mode 100644 index 000000000000..1a4657903411 --- /dev/null +++ b/contrib/byacc/test/yacc/quote_calc4.tab.h @@ -0,0 +1,9 @@ +#define OP_ADD 257 +#define OP_SUB 259 +#define OP_MUL 261 +#define OP_DIV 263 +#define OP_MOD 265 +#define OP_AND 267 +#define DIGIT 269 +#define LETTER 270 +#define UMINUS 271 diff --git a/contrib/byacc/test/yacc/rename_debug.c b/contrib/byacc/test/yacc/rename_debug.c new file mode 100644 index 000000000000..5202074113c3 --- /dev/null +++ b/contrib/byacc/test/yacc/rename_debug.c @@ -0,0 +1,388 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 +#line 17 "rename_debug.c" +#include "rename_debug.i" +#include "rename_debug.h" +typedef short YYINT; +static const YYINT yylhs[] = { -1, + 0, +}; +static const YYINT yylen[] = { 2, + 1, +}; +static const YYINT yydefred[] = { 0, + 1, 0, +}; +static const YYINT yydgoto[] = { 2, +}; +static const YYINT yysindex[] = { -256, + 0, 0, +}; +static const YYINT yyrindex[] = { 0, + 0, 0, +}; +static const YYINT yygindex[] = { 0, +}; +#define YYTABLESIZE 0 +static const YYINT yytable[] = { 1, +}; +static const YYINT yycheck[] = { 256, +}; +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 1 +#endif +#define YYMAXTOKEN 256 +#define YYUNDFTOKEN 259 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const yyname[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", +}; +static const char *const yyrule[] = { +"$accept : S", +"S : error", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 12 "code_debug.y" + +#include <stdio.h> + +#ifdef YYBYACC +extern int YYLEX_DECL(); +#endif + +int +main(void) +{ + printf("yyparse() = %d\n", yyparse()); + return 0; +} + +int +yylex(void) +{ + return -1; +} + +static void +yyerror(const char* s) +{ + printf("%s\n", s); +} +#line 130 "rename_debug.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/rename_debug.error b/contrib/byacc/test/yacc/rename_debug.error new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/contrib/byacc/test/yacc/rename_debug.error diff --git a/contrib/byacc/test/yacc/rename_debug.h b/contrib/byacc/test/yacc/rename_debug.h new file mode 100644 index 000000000000..e1d14cbda095 --- /dev/null +++ b/contrib/byacc/test/yacc/rename_debug.h @@ -0,0 +1 @@ +#define YYERRCODE 256 diff --git a/contrib/byacc/test/yacc/rename_debug.i b/contrib/byacc/test/yacc/rename_debug.i new file mode 100644 index 000000000000..b7b801439e7a --- /dev/null +++ b/contrib/byacc/test/yacc/rename_debug.i @@ -0,0 +1,56 @@ +#define YYPREFIX "yy" + +#define YYPURE 0 + +#line 2 "code_debug.y" + +#ifdef YYBISON +int yylex(void); +static void yyerror(const char *); +#endif + + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +extern int yydebug; +extern int yynerrs; + +extern int yyerrflag; +extern int yychar; +extern YYSTYPE yyval; +extern YYSTYPE yylval; diff --git a/contrib/byacc/test/yacc/rename_debug.output b/contrib/byacc/test/yacc/rename_debug.output new file mode 100644 index 000000000000..0c4db6225e24 --- /dev/null +++ b/contrib/byacc/test/yacc/rename_debug.output @@ -0,0 +1,27 @@ + 0 $accept : S $end + + 1 S : error + +state 0 + $accept : . S $end (0) + + error shift 1 + . error + + S goto 2 + + +state 1 + S : error . (1) + + . reduce 1 + + +state 2 + $accept : S . $end (0) + + $end accept + + +2 terminals, 2 nonterminals +2 grammar rules, 3 states diff --git a/contrib/byacc/test/yacc/varsyntax_calc1.error b/contrib/byacc/test/yacc/varsyntax_calc1.error new file mode 100644 index 000000000000..9c1f7152c30e --- /dev/null +++ b/contrib/byacc/test/yacc/varsyntax_calc1.error @@ -0,0 +1,2 @@ +YACC: 2 rules never reduced +YACC: 18 shift/reduce conflicts, 26 reduce/reduce conflicts. diff --git a/contrib/byacc/test/yacc/varsyntax_calc1.output b/contrib/byacc/test/yacc/varsyntax_calc1.output new file mode 100644 index 000000000000..2b628d47ddba --- /dev/null +++ b/contrib/byacc/test/yacc/varsyntax_calc1.output @@ -0,0 +1,877 @@ + 0 $accept : line $end + + 1 lines : + 2 | lines line + + 3 line : dexp '\n' + 4 | vexp '\n' + 5 | DREG '=' dexp '\n' + 6 | VREG '=' vexp '\n' + 7 | error '\n' + + 8 dexp : CONST + 9 | DREG + 10 | dexp '+' dexp + 11 | dexp '-' dexp + 12 | dexp '*' dexp + 13 | dexp '/' dexp + 14 | '-' dexp + 15 | '(' dexp ')' + + 16 vexp : dexp + 17 | '(' dexp ',' dexp ')' + 18 | VREG + 19 | vexp '+' vexp + 20 | dexp '+' vexp + 21 | vexp '-' vexp + 22 | dexp '-' vexp + 23 | vexp '*' vexp + 24 | dexp '*' vexp + 25 | vexp '/' vexp + 26 | dexp '/' vexp + 27 | '-' vexp + 28 | '(' vexp ')' + +state 0 + $accept : . line $end (0) + + error shift 1 + DREG shift 2 + VREG shift 3 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + line goto 7 + dexp goto 8 + vexp goto 9 + + +state 1 + line : error . '\n' (7) + + '\n' shift 10 + . error + + +state 2 + line : DREG . '=' dexp '\n' (5) + dexp : DREG . (9) + + '=' shift 11 + '+' reduce 9 + '-' reduce 9 + '*' reduce 9 + '/' reduce 9 + '\n' reduce 9 + + +state 3 + line : VREG . '=' vexp '\n' (6) + vexp : VREG . (18) + + '=' shift 12 + '+' reduce 18 + '-' reduce 18 + '*' reduce 18 + '/' reduce 18 + '\n' reduce 18 + + +state 4 + dexp : CONST . (8) + + . reduce 8 + + +state 5 + dexp : '-' . dexp (14) + vexp : '-' . vexp (27) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 15 + vexp goto 16 + + +state 6 + dexp : '(' . dexp ')' (15) + vexp : '(' . dexp ',' dexp ')' (17) + vexp : '(' . vexp ')' (28) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 17 + vexp goto 18 + + +state 7 + $accept : line . $end (0) + + $end accept + + +8: shift/reduce conflict (shift 19, reduce 16) on '+' +8: shift/reduce conflict (shift 20, reduce 16) on '-' +8: shift/reduce conflict (shift 21, reduce 16) on '*' +8: shift/reduce conflict (shift 22, reduce 16) on '/' +8: shift/reduce conflict (shift 23, reduce 16) on '\n' +state 8 + line : dexp . '\n' (3) + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + '+' shift 19 + '-' shift 20 + '*' shift 21 + '/' shift 22 + '\n' shift 23 + + +state 9 + line : vexp . '\n' (4) + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '+' shift 24 + '-' shift 25 + '*' shift 26 + '/' shift 27 + '\n' shift 28 + . error + + +state 10 + line : error '\n' . (7) + + . reduce 7 + + +state 11 + line : DREG '=' . dexp '\n' (5) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 31 + + +state 12 + line : VREG '=' . vexp '\n' (6) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 32 + vexp goto 33 + + +state 13 + dexp : DREG . (9) + + . reduce 9 + + +state 14 + vexp : VREG . (18) + + . reduce 18 + + +15: reduce/reduce conflict (reduce 14, reduce 16) on '+' +15: reduce/reduce conflict (reduce 14, reduce 16) on '-' +15: reduce/reduce conflict (reduce 14, reduce 16) on '*' +15: reduce/reduce conflict (reduce 14, reduce 16) on '/' +15: reduce/reduce conflict (reduce 14, reduce 16) on '\n' +15: reduce/reduce conflict (reduce 14, reduce 16) on ')' +state 15 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : '-' dexp . (14) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + . reduce 14 + + +state 16 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + vexp : '-' vexp . (27) + + . reduce 27 + + +17: shift/reduce conflict (shift 19, reduce 16) on '+' +17: shift/reduce conflict (shift 20, reduce 16) on '-' +17: shift/reduce conflict (shift 21, reduce 16) on '*' +17: shift/reduce conflict (shift 22, reduce 16) on '/' +17: shift/reduce conflict (shift 34, reduce 16) on ')' +state 17 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : '(' dexp . ')' (15) + vexp : dexp . (16) + vexp : '(' dexp . ',' dexp ')' (17) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + '+' shift 19 + '-' shift 20 + '*' shift 21 + '/' shift 22 + ')' shift 34 + ',' shift 35 + + +state 18 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + vexp : '(' vexp . ')' (28) + + '+' shift 24 + '-' shift 25 + '*' shift 26 + '/' shift 27 + ')' shift 36 + . error + + +state 19 + dexp : dexp '+' . dexp (10) + vexp : dexp '+' . vexp (20) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 37 + vexp goto 38 + + +state 20 + dexp : dexp '-' . dexp (11) + vexp : dexp '-' . vexp (22) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 39 + vexp goto 40 + + +state 21 + dexp : dexp '*' . dexp (12) + vexp : dexp '*' . vexp (24) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 41 + vexp goto 42 + + +state 22 + dexp : dexp '/' . dexp (13) + vexp : dexp '/' . vexp (26) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 43 + vexp goto 44 + + +state 23 + line : dexp '\n' . (3) + + . reduce 3 + + +state 24 + vexp : vexp '+' . vexp (19) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 32 + vexp goto 45 + + +state 25 + vexp : vexp '-' . vexp (21) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 32 + vexp goto 46 + + +state 26 + vexp : vexp '*' . vexp (23) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 32 + vexp goto 47 + + +state 27 + vexp : vexp '/' . vexp (25) + + DREG shift 13 + VREG shift 14 + CONST shift 4 + '-' shift 5 + '(' shift 6 + . error + + dexp goto 32 + vexp goto 48 + + +state 28 + line : vexp '\n' . (4) + + . reduce 4 + + +state 29 + dexp : '-' . dexp (14) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 49 + + +state 30 + dexp : '(' . dexp ')' (15) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 50 + + +state 31 + line : DREG '=' dexp . '\n' (5) + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + + '+' shift 51 + '-' shift 52 + '*' shift 53 + '/' shift 54 + '\n' shift 55 + . error + + +32: shift/reduce conflict (shift 19, reduce 16) on '+' +32: shift/reduce conflict (shift 20, reduce 16) on '-' +32: shift/reduce conflict (shift 21, reduce 16) on '*' +32: shift/reduce conflict (shift 22, reduce 16) on '/' +state 32 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + '+' shift 19 + '-' shift 20 + '*' shift 21 + '/' shift 22 + '\n' reduce 16 + ')' reduce 16 + + +state 33 + line : VREG '=' vexp . '\n' (6) + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '+' shift 24 + '-' shift 25 + '*' shift 26 + '/' shift 27 + '\n' shift 56 + . error + + +state 34 + dexp : '(' dexp ')' . (15) + + . reduce 15 + + +state 35 + vexp : '(' dexp ',' . dexp ')' (17) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 57 + + +state 36 + vexp : '(' vexp ')' . (28) + + . reduce 28 + + +37: reduce/reduce conflict (reduce 10, reduce 16) on '+' +37: reduce/reduce conflict (reduce 10, reduce 16) on '-' +37: shift/reduce conflict (shift 21, reduce 16) on '*' +37: shift/reduce conflict (shift 22, reduce 16) on '/' +37: reduce/reduce conflict (reduce 10, reduce 16) on '\n' +37: reduce/reduce conflict (reduce 10, reduce 16) on ')' +state 37 + dexp : dexp . '+' dexp (10) + dexp : dexp '+' dexp . (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + '*' shift 21 + '/' shift 22 + '+' reduce 10 + '-' reduce 10 + '\n' reduce 10 + ')' reduce 10 + ',' reduce 10 + + +state 38 + vexp : vexp . '+' vexp (19) + vexp : dexp '+' vexp . (20) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '*' shift 26 + '/' shift 27 + '+' reduce 20 + '-' reduce 20 + '\n' reduce 20 + ')' reduce 20 + + +39: reduce/reduce conflict (reduce 11, reduce 16) on '+' +39: reduce/reduce conflict (reduce 11, reduce 16) on '-' +39: shift/reduce conflict (shift 21, reduce 16) on '*' +39: shift/reduce conflict (shift 22, reduce 16) on '/' +39: reduce/reduce conflict (reduce 11, reduce 16) on '\n' +39: reduce/reduce conflict (reduce 11, reduce 16) on ')' +state 39 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp '-' dexp . (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + '*' shift 21 + '/' shift 22 + '+' reduce 11 + '-' reduce 11 + '\n' reduce 11 + ')' reduce 11 + ',' reduce 11 + + +state 40 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : dexp '-' vexp . (22) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '*' shift 26 + '/' shift 27 + '+' reduce 22 + '-' reduce 22 + '\n' reduce 22 + ')' reduce 22 + + +41: reduce/reduce conflict (reduce 12, reduce 16) on '+' +41: reduce/reduce conflict (reduce 12, reduce 16) on '-' +41: reduce/reduce conflict (reduce 12, reduce 16) on '*' +41: reduce/reduce conflict (reduce 12, reduce 16) on '/' +41: reduce/reduce conflict (reduce 12, reduce 16) on '\n' +41: reduce/reduce conflict (reduce 12, reduce 16) on ')' +state 41 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp '*' dexp . (12) + dexp : dexp . '/' dexp (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + . reduce 12 + + +state 42 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : dexp '*' vexp . (24) + vexp : vexp . '/' vexp (25) + + . reduce 24 + + +43: reduce/reduce conflict (reduce 13, reduce 16) on '+' +43: reduce/reduce conflict (reduce 13, reduce 16) on '-' +43: reduce/reduce conflict (reduce 13, reduce 16) on '*' +43: reduce/reduce conflict (reduce 13, reduce 16) on '/' +43: reduce/reduce conflict (reduce 13, reduce 16) on '\n' +43: reduce/reduce conflict (reduce 13, reduce 16) on ')' +state 43 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : dexp '/' dexp . (13) + vexp : dexp . (16) + vexp : dexp . '+' vexp (20) + vexp : dexp . '-' vexp (22) + vexp : dexp . '*' vexp (24) + vexp : dexp . '/' vexp (26) + + . reduce 13 + + +state 44 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + vexp : dexp '/' vexp . (26) + + . reduce 26 + + +state 45 + vexp : vexp . '+' vexp (19) + vexp : vexp '+' vexp . (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '*' shift 26 + '/' shift 27 + '+' reduce 19 + '-' reduce 19 + '\n' reduce 19 + ')' reduce 19 + + +state 46 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp '-' vexp . (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + + '*' shift 26 + '/' shift 27 + '+' reduce 21 + '-' reduce 21 + '\n' reduce 21 + ')' reduce 21 + + +state 47 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp '*' vexp . (23) + vexp : vexp . '/' vexp (25) + + . reduce 23 + + +state 48 + vexp : vexp . '+' vexp (19) + vexp : vexp . '-' vexp (21) + vexp : vexp . '*' vexp (23) + vexp : vexp . '/' vexp (25) + vexp : vexp '/' vexp . (25) + + . reduce 25 + + +state 49 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : '-' dexp . (14) + + . reduce 14 + + +state 50 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : '(' dexp . ')' (15) + + '+' shift 51 + '-' shift 52 + '*' shift 53 + '/' shift 54 + ')' shift 34 + . error + + +state 51 + dexp : dexp '+' . dexp (10) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 58 + + +state 52 + dexp : dexp '-' . dexp (11) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 59 + + +state 53 + dexp : dexp '*' . dexp (12) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 60 + + +state 54 + dexp : dexp '/' . dexp (13) + + DREG shift 13 + CONST shift 4 + '-' shift 29 + '(' shift 30 + . error + + dexp goto 61 + + +state 55 + line : DREG '=' dexp '\n' . (5) + + . reduce 5 + + +state 56 + line : VREG '=' vexp '\n' . (6) + + . reduce 6 + + +state 57 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + vexp : '(' dexp ',' dexp . ')' (17) + + '+' shift 51 + '-' shift 52 + '*' shift 53 + '/' shift 54 + ')' shift 62 + . error + + +state 58 + dexp : dexp . '+' dexp (10) + dexp : dexp '+' dexp . (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + + '*' shift 53 + '/' shift 54 + '+' reduce 10 + '-' reduce 10 + '\n' reduce 10 + ')' reduce 10 + + +state 59 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp '-' dexp . (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + + '*' shift 53 + '/' shift 54 + '+' reduce 11 + '-' reduce 11 + '\n' reduce 11 + ')' reduce 11 + + +state 60 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp '*' dexp . (12) + dexp : dexp . '/' dexp (13) + + . reduce 12 + + +state 61 + dexp : dexp . '+' dexp (10) + dexp : dexp . '-' dexp (11) + dexp : dexp . '*' dexp (12) + dexp : dexp . '/' dexp (13) + dexp : dexp '/' dexp . (13) + + . reduce 13 + + +state 62 + vexp : '(' dexp ',' dexp ')' . (17) + + . reduce 17 + + +Rules never reduced: + lines : (1) + lines : lines line (2) + + +State 8 contains 5 shift/reduce conflicts. +State 15 contains 6 reduce/reduce conflicts. +State 17 contains 5 shift/reduce conflicts. +State 32 contains 4 shift/reduce conflicts. +State 37 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. +State 39 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. +State 41 contains 6 reduce/reduce conflicts. +State 43 contains 6 reduce/reduce conflicts. + + +15 terminals, 5 nonterminals +29 grammar rules, 63 states diff --git a/contrib/byacc/test/yacc/varsyntax_calc1.tab.c b/contrib/byacc/test/yacc/varsyntax_calc1.tab.c new file mode 100644 index 000000000000..49a1527817c7 --- /dev/null +++ b/contrib/byacc/test/yacc/varsyntax_calc1.tab.c @@ -0,0 +1,915 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM (-2) +#define YYEOF 0 +#ident "check variant syntax features" + +#ifndef yyparse +#define yyparse varsyntax_calc1_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex varsyntax_calc1_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror varsyntax_calc1_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar varsyntax_calc1_char +#endif /* yychar */ + +#ifndef yyval +#define yyval varsyntax_calc1_val +#endif /* yyval */ + +#ifndef yylval +#define yylval varsyntax_calc1_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug varsyntax_calc1_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs varsyntax_calc1_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag varsyntax_calc1_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs varsyntax_calc1_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen varsyntax_calc1_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred varsyntax_calc1_defred +#endif /* yydefred */ + +#ifndef yydgoto +#define yydgoto varsyntax_calc1_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex varsyntax_calc1_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex varsyntax_calc1_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex varsyntax_calc1_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable varsyntax_calc1_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck varsyntax_calc1_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname varsyntax_calc1_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule varsyntax_calc1_rule +#endif /* yyrule */ +#define YYPREFIX "varsyntax_calc1_" + +#define YYPURE 0 + +#line 3 "varsyntax_calc1.y" + +/* http://dinosaur.compilertools.net/yacc/index.html * /*/ + +#include <stdlib.h> +#include <stdio.h> +#include <ctype.h> +#include <math.h> + +typedef struct interval +{ + double lo, hi; +} +INTERVAL; + +INTERVAL vmul(double, double, INTERVAL); +INTERVAL vdiv(double, double, INTERVAL); + +extern int yylex(void); +static void yyerror(const char *s); + +int dcheck(INTERVAL); + +double dreg[26]; +INTERVAL vreg[26]; + +#line 32 "varsyntax_calc1.y" +#ifdef YYSTYPE +#undef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +#endif +#ifndef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +typedef union +{ + int ival; /* dreg & vreg array index values*/ + double dval; /* floating point values*/ + INTERVAL vval; /* interval values*/ +} YYSTYPE; +#endif /* !YYSTYPE_IS_DECLARED */ +#line 142 "varsyntax_calc1.tab.c" + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +extern int YYPARSE_DECL(); + +#define DREG 257 +#define VREG 258 +#define CONST 259 +#define UMINUS 260 +#define YYERRCODE 256 +typedef short YYINT; +static const YYINT varsyntax_calc1_lhs[] = { -1, + 3, 3, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, +}; +static const YYINT varsyntax_calc1_len[] = { 2, + 0, 2, 2, 2, 4, 4, 2, 1, 1, 3, + 3, 3, 3, 2, 3, 1, 5, 1, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 3, +}; +static const YYINT varsyntax_calc1_defred[] = { 0, + 0, 0, 0, 8, 0, 0, 0, 0, 0, 7, + 0, 0, 9, 18, 14, 27, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, + 0, 0, 0, 15, 0, 28, 0, 0, 0, 0, + 12, 24, 13, 26, 0, 0, 23, 25, 14, 0, + 0, 0, 0, 0, 5, 6, 0, 0, 0, 12, + 13, 17, +}; +static const YYINT varsyntax_calc1_dgoto[] = { 7, + 32, 9, 0, +}; +static const YYINT varsyntax_calc1_sindex[] = { -40, + -8, -48, -47, 0, -37, -37, 0, 2, 17, 0, + -34, -37, 0, 0, 0, 0, -25, 90, -37, -37, + -37, -37, 0, -37, -37, -37, -37, 0, -34, -34, + 25, 125, 31, 0, -34, 0, -11, 37, -11, 37, + 0, 0, 0, 0, 37, 37, 0, 0, 0, 111, + -34, -34, -34, -34, 0, 0, 118, 69, 69, 0, + 0, 0, +}; +static const YYINT varsyntax_calc1_rindex[] = { 0, + 0, 38, 44, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -9, 0, 0, 0, 0, 51, -3, 56, 61, + 0, 0, 0, 0, 67, 72, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 78, 83, 0, + 0, 0, +}; +static const YYINT varsyntax_calc1_gindex[] = { 0, + 4, 124, 0, +}; +#define YYTABLESIZE 225 +static const YYINT varsyntax_calc1_table[] = { 6, + 16, 10, 6, 8, 5, 30, 20, 5, 15, 17, + 29, 23, 11, 12, 31, 34, 21, 19, 35, 20, + 0, 22, 37, 39, 41, 43, 28, 0, 0, 0, + 21, 16, 49, 50, 55, 22, 0, 20, 57, 20, + 56, 20, 0, 21, 19, 0, 20, 9, 22, 0, + 0, 0, 0, 18, 58, 59, 60, 61, 26, 24, + 10, 25, 0, 27, 0, 11, 53, 51, 0, 52, + 22, 54, 26, 24, 0, 25, 19, 27, 26, 9, + 9, 21, 9, 27, 9, 18, 18, 10, 18, 0, + 18, 10, 11, 10, 10, 10, 11, 0, 11, 11, + 11, 22, 0, 22, 0, 22, 0, 19, 0, 19, + 53, 19, 21, 0, 21, 54, 21, 0, 10, 0, + 10, 0, 10, 11, 0, 11, 0, 11, 16, 18, + 36, 26, 24, 0, 25, 33, 27, 0, 0, 0, + 0, 0, 38, 40, 42, 44, 0, 45, 46, 47, + 48, 34, 53, 51, 0, 52, 0, 54, 62, 53, + 51, 0, 52, 0, 54, 0, 21, 19, 0, 20, + 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 2, 3, 4, 13, + 14, 4, 13, 0, 4, +}; +static const YYINT varsyntax_calc1_check[] = { 40, + 10, 10, 40, 0, 45, 40, 10, 45, 5, 6, + 45, 10, 61, 61, 11, 41, 42, 43, 44, 45, + -1, 47, 19, 20, 21, 22, 10, -1, -1, -1, + 42, 41, 29, 30, 10, 47, -1, 41, 35, 43, + 10, 45, -1, 42, 43, -1, 45, 10, 47, -1, + -1, -1, -1, 10, 51, 52, 53, 54, 42, 43, + 10, 45, -1, 47, -1, 10, 42, 43, -1, 45, + 10, 47, 42, 43, -1, 45, 10, 47, 42, 42, + 43, 10, 45, 47, 47, 42, 43, 10, 45, -1, + 47, 41, 10, 43, 44, 45, 41, -1, 43, 44, + 45, 41, -1, 43, -1, 45, -1, 41, -1, 43, + 42, 45, 41, -1, 43, 47, 45, -1, 41, -1, + 43, -1, 45, 41, -1, 43, -1, 45, 5, 6, + 41, 42, 43, -1, 45, 12, 47, -1, -1, -1, + -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, + 27, 41, 42, 43, -1, 45, -1, 47, 41, 42, + 43, -1, 45, -1, 47, -1, 42, 43, -1, 45, + -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, 257, 258, 259, 257, + 258, 259, 257, -1, 259, +}; +#define YYFINAL 7 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 260 +#define YYUNDFTOKEN 266 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) +#if YYDEBUG +static const char *const varsyntax_calc1_name[] = { + +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0, +0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,"DREG","VREG","CONST","UMINUS",0,0,0,0,0,"illegal-symbol", +}; +static const char *const varsyntax_calc1_rule[] = { +"$accept : line", +"lines :", +"lines : lines line", +"line : dexp '\\n'", +"line : vexp '\\n'", +"line : DREG '=' dexp '\\n'", +"line : VREG '=' vexp '\\n'", +"line : error '\\n'", +"dexp : CONST", +"dexp : DREG", +"dexp : dexp '+' dexp", +"dexp : dexp '-' dexp", +"dexp : dexp '*' dexp", +"dexp : dexp '/' dexp", +"dexp : '-' dexp", +"dexp : '(' dexp ')'", +"vexp : dexp", +"vexp : '(' dexp ',' dexp ')'", +"vexp : VREG", +"vexp : vexp '+' vexp", +"vexp : dexp '+' vexp", +"vexp : vexp '-' vexp", +"vexp : dexp '-' vexp", +"vexp : vexp '*' vexp", +"vexp : dexp '*' vexp", +"vexp : vexp '/' vexp", +"vexp : dexp '/' vexp", +"vexp : '-' vexp", +"vexp : '(' vexp ')'", + +}; +#endif + +int yydebug; +int yynerrs; + +int yyerrflag; +int yychar; +YYSTYPE yyval; +YYSTYPE yylval; + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH 10000 +#endif +#endif + +#define YYINITSTACKSIZE 200 + +typedef struct { + unsigned stacksize; + YYINT *s_base; + YYINT *s_mark; + YYINT *s_last; + YYSTYPE *l_base; + YYSTYPE *l_mark; +} YYSTACKDATA; +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#line 178 "varsyntax_calc1.y" + /* beginning of subroutines section */ + +#define BSZ 50 /* buffer size for floating point numbers */ + + /* lexical analysis */ + +static void +yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); +} + +int +yylex(void) +{ + int c; + + while ((c = getchar()) == ' ') + { /* skip over blanks */ + } + + if (isupper(c)) + { + yylval.ival = c - 'A'; + return (VREG); + } + if (islower(c)) + { + yylval.ival = c - 'a'; + return (DREG); + } + + if (isdigit(c) || c == '.') + { + /* gobble up digits, points, exponents */ + char buf[BSZ + 1], *cp = buf; + int dot = 0, expr = 0; + + for (; (cp - buf) < BSZ; ++cp, c = getchar()) + { + + *cp = (char) c; + if (isdigit(c)) + continue; + if (c == '.') + { + if (dot++ || expr) + return ('.'); /* will cause syntax error */ + continue; + } + + if (c == 'e') + { + if (expr++) + return ('e'); /* will cause syntax error */ + continue; + } + + /* end of number */ + break; + } + *cp = '\0'; + + if ((cp - buf) >= BSZ) + printf("constant too long: truncated\n"); + else + ungetc(c, stdin); /* push back last char read */ + yylval.dval = atof(buf); + return (CONST); + } + return (c); +} + +static INTERVAL +hilo(double a, double b, double c, double d) +{ + /* returns the smallest interval containing a, b, c, and d */ + /* used by *, / routines */ + INTERVAL v; + + if (a > b) + { + v.hi = a; + v.lo = b; + } + else + { + v.hi = b; + v.lo = a; + } + + if (c > d) + { + if (c > v.hi) + v.hi = c; + if (d < v.lo) + v.lo = d; + } + else + { + if (d > v.hi) + v.hi = d; + if (c < v.lo) + v.lo = c; + } + return (v); +} + +INTERVAL +vmul(double a, double b, INTERVAL v) +{ + return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); +} + +int +dcheck(INTERVAL v) +{ + if (v.hi >= 0. && v.lo <= 0.) + { + printf("divisor interval contains 0.\n"); + return (1); + } + return (0); +} + +INTERVAL +vdiv(double a, double b, INTERVAL v) +{ + return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); +} +#line 492 "varsyntax_calc1.tab.c" + +#if YYDEBUG +#include <stdio.h> /* needed for printf */ +#endif + +#include <stdlib.h> /* needed for malloc, etc */ +#include <string.h> /* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ + int i; + unsigned newsize; + YYINT *newss; + YYSTYPE *newvs; + + if ((newsize = data->stacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return YYENOMEM; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = (int) (data->s_mark - data->s_base); + newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); + if (newss == 0) + return YYENOMEM; + + data->s_base = newss; + data->s_mark = newss + i; + + newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); + if (newvs == 0) + return YYENOMEM; + + data->l_base = newvs; + data->l_mark = newvs + i; + + data->stacksize = newsize; + data->s_last = data->s_base + newsize - 1; + return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ + free(data->s_base); + free(data->l_base); + memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab + +int +YYPARSE_DECL() +{ + int yym, yyn, yystate; +#if YYDEBUG + const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + yystate = 0; + +#if YYPURE + memset(&yystack, 0, sizeof(yystack)); +#endif + + if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; + yystack.s_mark = yystack.s_base; + yystack.l_mark = yystack.l_base; + yystate = 0; + *yystack.s_mark = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + YYERROR_CALL("syntax error"); + + goto yyerrlab; + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + yystate = yytable[yyn]; + *++yystack.s_mark = yytable[yyn]; + *++yystack.l_mark = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yystack.s_mark); +#endif + if (yystack.s_mark <= yystack.s_base) goto yyabort; + --yystack.s_mark; + --yystack.l_mark; + } + } + } + else + { + if (yychar == YYEOF) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yystack.l_mark[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 3: +#line 59 "varsyntax_calc1.y" + { + (void) printf("%15.8f\n", yystack.l_mark[-1].dval); + } +break; +case 4: +#line 63 "varsyntax_calc1.y" + { + (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi); + } +break; +case 5: +#line 67 "varsyntax_calc1.y" + { + dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval; + } +break; +case 6: +#line 71 "varsyntax_calc1.y" + { + vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval; + } +break; +case 7: +#line 75 "varsyntax_calc1.y" + { + yyerrok; + } +break; +case 9: +#line 82 "varsyntax_calc1.y" + { + yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/ + } +break; +case 10: +#line 86 "varsyntax_calc1.y" + { + yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval; + } +break; +case 11: +#line 90 "varsyntax_calc1.y" + { + yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval; + } +break; +case 12: +#line 94 "varsyntax_calc1.y" + { + yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval; + } +break; +case 13: +#line 98 "varsyntax_calc1.y" + { + yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval; + } +break; +case 14: +#line 102 "varsyntax_calc1.y" + { + yyval.dval = -yystack.l_mark[0].dval; + } +break; +case 15: +#line 106 "varsyntax_calc1.y" + { + yyval.dval = yystack.l_mark[-1].dval; + } +break; +case 16: +#line 112 "varsyntax_calc1.y" + { + yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval; + } +break; +case 17: +#line 116 "varsyntax_calc1.y" + { + yyval.vval.lo = yystack.l_mark[-3].dval; + yyval.vval.hi = yystack.l_mark[-1].dval; + if ( yyval.vval.lo > yyval.vval.hi ) + { + (void) printf("interval out of order\n"); + YYERROR; + } + } +break; +case 18: +#line 126 "varsyntax_calc1.y" + { + yyval.vval = vreg[yystack.l_mark[0].ival]; + } +break; +case 19: +#line 130 "varsyntax_calc1.y" + { + yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi; + yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo; + } +break; +case 20: +#line 135 "varsyntax_calc1.y" + { + yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi; + yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo; + } +break; +case 21: +#line 140 "varsyntax_calc1.y" + { + yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo; + yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi; + } +break; +case 22: +#line 145 "varsyntax_calc1.y" + { + yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo; + yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi; + } +break; +case 23: +#line 150 "varsyntax_calc1.y" + { + yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); + } +break; +case 24: +#line 154 "varsyntax_calc1.y" + { + yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); + } +break; +case 25: +#line 158 "varsyntax_calc1.y" + { + if (dcheck(yystack.l_mark[0].vval)) YYERROR; + yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); + } +break; +case 26: +#line 163 "varsyntax_calc1.y" + { + if (dcheck ( yystack.l_mark[0].vval )) YYERROR; + yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); + } +break; +case 27: +#line 168 "varsyntax_calc1.y" + { + yyval.vval.hi = -yystack.l_mark[0].vval.lo; + yyval.vval.lo = -yystack.l_mark[0].vval.hi; + } +break; +case 28: +#line 173 "varsyntax_calc1.y" + { + yyval.vval = yystack.l_mark[-1].vval; + } +break; +#line 857 "varsyntax_calc1.tab.c" + } + yystack.s_mark -= yym; + yystate = *yystack.s_mark; + yystack.l_mark -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yystack.s_mark = YYFINAL; + *++yystack.l_mark = yyval; + if (yychar < 0) + { + if ((yychar = YYLEX) < 0) yychar = YYEOF; +#if YYDEBUG + if (yydebug) + { + yys = yyname[YYTRANSLATE(yychar)]; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == YYEOF) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +#endif + if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + { + goto yyoverflow; + } + *++yystack.s_mark = (YYINT) yystate; + *++yystack.l_mark = yyval; + goto yyloop; + +yyoverflow: + YYERROR_CALL("yacc stack overflow"); + +yyabort: + yyfreestack(&yystack); + return (1); + +yyaccept: + yyfreestack(&yystack); + return (0); +} diff --git a/contrib/byacc/test/yacc/varsyntax_calc1.tab.h b/contrib/byacc/test/yacc/varsyntax_calc1.tab.h new file mode 100644 index 000000000000..fd07f2cc3d41 --- /dev/null +++ b/contrib/byacc/test/yacc/varsyntax_calc1.tab.h @@ -0,0 +1,18 @@ +#define DREG 257 +#define VREG 258 +#define CONST 259 +#define UMINUS 260 +#ifdef YYSTYPE +#undef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +#endif +#ifndef YYSTYPE_IS_DECLARED +#define YYSTYPE_IS_DECLARED 1 +typedef union +{ + int ival; /* dreg & vreg array index values*/ + double dval; /* floating point values*/ + INTERVAL vval; /* interval values*/ +} YYSTYPE; +#endif /* !YYSTYPE_IS_DECLARED */ +extern YYSTYPE varsyntax_calc1_lval; |