cm_parse.cpp
来自「小型编译系统的源代码」· C++ 代码 · 共 2,361 行 · 第 1/4 页
CPP
2,361 行
{
#line 190 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyattribute(2 - 2) = newExpNode(ArrayK); yyattribute(2 - 2)->attr.name = copyString(tokenString);
#line 596 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 29:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[6];
yyinitdebug(yya, 6);
#endif
{
#line 191 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newDeclNode(ParamK);
yyval->child[0] = yyattribute(1 - 5);
yyval->child[1] = yyattribute(2 - 5);
yyattribute(2 - 5)->varK = Array;
yyattribute(2 - 5)->child[0] = 0;
#line 615 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 30:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 200 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newStmtNode(CompoundK);
yyval->child[0] = yyattribute(2 - 3);
#line 631 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 31:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[5];
yyinitdebug(yya, 5);
#endif
{
#line 205 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
YYSTYPE t = yyattribute(2 - 4);
if (t != NULL)
{
while (t->sibling != NULL)
t = t->sibling;
t->sibling = yyattribute(3 - 4);
yyval = newStmtNode(CompoundK);
yyval->child[0] = yyattribute(2 - 4);
}
else
{
yyval = newStmtNode(CompoundK);
yyval->child[0] = yyattribute(3 - 4);
}
#line 659 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 32:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 222 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = 0;
#line 674 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 33:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 226 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newStmtNode(CompoundK);
yyval->child[0] = yyattribute(2 - 3);
#line 690 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 34:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 232 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
YYSTYPE t = yyattribute(1 - 2);
if (t != NULL)
{
while (t->sibling != NULL)
t = t->sibling;
t->sibling = yyattribute(2 - 2);
yyval = yyattribute(1 - 2);
}
else
yyval = yyattribute(2 - 2);
#line 714 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 35:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 245 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 727 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 36:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 248 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
YYSTYPE t = yyattribute(1 - 2);
if (t != NULL)
{
while (t->sibling != NULL)
t = t->sibling;
t->sibling = yyattribute(2 - 2);
yyval = yyattribute(1 - 2);
}
else
yyval = yyattribute(2 - 2);
#line 751 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 37:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 261 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 764 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 38:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 264 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 779 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 39:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 268 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 794 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 40:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 272 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 809 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 41:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 276 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 824 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 42:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 280 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 839 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 43:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 284 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 854 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 44:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 289 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 2);
#line 869 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 45:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 293 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = 0;
#line 884 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 46:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[8];
yyinitdebug(yya, 8);
#endif
{
#line 298 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newStmtNode(IfK);
yyval->child[0] = yyattribute(3 - 7);
yyval->child[1] = yyattribute(5 - 7);
yyval->child[2] = yyattribute(7 - 7);
#line 902 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 47:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[6];
yyinitdebug(yya, 6);
#endif
{
#line 305 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newStmtNode(IfK);
yyval->child[0] = yyattribute(3 - 5);
yyval->child[1] = yyattribute(5 - 5);
#line 919 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 48:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[6];
yyinitdebug(yya, 6);
#endif
{
#line 312 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newStmtNode(WhileK);
yyval->child[0] = yyattribute(3 - 5);
yyval->child[1] = yyattribute(5 - 5);
#line 936 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 49:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[10];
yyinitdebug(yya, 10);
#endif
{
#line 319 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newStmtNode(ForK);
yyval->child[0] = yyattribute(3 - 9);
yyval->child[1] = yyattribute(5 - 9);
yyval->child[2] = yyattribute(7 - 9);
yyval->child[3] = yyattribute(9 - 9);
#line 955 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 50:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[3];
yyinitdebug(yya, 3);
#endif
{
#line 328 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newStmtNode(ReturnK);
#line 970 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 51:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 332 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newStmtNode(ReturnK);
yyval->child[0] = yyattribute(2 - 3);
#line 986 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 52:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 338 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newExpNode(OpK);
yyval->attr.op = ASSIGN;
yyval->child[0] = yyattribute(1 - 3);
yyval->child[1] = yyattribute(3 - 3);
#line 1004 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 53:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 345 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 1019 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 54:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 350 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newExpNode(OpK);
yyval->attr.op = ASSIGN;
yyval->child[0] = yyattribute(1 - 3);
yyval->child[1] = yyattribute(3 - 3);
#line 1037 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 55:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 357 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 1052 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 56:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 361 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = 0;
#line 1067 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 57:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 367 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newExpNode(IdK);
yyval->lineno = lineno;
yyval->attr.name = copyString(tokenString);
#line 1084 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 58:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 372 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newExpNode(ArrayK); yyval->attr.name = copyString(tokenString);
#line 1097 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 59:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[6];
yyinitdebug(yya, 6);
#endif
{
#line 373 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newExpNode(ArrayK);
yyval->attr.name = yyattribute(2 - 5)->attr.name;
delete(yyattribute(2 - 5));
yyval->child[0] = yyattribute(4 - 5); /*?*/
#line 1115 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 60:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 381 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newExpNode(OpK);
yyval->child[0] = yyattribute(1 - 3);
yyval->child[1] = yyattribute(3 - 3);
yyval->attr.op = OR;
#line 1133 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 61:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 388 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 1146 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 62:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[4];
yyinitdebug(yya, 4);
#endif
{
#line 391 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = newExpNode(OpK);
yyval->child[0] = yyattribute(1 - 3);
yyval->child[1] = yyattribute(3 - 3);
yyval->attr.op = AND;
#line 1164 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 63:
{
#ifdef YYDEBUG
YYSTYPE YYFAR *yya[2];
yyinitdebug(yya, 2);
#endif
{
#line 398 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.y"
yyval = yyattribute(1 - 1);
#line 1177 "E:\\Myworks\\Compiler\\C_Minus\\CM_parse.c"
}
}
break;
case 64:
{
#ifdef YYDEBUG
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?