⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regression.at

📁 GNU的词法/语法分析器bison源码
💻 AT
📖 第 1 页 / 共 2 页
字号:
AT_DATA([input.y],[[%token	undef_id_tok const_id_tok%start CONST_DEC_PART%%CONST_DEC_PART:         CONST_DEC_LIST        ;CONST_DEC_LIST:	  CONST_DEC        | CONST_DEC_LIST CONST_DEC        ;CONST_DEC:	  { } undef_id_tok '=' const_id_tok ';'        ;%%]])AT_CHECK([bison -v input.y])AT_CHECK([cat input.output], 0,[[Grammar    0 $accept: CONST_DEC_PART $end    1 CONST_DEC_PART: CONST_DEC_LIST    2 CONST_DEC_LIST: CONST_DEC    3               | CONST_DEC_LIST CONST_DEC    4 @1: /* empty */    5 CONST_DEC: @1 undef_id_tok '=' const_id_tok ';'Terminals, with rules where they appear$end (0) 0';' (59) 5'=' (61) 5error (256)undef_id_tok (258) 5const_id_tok (259) 5Nonterminals, with rules where they appear$accept (7)    on left: 0CONST_DEC_PART (8)    on left: 1, on right: 0CONST_DEC_LIST (9)    on left: 2 3, on right: 1 3CONST_DEC (10)    on left: 5, on right: 2 3@1 (11)    on left: 4, on right: 5state 0    0 $accept: . CONST_DEC_PART $end    $default  reduce using rule 4 (@1)    CONST_DEC_PART  go to state 1    CONST_DEC_LIST  go to state 2    CONST_DEC       go to state 3    @1              go to state 4state 1    0 $accept: CONST_DEC_PART . $end    $end  shift, and go to state 5state 2    1 CONST_DEC_PART: CONST_DEC_LIST .    3 CONST_DEC_LIST: CONST_DEC_LIST . CONST_DEC    undef_id_tok  reduce using rule 4 (@1)    $default      reduce using rule 1 (CONST_DEC_PART)    CONST_DEC  go to state 6    @1         go to state 4state 3    2 CONST_DEC_LIST: CONST_DEC .    $default  reduce using rule 2 (CONST_DEC_LIST)state 4    5 CONST_DEC: @1 . undef_id_tok '=' const_id_tok ';'    undef_id_tok  shift, and go to state 7state 5    0 $accept: CONST_DEC_PART $end .    $default  acceptstate 6    3 CONST_DEC_LIST: CONST_DEC_LIST CONST_DEC .    $default  reduce using rule 3 (CONST_DEC_LIST)state 7    5 CONST_DEC: @1 undef_id_tok . '=' const_id_tok ';'    '='  shift, and go to state 8state 8    5 CONST_DEC: @1 undef_id_tok '=' . const_id_tok ';'    const_id_tok  shift, and go to state 9state 9    5 CONST_DEC: @1 undef_id_tok '=' const_id_tok . ';'    ';'  shift, and go to state 10state 10    5 CONST_DEC: @1 undef_id_tok '=' const_id_tok ';' .    $default  reduce using rule 5 (CONST_DEC)]])AT_CLEANUP## --------------- #### Web2c Actions.  #### --------------- ### The generation of the mapping `state -> action' was once wrong in# extremely specific situations.  web2c.y exhibits this situation.# Below is a stripped version of the grammar.  It looks like one can# simplify it further, but just don't: it is tuned to exhibit a bug,# which disapears when applying sane grammar transformations.## It used to be wrong on yydefact only:## static const short int yydefact[] =#  {# -       2,     0,     1,     0,     0,     2,     3,     2,     5,     4,# +       2,     0,     1,     0,     0,     0,     3,     2,     5,     4,#         0,     0#  };## but let's check all the tables.AT_SETUP([Web2c Actions])AT_KEYWORDS([report])AT_DATA([input.y],[[%%statement:  struct_stat;struct_stat:  /* empty. */ | if else;if: "if" "const" "then" statement;else: "else" statement;%%]])AT_CHECK([bison -v -o input.c input.y])# Check only the tables.  We don't use --no-parser, because it is# still to be implemented in the experimental branch of Bison.[sed -n 's/  *$//;/^static const.*\[\] =/,/^}/p' input.c >tables.c]AT_CHECK([[cat tables.c]], 0,[[static const unsigned char yytranslate[] ={       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,       5,     6};static const unsigned char yyprhs[] ={       0,     0,     3,     5,     6,     9,    14};static const yysigned_char yyrhs[] ={       8,     0,    -1,     9,    -1,    -1,    10,    11,    -1,     3,       4,     5,     8,    -1,     6,     8,    -1};static const unsigned char yyrline[] ={       0,     2,     2,     3,     3,     4,     5};static const char *const yytname[] ={  "$end", "error", "$undefined", "\"if\"", "\"const\"", "\"then\"",  "\"else\"", "$accept", "statement", "struct_stat", "if", "else", 0};static const unsigned short int yytoknum[] ={       0,   256,   257,   258,   259,   260,   261};static const unsigned char yyr1[] ={       0,     7,     8,     9,     9,    10,    11};static const unsigned char yyr2[] ={       0,     2,     1,     0,     2,     4,     2};static const unsigned char yydefact[] ={       3,     0,     0,     2,     0,     0,     1,     3,     4,     3,       6,     5};static const yysigned_char yydefgoto[] ={      -1,     2,     3,     4,     8};static const yysigned_char yypact[] ={      -2,    -1,     4,    -8,     0,     2,    -8,    -2,    -8,    -2,      -8,    -8};static const yysigned_char yypgoto[] ={      -8,    -7,    -8,    -8,    -8};static const unsigned char yytable[] ={      10,     1,    11,     5,     6,     0,     7,     9};static const yysigned_char yycheck[] ={       7,     3,     9,     4,     0,    -1,     6,     5};static const unsigned char yystos[] ={       0,     3,     8,     9,    10,     4,     0,     6,    11,     5,       8,     8};]])AT_CLEANUP## ------------------------- #### yycheck Bound Violation.  #### ------------------------- ### _AT_DATA_DANCER_Y(BISON-OPTIONS)# --------------------------------# The following grammar, taken from Andrew Suffield's GPL'd implementation# of DGMTP, the Dancer Generic Message Transport Protocol, used to violate# yycheck's bounds where issuing a verbose error message.  Keep this test# so that possible bound checking compilers could check all the skeletons.m4_define([_AT_DATA_DANCER_Y],[AT_DATA_GRAMMAR([dancer.y],[%{static int yylex (AT_LALR1_CC_IF([int *], [void]));AT_LALR1_CC_IF([],[#include <stdio.h>static void yyerror (const char *);])%}$1%token ARROW INVALID NUMBER STRING DATA%defines%verbose%error-verbose/* Grammar follows */%%line: header body   ;header: '<' from ARROW to '>' type ':'   | '<' ARROW to '>' type ':'   | ARROW to type ':'   | type ':'   | '<' '>'   ;from: DATA   | STRING   | INVALID   ;to: DATA   | STRING   | INVALID   ;type: DATA   | STRING   | INVALID   ;body: /* empty */   | body member   ;member: STRING   | DATA   | '+' NUMBER   | '-' NUMBER   | NUMBER   | INVALID   ;%%AT_LALR1_CC_IF([/* A C++ error reporting function. */voidyy::parser::error (const location&, const std::string& m){  std::cerr << m << std::endl;}intyyparse (){  yy::parser parser;  parser.set_debug_level (!!YYDEBUG);  return parser.parse ();}],[static voidyyerror (const char *s){  fprintf (stderr, "%s\n", s);}])static intyylex (AT_LALR1_CC_IF([int *lval], [void]))[{  static int toknum = 0;  int tokens[] =    {      ':', -1    };  ]AT_LALR1_CC_IF([*lval = 0; /* Pacify GCC.  */])[  return tokens[toknum++];}]intmain (void){  return yyparse ();}])])# _AT_DATA_DANCER_Y# AT_CHECK_DANCER(BISON-OPTIONS)# ------------------------------# Generate the grammar, compile it, run it.m4_define([AT_CHECK_DANCER],[AT_SETUP([Dancer $1])AT_BISON_OPTION_PUSHDEFS([$1])_AT_DATA_DANCER_Y([$1])AT_CHECK([bison -o dancer.c dancer.y])AT_LALR1_CC_IF(  [AT_CHECK([bison -o dancer.cc dancer.y])   AT_COMPILE_CXX([dancer])],  [AT_CHECK([bison -o dancer.c dancer.y])   AT_COMPILE([dancer])])AT_PARSER_CHECK([./dancer], 1, [],[syntax error, unexpected ':'])AT_BISON_OPTION_POPDEFSAT_CLEANUP])AT_CHECK_DANCER()AT_CHECK_DANCER([%glr-parser])AT_CHECK_DANCER([%skeleton "lalr1.cc"])

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -