📄 parse.c
字号:
}
break;
case 73:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 425 ".\\parse.y"
yyval.ptree = newExpNode(OpK);
yyval.ptree -> child[0] = yyattribute(1 - 3).ptree;
yyval.ptree -> child[1] = yyattribute(3 - 3).ptree;
yyval.ptree -> attr.op = B_LEFT;
#line 1319 "parse.c"
}
}
break;
case 74:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 431 ".\\parse.y"
yyval.ptree = newExpNode(OpK);
yyval.ptree -> child[0] = yyattribute(1 - 3).ptree;
yyval.ptree -> child[1] = yyattribute(3 - 3).ptree;
yyval.ptree -> attr.op = B_RIGHT;
#line 1336 "parse.c"
}
}
break;
case 75:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 437 ".\\parse.y"
yyval.ptree = newExpNode(OpK);
yyval.ptree -> child[0] = yyattribute(2 - 2).ptree;
yyval.ptree -> attr.op = NOT;
#line 1352 "parse.c"
}
}
break;
case 76:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 442 ".\\parse.y"
yyval.ptree = newExpNode(OpK);
yyval.ptree -> child[0] = yyattribute(2 - 2).ptree;
yyval.ptree -> attr.op = B_NOT;
#line 1368 "parse.c"
}
}
break;
case 77:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 447 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 1381 "parse.c"
}
}
break;
case 78:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 450 ".\\parse.y"
yyval.ptree = yyattribute(2 - 3).ptree;
#line 1394 "parse.c"
}
}
break;
case 79:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 452 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 1407 "parse.c"
}
}
break;
case 80:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 454 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 1420 "parse.c"
}
}
break;
case 81:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 456 ".\\parse.y"
yyval.ptree = newExpNode(NumK);
yyval.ptree -> type = Integer;
yyval.ptree -> attr.val.i = atoi(tokenString);
#line 1436 "parse.c"
}
}
break;
case 82:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 461 ".\\parse.y"
yyval.ptree = newExpNode(FnumK);
yyval.ptree -> type = Double;
yyval.ptree -> attr.val.f = atof(tokenString);
#line 1452 "parse.c"
}
}
break;
case 83:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 466 ".\\parse.y"
yyval.ptree = newExpNode(CharK);
yyval.ptree -> type = Char;
yyval.ptree -> attr.val.i = *(tokenString + 1);
#line 1468 "parse.c"
}
}
break;
case 84:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[5];
yyinitdebug(yya, 5);
#endif
{
#line 472 ".\\parse.y"
yyval.ptree = newStmtNode(CallK);
yyval.ptree -> attr.name = yyattribute(1 - 4).ptree -> attr.name;
yyval.ptree -> child[0] = yyattribute(3 - 4).ptree;
#line 1484 "parse.c"
}
}
break;
case 85:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 478 ".\\parse.y"
TreeNode * t = yyattribute(1 - 3).ptree;
if (t != NULL)
{ while (t->sibling != NULL)
t = t->sibling;
t->sibling = yyattribute(3 - 3).ptree;
yyval.ptree = yyattribute(1 - 3).ptree; }
else yyval.ptree = yyattribute(3 - 3).ptree;
#line 1504 "parse.c"
}
}
break;
case 86:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 487 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 1517 "parse.c"
}
}
break;
case 87:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 490 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 1530 "parse.c"
}
}
break;
case 88:
{
#line 492 ".\\parse.y"
yyval.ptree = NULL;
#line 1538 "parse.c"
}
break;
default:
yyassert(0);
break;
}
}
#ifdef YYDEBUG
YYCONST yysymbol_t YYNEARFAR YYBASED_CODE YYDCDECL yysymbol[] = {
{ "$end", 0 },
{ "error", 256 },
{ "INT", 259 },
{ "CHAR", 260 },
{ "DOUBLE", 261 },
{ "VOID", 262 },
{ "IF", 263 },
{ "ELSE", 264 },
{ "WHILE", 265 },
{ "ASSIGN", 266 },
{ "RETURN", 267 },
{ "FOR", 268 },
{ "INPUT", 269 },
{ "OUTPUT", 270 },
{ "ID", 271 },
{ "NUM", 272 },
{ "FNUM", 273 },
{ "SCHAR", 274 },
{ "SEMI", 275 },
{ "COMMA", 276 },
{ "LP", 277 },
{ "RP", 278 },
{ "LSP", 279 },
{ "RSP", 280 },
{ "LFP", 281 },
{ "RFP", 282 },
{ "PLUS", 283 },
{ "SUB", 284 },
{ "MUT", 285 },
{ "DIV", 286 },
{ "MOD", 287 },
{ "INC", 288 },
{ "DEC", 289 },
{ "B_AND", 290 },
{ "B_OR", 291 },
{ "B_NOT", 292 },
{ "B_XOR", 293 },
{ "B_LEFT", 294 },
{ "B_RIGHT", 295 },
{ "EQ", 296 },
{ "GT", 297 },
{ "LT", 298 },
{ "GE", 299 },
{ "LE", 300 },
{ "NEQ", 301 },
{ "AND", 302 },
{ "OR", 303 },
{ "NOT", 304 },
{ NULL, 0 }
};
YYCONST char *YYCONST YYNEARFAR YYBASED_CODE YYDCDECL yyrule[] = {
"$accept: program",
"program: dec_list",
"dec_list: dec_list dec",
"dec_list: dec",
"dec: var_dec",
"dec: fun_dec",
"dec: fun_def",
"id: ID",
"fid:",
"var_dec: type_spec id_list SEMI",
"id_list: id_list COMMA var",
"id_list: var",
"id_list: id_list COMMA id ASSIGN simple_exp",
"id_list: id ASSIGN simple_exp",
"type_spec: INT",
"type_spec: DOUBLE",
"type_spec: CHAR",
"type_spec: VOID",
"fun_def: type_spec id fid LP params RP comp_stmt",
"fun_def: id fid LP params RP comp_stmt",
"fun_dec: type_spec id fid LP params RP SEMI",
"fun_dec: id fid LP params RP SEMI",
"params: param_list",
"params:",
"param_list: param_list COMMA param",
"param_list: param",
"param: type_spec",
"param: type_spec id",
"comp_stmt: LFP local_dec stmt_list RFP",
"local_dec: local_dec var_dec",
"local_dec:",
"stmt_list: stmt_list stmt",
"stmt_list:",
"stmt: exp_stmt",
"stmt: sele_stmt",
"stmt: iter_stmt",
"stmt: return_stmt",
"stmt: comp_stmt",
"stmt: input_stmt",
"stmt: output_stmt",
"exp_stmt: exp SEMI",
"exp_stmt: SEMI",
"sele_stmt: IF LP exp RP stmt",
"sele_stmt: IF LP exp RP stmt ELSE stmt",
"iter_stmt: WHILE LP exp RP stmt",
"iter_stmt: FOR LP exp_stmt exp_stmt exp RP stmt",
"input_stmt: INPUT LP id RP SEMI",
"output_stmt: OUTPUT LP id RP SEMI",
"return_stmt: RETURN SEMI",
"return_stmt: RETURN exp SEMI",
"exp: var ASSIGN exp",
"exp: simple_exp",
"var: id",
"var: id LSP factor RSP",
"simple_exp: simple_exp OR simple_exp",
"simple_exp: simple_exp AND simple_exp",
"simple_exp: simple_exp LT simple_exp",
"simple_exp: simple_exp LE simple_exp",
"simple_exp: simple_exp GT simple_exp",
"simple_exp: simple_exp GE simple_exp",
"simple_exp: simple_exp EQ simple_exp",
"simple_exp: simple_exp NEQ simple_exp",
"simple_exp: simple_exp PLUS simple_exp",
"simple_exp: simple_exp SUB simple_exp",
"simple_exp: simple_exp MUT simple_exp",
"simple_exp: simple_exp DIV simple_exp",
"simple_exp: simple_exp MOD simple_exp",
"simple_exp: simple_exp INC",
"simple_exp: LP INC simple_exp RP",
"simple_exp: simple_exp DEC",
"simple_exp: LP DEC simple_exp RP",
"simple_exp: simple_exp B_AND simple_exp",
"simple_exp: simple_exp B_XOR simple_exp",
"simple_exp: simple_exp B_OR simple_exp",
"simple_exp: simple_exp B_LEFT factor",
"simple_exp: simple_exp B_RIGHT factor",
"simple_exp: NOT factor",
"simple_exp: B_NOT factor",
"simple_exp: factor",
"factor: LP exp RP",
"factor: var",
"factor: call",
"factor: NUM",
"factor: FNUM",
"factor: SCHAR",
"call: var LP args RP",
"arg_list: arg_list COMMA exp",
"arg_list: exp",
"args: arg_list",
"args:"
};
#endif
YYCONST yyreduction_t YYNEARFAR YYBASED_CODE YYDCDECL yyreduction[] = {
{ 0, 1, -1 },
{ 1, 1, 0 },
{ 2, 2, 1 },
{ 2, 1, 2 },
{ 3, 1, 3 },
{ 3, 1, 4 },
{ 3, 1, 5 },
{ 4, 1, 6 },
{ 5, 0, 7 },
{ 6, 3, 8 },
{ 7, 3, 9 },
{ 7, 1, 10 },
{ 7, 5, 11 },
{ 7, 3, 12 },
{ 8, 1, 13 },
{ 8, 1, 14 },
{ 8, 1, 15 },
{ 8, 1, 16 },
{ 9, 7, 17 },
{ 9, 6, 18 },
{ 10, 7, 19 },
{ 10, 6, 20 },
{ 11, 1, 21 },
{ 11, 0, 22 },
{ 12, 3, 23 },
{ 12, 1, 24 },
{ 13, 1, 25 },
{ 13, 2, 26 },
{ 14, 4, 27 },
{ 15, 2, 28 },
{ 15, 0, 29 },
{ 16, 2, 30 },
{ 16, 0, 31 },
{ 17, 1, 32 },
{ 17, 1, 33 },
{ 17, 1, 34 },
{ 17, 1, 35 },
{ 17, 1, 36 },
{ 17, 1, 37 },
{ 17, 1, 38 },
{ 18, 2, 39 },
{ 18, 1, 40 },
{ 19, 5, 41 },
{ 19, 7, 42 },
{ 20, 5, 43 },
{ 20, 7, 44 },
{ 21, 5, 45 },
{ 22, 5, 46 },
{ 23, 2, 47 },
{ 23, 3, 48 },
{ 24, 3, 49 },
{ 24, 1, 50 },
{ 25, 1, 51 },
{ 25, 4, 52 },
{ 26, 3, 53 },
{ 26, 3, 54 },
{ 26, 3, 55 },
{ 26, 3, 56 },
{ 26, 3, 57 },
{ 26, 3, 58 },
{ 26, 3, 59 },
{ 26, 3, 60 },
{ 26, 3, 61 },
{ 26, 3, 62 },
{ 26, 3, 63 },
{ 26, 3, 64 },
{ 26, 3, 65 },
{ 26, 2, 66 },
{ 26, 4, 67 },
{ 26, 2, 68 },
{ 26, 4, 69 },
{ 26, 3, 70 },
{ 26, 3, 71 },
{ 26, 3, 72 },
{ 26, 3, 73 },
{ 26, 3, 74 },
{ 26, 2, 75 },
{ 26, 2, 76 },
{ 26, 1, 77 },
{ 27, 3, 78 },
{ 27, 1, 79 },
{ 27, 1, 80 },
{ 27, 1, 81 },
{ 27, 1, 82 },
{ 27, 1, 83 },
{ 28, 4, 84 },
{ 29, 3, 85 },
{ 29, 1, 86 },
{ 30, 1, 87 },
{ 30, 0, 88 }
};
int YYNEAR YYDCDECL yytokenaction_size = 337;
YYCONST yytokenaction_t YYNEARFAR YYBASED_CODE YYDCDECL yytokenaction[] = {
{ 81, YYAT_SHIFT, 111 },
{ 139, YYAT_SHIFT, 21 },
{ 90, YYAT_SHIFT, 59 },
{ 90, YYAT_SHIFT, 60 },
{ 161, YYAT_SHIFT, 165 },
{ 81, YYAT_SHIFT, 54 },
{ 81, YYAT_SHIFT, 55 },
{ 81, YYAT_SHIFT, 56 },
{ 81, YYAT_SHIFT, 57 },
{ 81, YYAT_SHIFT, 58 },
{ 81, YYAT_SHIFT, 59 },
{ 81, YYAT_SHIFT, 60 },
{ 81, YYAT_SHIFT, 61 },
{ 81, YYAT_SHIFT, 62 },
{ 139, YYAT_SHIFT, 22 },
{ 81, YYAT_SHIFT, 63 },
{ 81, YYAT_SHIFT, 64 },
{ 81, YYAT_SHIFT, 65 },
{ 81, YYAT_SHIFT, 66 },
{ 81, YYAT_SHIFT, 67 },
{ 81, YYAT_SHIFT, 68 },
{ 81, YYAT_SHIFT, 69 },
{ 81, YYAT_SHIFT, 70 },
{ 81, YYAT_SHIFT, 71 },
{ 81, YYAT_SHIFT, 72 },
{ 81, YYAT_SHIFT, 73 },
{ 79, YYAT_SHIFT, 54 },
{ 79, YYAT_SHIFT, 55 },
{ 79, YYAT_SHIFT, 56 },
{ 79, YYAT_SHIFT, 57 },
{ 79, YYAT_SHIFT, 58 },
{ 79, YYAT_SHIFT, 59 },
{ 79, YYAT_SHIFT, 60 },
{ 79, YYAT_SHIFT, 61 },
{ 79, YYAT_SHIFT, 62 },
{ 159, YYAT_SHIFT, 164 },
{ 79, YYAT_SHIFT, 63 },
{ 79, YYAT_SHIFT, 64 },
{ 79, YYAT_SHIFT, 65 },
{ 79, YYAT_SHIFT, 66 },
{ 79, YYAT_SHIFT, 67 },
{ 79, YYAT_SHIFT, 68 },
{ 79, YYAT_SHIFT, 69 },
{ 79, YYAT_SHIFT, 70 },
{ 79, YYAT_SHIFT, 71 },
{ 79, YYAT_SHIFT, 72 },
{ 79, YYAT_SHIFT, 73 },
{ 50, YYAT_SHIFT, 54 },
{ 50, YYAT_SHIFT, 55 },
{ 50, YYAT_SHIFT, 56 },
{ 50, YYAT_SHIFT, 57 },
{ 50, YYAT_SHIFT, 58 },
{ 50, YYAT_SHIFT, 59 },
{ 50, YYAT_SHIFT, 60 },
{ 50, YYAT_SHIFT, 61 },
{ 50, YYAT_SHIFT, 62 },
{ 158, YYAT_SHIFT, 163 },
{ 50, YYAT_SHIFT, 63 },
{ 50, YYAT_SHIFT, 64 },
{ 50, YYAT_SHIFT, 65 },
{ 50, YYAT_SHIFT, 66 },
{ 50, YYAT_SHIFT, 67 },
{ 50, YYAT_SHIFT, 68 },
{ 50, YYAT_SHIFT, 69 },
{ 50, YYAT_SHIFT, 70 },
{ 50, YYAT_SHIFT, 71 },
{ 50, YYAT_SHIFT, 72 },
{ 50, YYAT_SHIFT, 73 },
{ 34, YYAT_SHIFT, 54 },
{ 34, YYAT_SHIFT, 55 },
{ 34, YYAT_SHIFT, 56 },
{ 34, YYAT_SHIFT, 57 },
{ 34, YYAT_SHIFT, 58 },
{ 34, YYAT_SHIFT, 59 },
{ 34, YYAT_SHIFT, 60 },
{ 34, YYAT_SHIFT, 61 },
{ 34, YYAT_SHIFT, 62 },
{ 157, YYAT_SHIFT, 162 },
{ 34, YYAT_SHIFT, 63 },
{ 34, YYAT_SHIFT, 64 },
{ 34, YYAT_SHIFT, 65 },
{ 34, YYAT_SHIFT, 66 },
{ 34, YYAT_SHIFT, 67 },
{ 34, YYAT_SHIFT, 68 },
{ 34, YYAT_SHIFT, 69 },
{ 34, YYAT_SHIFT, 70 },
{ 34, YYAT_SHIFT, 71 },
{ 34, YYAT_SHIFT, 72 },
{ 34, YYAT_SHIFT, 73 },
{ 104, YYAT_SHIFT, 54 },
{ 104, YYAT_SHIFT, 55 },
{ 104, YYAT_SHIFT, 56 },
{ 104, YYAT_SHIFT, 57 },
{ 104, YYAT_SHIFT, 58 },
{ 104, YYAT_SHIFT, 59 },
{ 104, YYAT_SHIFT, 60 },
{ 104, YYAT_SHIFT, 61 },
{ 104, YYAT_SHIFT, 62 },
{ 153, YYAT_SHIFT, 158 },
{ 104, YYAT_SHIFT, 63 },
{ 104, YYAT_SHIFT, 64 },
{ 104, YYAT_SHIFT, 65 },
{ 104, YYAT_SHIFT, 66 },
{ 104, YYAT_SHIFT, 67 },
{ 104, YYAT_SHIFT, 68 },
{ 104, YYAT_SHIFT, 69 },
{ 104, YYAT_SHIFT, 70 },
{ 104, YYAT_SHIFT, 71 },
{ 104, YYAT_SHIFT, 72 },
{ 103, YYAT_SHIFT, 54 },
{ 103, YYAT_SHIFT, 55 },
{ 103, YYAT_SHIFT, 56 },
{ 103, YYAT_SHIFT, 57 },
{ 103, YYAT_SHIFT, 58 },
{ 103, YYAT_SHIFT, 59 },
{ 103, YYAT_SHIFT, 60 },
{ 103, YYAT_SHIFT, 61 },
{ 103, YYAT_SHIFT, 62 },
{ 152, YYAT_SHIFT, 157 },
{ 103, YYAT_SHIFT, 63 },
{ 103, YYAT_SHIFT, 64 },
{ 103, YYAT_SHIFT, 65 },
{ 103, YYAT_SHIFT, 66 },
{ 103, YYAT_SHIFT, 67 },
{ 103, YYAT_SHIFT, 68 },
{ 103, YYAT_SHIFT, 69 },
{ 103, YYAT_SHIFT, 70 },
{ 103, YYAT_SHIFT, 71 },
{ 94, YYAT_SHIFT, 54 },
{ 94, YYAT_SHIFT, 55 },
{ 94, YYAT_SHIFT, 56 },
{ 94, YYAT_SHIFT, 57 },
{ 94, YYAT_SHIFT, 58 },
{ 94, YYAT_SHIFT, 59 },
{ 94, YYAT_SHIFT, 60 },
{ 117, YYAT_SHIFT, 1 },
{ 117, YYAT_SHIFT, 2 },
{ 117, YYAT_SHIFT, 3 },
{ 117, YYAT_SHIFT, 4 },
{ 94, YYAT_SHIFT, 64 },
{ 94, YYAT_SHIFT, 65 },
{ 94, YYAT_SHIFT, 66 },
{ 94, YYAT_SHIFT, 67 },
{ 94, YYAT_SHIFT, 68 },
{ 94, YYAT_SHIFT, 69 },
{ 94, YYAT_SHIFT, 70 },
{ 94, YYAT_SHIFT, 71 },
{ 93, YYAT_SHIFT, 54 },
{ 93, YYAT_SHIFT, 55 },
{ 93, YYAT_SHIFT, 56 },
{ 93, YYAT_SHIFT, 57 },
{ 93, YYAT_SHIFT, 58 },
{ 93, YYAT_SHIFT, 59 },
{ 93, YYAT_SHIFT, 60 },
{ 77, YYAT_SHIFT, 1 },
{ 77, YYAT_SHIFT, 2 },
{ 77, YYAT_SHIFT, 3 },
{ 77, YYAT_SHIFT, 4 },
{ 93, YYAT_SHIFT, 64 },
{ 93, YYAT_SHIFT, 65 },
{ 93, YYAT_SHIFT, 66 },
{ 93, YYAT_SHIFT, 67 },
{ 93, YYAT_SHIFT, 68 },
{ 93, YYAT_SHIFT, 69 },
{ 93, YYAT_SHIFT, 70 },
{ 93, YYAT_SHIFT, 71 },
{ 92, YYAT_SHIFT, 54 },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -