📄 parse.c
字号:
case 36:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 221 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 720 "parse.c"
}
}
break;
case 37:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 222 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 733 "parse.c"
}
}
break;
case 38:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 223 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 746 "parse.c"
}
}
break;
case 39:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 224 ".\\parse.y"
yyval.ptree = newStmtNode(ContinueK);
#line 759 "parse.c"
}
}
break;
case 40:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 225 ".\\parse.y"
yyval.ptree = newStmtNode(BreakK);
#line 772 "parse.c"
}
}
break;
case 41:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 228 ".\\parse.y"
yyval.ptree = yyattribute(1 - 2).ptree;
#line 785 "parse.c"
}
}
break;
case 42:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 230 ".\\parse.y"
yyval.ptree = NULL;
#line 798 "parse.c"
}
}
break;
case 43:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[6];
yyinitdebug(yya, 6);
#endif
{
#line 233 ".\\parse.y"
yyval.ptree = newStmtNode(IfK);
yyval.ptree -> child[0] = yyattribute(3 - 5).ptree;
yyval.ptree -> child[1] = yyattribute(5 - 5).ptree;
#line 814 "parse.c"
}
}
break;
case 44:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[8];
yyinitdebug(yya, 8);
#endif
{
#line 238 ".\\parse.y"
yyval.ptree = newStmtNode(IfK);
yyval.ptree -> child[0] = yyattribute(3 - 7).ptree;
yyval.ptree -> child[1] = yyattribute(5 - 7).ptree;
yyval.ptree -> child[2] = yyattribute(7 - 7).ptree;
#line 831 "parse.c"
}
}
break;
case 45:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[6];
yyinitdebug(yya, 6);
#endif
{
#line 245 ".\\parse.y"
yyval.ptree = newStmtNode(WhileK);
yyval.ptree -> child[0] = yyattribute(3 - 5).ptree;
yyval.ptree -> child[1] = yyattribute(5 - 5).ptree;
#line 847 "parse.c"
}
}
break;
case 46:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 251 ".\\parse.y"
yyval.ptree = newStmtNode(ReturnK);
yyval.ptree -> child[0] = NULL;
#line 862 "parse.c"
}
}
break;
case 47:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 255 ".\\parse.y"
yyval.ptree = newStmtNode(ReturnK);
yyval.ptree -> child[0] = yyattribute(2 - 3).ptree;
#line 877 "parse.c"
}
}
break;
case 48:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 260 ".\\parse.y"
yyval.ptree = newStmtNode(AssignK);
yyval.ptree -> child[0] = yyattribute(1 - 3).ptree;
yyval.ptree -> child[1] = yyattribute(3 - 3).ptree;
#line 893 "parse.c"
}
}
break;
case 49:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 265 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 906 "parse.c"
}
}
break;
case 50:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 268 ".\\parse.y"
yyval.ptree = newExpNode(IdK);
yyval.ptree -> attr.name = savedIdName;
#line 921 "parse.c"
}
}
break;
case 51:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[5];
yyinitdebug(yya, 5);
#endif
{
#line 272 ".\\parse.y"
yyval.ptree = newExpNode(IdK);
yyval.ptree -> attr.name = savedIdName;
yyval.ptree -> child[0] = yyattribute(3 - 4).ptree;
#line 937 "parse.c"
}
}
break;
case 52:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 278 ".\\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 = OR;
#line 954 "parse.c"
}
}
break;
case 53:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 284 ".\\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 = AND;
#line 971 "parse.c"
}
}
break;
case 54:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 290 ".\\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 = LT;
yyval.ptree -> type = Boolean;
#line 989 "parse.c"
}
}
break;
case 55:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 297 ".\\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 = LE;
yyval.ptree -> type = Boolean;
#line 1007 "parse.c"
}
}
break;
case 56:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 304 ".\\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 = GT;
yyval.ptree -> type = Boolean;
#line 1025 "parse.c"
}
}
break;
case 57:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 311 ".\\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 = GE;
yyval.ptree -> type = Boolean;
#line 1043 "parse.c"
}
}
break;
case 58:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 318 ".\\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 = EQ;
yyval.ptree -> type = Boolean;
#line 1061 "parse.c"
}
}
break;
case 59:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 325 ".\\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 = NEQ;
yyval.ptree -> type = Boolean;
#line 1079 "parse.c"
}
}
break;
case 60:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 332 ".\\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 = PLUS;
#line 1096 "parse.c"
}
}
break;
case 61:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 338 ".\\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 = SUB;
#line 1113 "parse.c"
}
}
break;
case 62:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 344 ".\\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 = MUT;
#line 1130 "parse.c"
}
}
break;
case 63:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 350 ".\\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 = DIV;
#line 1147 "parse.c"
}
}
break;
case 64:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 356 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 1160 "parse.c"
}
}
break;
case 65:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 360 ".\\parse.y"
yyval.ptree = yyattribute(2 - 3).ptree;
#line 1173 "parse.c"
}
}
break;
case 66:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 362 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 1186 "parse.c"
}
}
break;
case 67:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 364 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 1199 "parse.c"
}
}
break;
case 68:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 366 ".\\parse.y"
yyval.ptree = newExpNode(NumK);
yyval.ptree -> type = Integer;
yyval.ptree -> attr.val.i = atoi(tokenString);
#line 1215 "parse.c"
}
}
break;
case 69:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 371 ".\\parse.y"
yyval.ptree = newExpNode(FnumK);
yyval.ptree -> type = Float;
yyval.ptree -> attr.val.f = atof(tokenString);
#line 1231 "parse.c"
}
}
break;
case 70:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 376 ".\\parse.y"
yyval.ptree = newExpNode(CharK);
yyval.ptree -> type = Char;
yyval.ptree -> attr.val.i = *(tokenString + 1);
#line 1247 "parse.c"
}
}
break;
case 71:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 381 ".\\parse.y"
yyval.ptree = yyattribute(2 - 2).ptree;
yyval.ptree -> attr.op = NOT;
#line 1262 "parse.c"
}
}
break;
case 72:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[5];
yyinitdebug(yya, 5);
#endif
{
#line 386 ".\\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 1278 "parse.c"
}
}
break;
case 73:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 392 ".\\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 1298 "parse.c"
}
}
break;
case 74:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 401 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 1311 "parse.c"
}
}
break;
case 75:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 404 ".\\parse.y"
yyval.ptree = yyattribute(1 - 1).ptree;
#line 1324 "parse.c"
}
}
break;
case 76:
{
#line 406 ".\\parse.y"
yyval.ptree = NULL;
#line 1332 "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 },
{ "FLOAT", 261 },
{ "IF", 262 },
{ "ELSE", 263 },
{ "WHILE", 264 },
{ "VOID", 265 },
{ "RETURN", 266 },
{ "BREAK", 267 },
{ "CONTINUE", 268 },
{ "ID", 269 },
{ "NUM", 270 },
{ "FNUM", 271 },
{ "SCHAR", 272 },
{ "PLUS", 273 },
{ "SUB", 274 },
{ "MUT", 275 },
{ "DIV", 276 },
{ "LT", 277 },
{ "LE", 278 },
{ "GT", 279 },
{ "GE", 280 },
{ "EQ", 281 },
{ "NEQ", 282 },
{ "AND", 283 },
{ "OR", 284 },
{ "NOT", 285 },
{ "ASSIGN", 286 },
{ "SEMI", 287 },
{ "COMMA", 288 },
{ "LP", 289 },
{ "RP", 290 },
{ "LSP", 291 },
{ "RSP", 292 },
{ "LFP", 293 },
{ "RFP", 294 },
{ 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: FLOAT",
"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",
"param: type_spec id LSP RSP",
"param: type_spec id LSP simple_exp RSP",
"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",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -