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 + -
显示快捷键?