📄 y.tab.c
字号:
278, 279, 280, 281, -1, 0, -1, -1, 285, 286,
-1, 289, 289, 290, -1, 292, 293, -1, -1, -1,
297, 298, 299, -1, -1, 260, -1, 262, -1, 264,
-1, 266, -1, 268, -1, -1, 270, 271, 272, 273,
274, 275, 276, 277, 278, 279, 280, 281, -1, -1,
285, 286, 286, -1, 289, 290, -1, 292, 293, -1,
-1, -1, 297, 298, 299, 260, -1, 262, -1, 264,
-1, 266, -1, 268, 270, 271, 272, 273, 274, 275,
276, 277, 278, 279, 280, 281, -1, -1, -1, 285,
285, 286, -1, -1, 289, 290, -1, 292, 293, -1,
-1, -1, 297, 298, 299, 260, -1, 262, -1, 264,
266, 266, -1, 268, 270, 271, 272, 273, 274, 275,
276, 277, 278, 279, 280, 281, -1, -1, -1, -1,
285, 286, -1, -1, 289, 290, -1, 292, 293, -1,
-1, -1, 297, 298, 299, 260, -1, 262, -1, 264,
266, 266, -1, 268, 270, 271, 272, 273, 274, 275,
276, 277, 278, 279, 280, 281, -1, -1, -1, -1,
285, 286, -1, -1, 289, 290, -1, 292, 293, -1,
-1, -1, 297, 298, 299, 260, -1, 262, -1, 264,
-1, 266, -1, 268, 270, 271, 272, 273, 274, 275,
276, 277, 278, 279, 280, 281, -1, -1, -1, -1,
285, 286, -1, -1, 289, 290, -1, 292, 293, -1,
-1, -1, 297, 298, 299, 260, -1, 262, -1, 264,
-1, 266, -1, 268, 270, 271, 272, 273, 274, 275,
276, 277, 278, 279, -1, -1, -1, -1, -1, -1,
285, 286, -1, -1, 289, 290, -1, 292, 293, -1,
-1, -1, 297, 298, 299, 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,
285, -1, -1, -1, 289, 290, -1, 292, 293, -1,
-1, -1, 297, 298, 299,
};
#define YYFINAL 13
#ifndef YYDEBUG
#define YYDEBUG 0
#endif
#define YYMAXTOKEN 300
#if YYDEBUG
char *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,"ID","STRING","INT","COMMA",
"COLON","SEMICOLON","LPAREN","RPAREN","LBRACK","RBRACK","LBRACE","RBRACE","DOT",
"PLUS","MINUS","TIMES","DIVIDE","EQ","NEQ","LT","LE","GT","GE","AND","OR",
"ASSIGN","ARRAY","IF","THEN","ELSE","WHILE","FOR","TO","DO","LET","IN","END",
"OF","BREAK","NIL","FUNCTION","VAR","TYPE","UMINUS",
};
char *yyrule[] = {
"$accept : program",
"program : ID",
"program : STRING",
"program : INT",
"program : NIL",
"program : lvalue",
"program : binary_operation_expr",
"program : assign_expr",
"program : function_expr",
"program : paren_expr",
"program : record_expr",
"program : ID LBRACK program RBRACK OF program",
"program : case_expr",
"program : WHILE program DO program",
"program : FOR ID ASSIGN program TO program DO program",
"program : BREAK",
"program : scope_expr",
"program : LPAREN error RPAREN",
"program : error SEMICOLON program",
"lvalue : ID DOT ID",
"lvalue : ID LBRACK program RBRACK",
"lvalue : lvalue DOT ID",
"lvalue : lvalue LBRACK program RBRACK",
"binary_operation_expr : program OR program",
"binary_operation_expr : program AND program",
"binary_operation_expr : program EQ program",
"binary_operation_expr : program LT program",
"binary_operation_expr : program LE program",
"binary_operation_expr : program GT program",
"binary_operation_expr : program GE program",
"binary_operation_expr : program NEQ program",
"binary_operation_expr : program PLUS program",
"binary_operation_expr : program MINUS program",
"binary_operation_expr : program TIMES program",
"binary_operation_expr : program DIVIDE program",
"binary_operation_expr : MINUS program",
"assign_expr : lvalue ASSIGN program",
"assign_expr : ID ASSIGN program",
"function_expr : ID LPAREN RPAREN",
"function_expr : ID LPAREN expr_list RPAREN",
"expr_list : program",
"expr_list : program COMMA expr_list",
"paren_expr : LPAREN RPAREN",
"paren_expr : LPAREN expr_seq RPAREN",
"expr_seq : program",
"expr_seq : program SEMICOLON expr_seq",
"record_expr : ID LBRACE RBRACE",
"record_expr : ID LBRACE fieldexpr_list RBRACE",
"fieldexpr_list : ID EQ program",
"fieldexpr_list : ID EQ program COMMA fieldexpr_list",
"case_expr : IF program THEN program",
"case_expr : IF program THEN program ELSE program",
"scope_expr : LET dec_list IN END",
"scope_expr : LET dec_list IN expr_seq END",
"dec_list : dec",
"dec_list : dec dec_list",
"dec : type_dec",
"dec : variable_dec",
"dec : function_dec",
"type_dec : TYPE ID EQ type",
"type : ID",
"type : LBRACE RBRACE",
"type : LBRACE field_list RBRACE",
"type : ARRAY OF ID",
"field_list : ID COLON ID",
"field_list : ID COLON ID COMMA field_list",
"variable_dec : VAR ID ASSIGN program",
"variable_dec : VAR ID COLON ID ASSIGN program",
"function_dec : FUNCTION ID LPAREN RPAREN EQ program",
"function_dec : FUNCTION ID LPAREN RPAREN COLON ID EQ program",
"function_dec : FUNCTION ID LPAREN field_list RPAREN EQ program",
"function_dec : FUNCTION ID LPAREN field_list RPAREN COLON ID EQ program",
};
#endif
#define yyclearin (yychar=(-1))
#define yyerrok (yyerrflag=0)
#ifdef YYSTACKSIZE
#ifndef YYMAXDEPTH
#define YYMAXDEPTH YYSTACKSIZE
#endif
#else
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
#define YYSTACKSIZE 600
#define YYMAXDEPTH 600
#endif
#endif
int yydebug;
int yynerrs;
int yyerrflag;
int yychar;
short *yyssp;
YYSTYPE *yyvsp;
YYSTYPE yyval;
YYSTYPE yylval;
short yyss[YYSTACKSIZE];
YYSTYPE yyvs[YYSTACKSIZE];
#define yystacksize YYSTACKSIZE
#define YYABORT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR goto yyerrlab
int
yyparse()
{
register int yym, yyn, yystate;
#if YYDEBUG
register char *yys;
if (yys = getenv("YYDEBUG"))
{
yyn = *yys;
if (yyn >= '0' && yyn <= '9')
yydebug = yyn - '0';
}
#endif
yynerrs = 0;
yyerrflag = 0;
yychar = (-1);
yyssp = yyss;
yyvsp = yyvs;
*yyssp = yystate = 0;
yyloop:
if (yyn = yydefred[yystate]) goto yyreduce;
if (yychar < 0)
{
if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
if (yydebug)
{
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
printf("yydebug: state %d, reading %d (%s)\n", yystate,
yychar, yys);
}
#endif
}
if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
{
#if YYDEBUG
if (yydebug)
printf("yydebug: state %d, shifting to state %d\n",
yystate, yytable[yyn]);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
yychar = (-1);
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;
#ifdef lint
goto yynewerror;
yynewerror:
#endif
yyerror("syntax error");
#ifdef lint
goto yyerrlab;
yyerrlab:
#endif
++yynerrs;
yyinrecovery:
if (yyerrflag < 3)
{
yyerrflag = 3;
for (;;)
{
if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
{
#if YYDEBUG
if (yydebug)
printf("yydebug: state %d, error recovery shifting\
to state %d\n", *yyssp, yytable[yyn]);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
goto yyloop;
}
else
{
#if YYDEBUG
if (yydebug)
printf("yydebug: error recovery discarding state %d\n",
*yyssp);
#endif
if (yyssp <= yyss) goto yyabort;
--yyssp;
--yyvsp;
}
}
}
else
{
if (yychar == 0) goto yyabort;
#if YYDEBUG
if (yydebug)
{
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
printf("yydebug: state %d, error recovery discards token %d (%s)\n",
yystate, yychar, yys);
}
#endif
yychar = (-1);
goto yyloop;
}
yyreduce:
#if YYDEBUG
if (yydebug)
printf("yydebug: state %d, reducing by rule %d (%s)\n",
yystate, yyn, yyrule[yyn]);
#endif
yym = yylen[yyn];
yyval = yyvsp[1-yym];
switch (yyn)
{
}
yyssp -= yym;
yystate = *yyssp;
yyvsp -= yym;
yym = yylhs[yyn];
if (yystate == 0 && yym == 0)
{
#if YYDEBUG
if (yydebug)
printf("yydebug: after reduction, shifting from state 0 to\
state %d\n", YYFINAL);
#endif
yystate = YYFINAL;
*++yyssp = YYFINAL;
*++yyvsp = yyval;
if (yychar < 0)
{
if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
if (yydebug)
{
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
printf("yydebug: state %d, reading %d (%s)\n",
YYFINAL, yychar, yys);
}
#endif
}
if (yychar == 0) 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("yydebug: after reduction, shifting from state %d \
to state %d\n", *yyssp, yystate);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
goto yyoverflow;
}
*++yyssp = yystate;
*++yyvsp = yyval;
goto yyloop;
yyoverflow:
yyerror("yacc stack overflow");
yyabort:
return (1);
yyaccept:
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -