From 412a03deed9d3cff93f6fdba1c0beab160f2feab Mon Sep 17 00:00:00 2001 From: zhaochaoyi <1251887477@qq.com> Date: Thu, 28 Apr 2022 09:51:00 +0800 Subject: [PATCH] fix L2 bug: struct redine lvalue function Declration --- Code/lex.yy.c | 87 ++++++------- Code/main.c | 2 +- Code/parser | Bin 81528 -> 81528 bytes Code/semantic.c | 14 ++- Code/syntax.tab.c | 310 +++++++++++++++++++++++----------------------- Code/syntax.tab.h | 4 +- 6 files changed, 212 insertions(+), 205 deletions(-) diff --git a/Code/lex.yy.c b/Code/lex.yy.c index fbcf034..9e287e1 100644 --- a/Code/lex.yy.c +++ b/Code/lex.yy.c @@ -1,5 +1,6 @@ +#line 1 "./lex.yy.c" -#line 2 "lex.yy.c" +#line 3 "./lex.yy.c" #define YY_INT_ALIGNED short int @@ -547,8 +548,8 @@ int yy_flex_debug = 0; #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; -#line 1 "lexical.l" -#line 4 "lexical.l" +#line 1 "./lexical.l" +#line 4 "./lexical.l" #include <stdio.h> #include "debug.h" #include "syntax.tab.h" @@ -559,8 +560,8 @@ char *yytext; extern int syntax; int last_lineno = 0,cur_lineno = 0; static Node_t* add_node_text(char * content,char *text,int len); -#line 562 "lex.yy.c" -#line 563 "lex.yy.c" +#line 563 "./lex.yy.c" +#line 564 "./lex.yy.c" #define INITIAL 0 @@ -777,9 +778,9 @@ YY_DECL } { -#line 47 "lexical.l" +#line 47 "./lexical.l" -#line 782 "lex.yy.c" +#line 783 "./lex.yy.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -848,163 +849,163 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 48 "lexical.l" +#line 48 "./lexical.l" { ELEMENT("STRUCT"); return STRUCT; } YY_BREAK case 2: YY_RULE_SETUP -#line 49 "lexical.l" +#line 49 "./lexical.l" { ELEMENT("RETURN"); return RETURN; } YY_BREAK case 3: YY_RULE_SETUP -#line 50 "lexical.l" +#line 50 "./lexical.l" { ELEMENT("IF"); return IF; } YY_BREAK case 4: YY_RULE_SETUP -#line 51 "lexical.l" +#line 51 "./lexical.l" { ELEMENT("ELSE"); return ELSE; } YY_BREAK case 5: YY_RULE_SETUP -#line 52 "lexical.l" +#line 52 "./lexical.l" { ELEMENT("WHILE"); return WHILE; } YY_BREAK case 6: YY_RULE_SETUP -#line 53 "lexical.l" +#line 53 "./lexical.l" { ELEMENT("TYPE"); return TYPE; } YY_BREAK case 7: YY_RULE_SETUP -#line 54 "lexical.l" +#line 54 "./lexical.l" { ELEMENT("INT"); return INT;} YY_BREAK case 8: YY_RULE_SETUP -#line 55 "lexical.l" +#line 55 "./lexical.l" { ELEMENT("FLOAT"); return FLOAT;} YY_BREAK case 9: YY_RULE_SETUP -#line 56 "lexical.l" +#line 56 "./lexical.l" { ELEMENT("ID"); return ID; } YY_BREAK case 10: YY_RULE_SETUP -#line 57 "lexical.l" +#line 57 "./lexical.l" { ELEMENT("SEMI"); return SEMI;} YY_BREAK case 11: YY_RULE_SETUP -#line 58 "lexical.l" +#line 58 "./lexical.l" { ELEMENT("COMMA"); return COMMA;} YY_BREAK case 12: YY_RULE_SETUP -#line 59 "lexical.l" +#line 59 "./lexical.l" { ELEMENT("ASSIGNOP"); return ASSIGNOP;} YY_BREAK case 13: YY_RULE_SETUP -#line 60 "lexical.l" +#line 60 "./lexical.l" { ELEMENT("RELOP"); return RELOP;} YY_BREAK case 14: YY_RULE_SETUP -#line 61 "lexical.l" +#line 61 "./lexical.l" { ELEMENT("PLUS"); return PLUS;} YY_BREAK case 15: YY_RULE_SETUP -#line 62 "lexical.l" +#line 62 "./lexical.l" { ELEMENT("MINUS"); return MINUS;} YY_BREAK case 16: YY_RULE_SETUP -#line 63 "lexical.l" +#line 63 "./lexical.l" { ELEMENT("STAR"); return STAR;} YY_BREAK case 17: YY_RULE_SETUP -#line 64 "lexical.l" +#line 64 "./lexical.l" { ELEMENT("DIV"); return DIV;} YY_BREAK case 18: YY_RULE_SETUP -#line 65 "lexical.l" +#line 65 "./lexical.l" { ELEMENT("AND"); return AND;} YY_BREAK case 19: YY_RULE_SETUP -#line 66 "lexical.l" +#line 66 "./lexical.l" { ELEMENT("OR"); return OR;} YY_BREAK case 20: YY_RULE_SETUP -#line 67 "lexical.l" +#line 67 "./lexical.l" { ELEMENT("DOT"); return DOT;} YY_BREAK case 21: YY_RULE_SETUP -#line 68 "lexical.l" +#line 68 "./lexical.l" { ELEMENT("NOT"); return NOT;} YY_BREAK case 22: YY_RULE_SETUP -#line 69 "lexical.l" +#line 69 "./lexical.l" { ELEMENT("LP"); return LP;} YY_BREAK case 23: YY_RULE_SETUP -#line 70 "lexical.l" +#line 70 "./lexical.l" { ELEMENT("RP"); return RP;} YY_BREAK case 24: YY_RULE_SETUP -#line 71 "lexical.l" +#line 71 "./lexical.l" { ELEMENT("LB"); return LB;} YY_BREAK case 25: YY_RULE_SETUP -#line 72 "lexical.l" +#line 72 "./lexical.l" { ELEMENT("RB"); return RB;} YY_BREAK case 26: YY_RULE_SETUP -#line 73 "lexical.l" +#line 73 "./lexical.l" { ELEMENT("LC"); return LC;} YY_BREAK case 27: YY_RULE_SETUP -#line 74 "lexical.l" +#line 74 "./lexical.l" { ELEMENT("RC"); return RC;} YY_BREAK case 28: YY_RULE_SETUP -#line 75 "lexical.l" +#line 75 "./lexical.l" { } YY_BREAK case 29: YY_RULE_SETUP -#line 76 "lexical.l" +#line 76 "./lexical.l" { yycolumn += 3; } YY_BREAK case 30: /* rule 30 can match eol */ YY_RULE_SETUP -#line 77 "lexical.l" +#line 77 "./lexical.l" { yycolumn = 1; } YY_BREAK case 31: YY_RULE_SETUP -#line 78 "lexical.l" +#line 78 "./lexical.l" { char c = input(); while(c != '\n') { c = input(); } } YY_BREAK case 32: YY_RULE_SETUP -#line 79 "lexical.l" +#line 79 "./lexical.l" { char c1 = input(),c2 = input(); if (c1 == '\n') { @@ -1025,15 +1026,15 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 96 "lexical.l" +#line 96 "./lexical.l" { LexicalError("%s",yytext); syntax++; } YY_BREAK case 34: YY_RULE_SETUP -#line 98 "lexical.l" +#line 98 "./lexical.l" ECHO; YY_BREAK -#line 1036 "lex.yy.c" +#line 1037 "./lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -2050,7 +2051,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 98 "lexical.l" +#line 98 "./lexical.l" int yywrap() diff --git a/Code/main.c b/Code/main.c index 14ff2c5..1c7f331 100755 --- a/Code/main.c +++ b/Code/main.c @@ -32,7 +32,7 @@ int main(int argc,char *argv[]) { fclose(f); semantic_check->init(); if (syntax == 0) { - tree->traverse(tree->root,0); + //tree->traverse(tree->root,0); semantic_check->main(tree->root); //test->main(); diff --git a/Code/parser b/Code/parser index 3f0977a0326d525de22670bcd839f61eef72ee1e..976dccf2f40a5ec61330d648bd56c885e18ab054 100755 GIT binary patch delta 21580 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 BnjZiF delta 21594 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 U8kQ}}(e;XQj(pup*;?ZN1EVC$Z2$lO diff --git a/Code/semantic.c b/Code/semantic.c index 7a609e0..7a59e4e 100644 --- a/Code/semantic.c +++ b/Code/semantic.c @@ -128,7 +128,7 @@ static int Semantic_Check_Insert_Node(unit_t * cur) { unit_t * find = symbol_table->find(cur->name); if(nodeop->IsStructDef(cur)) { // cur->deep = 1; - if(find && find->deep == symbol_stack->stack_size) { + if(find && (find->deep == symbol_stack->stack_size || find->type->kind == STRUCTURE)) { ErrorHandling(16,cur->line,cur->name); nodeop->delete(cur,INFONODE); return 0; @@ -142,7 +142,7 @@ static int Semantic_Check_Insert_Node(unit_t * cur) { if(cur->type->kind == FUNC_IMPL || cur->type->kind == FUNC_DECL) { if(!(find->type->kind == FUNC_IMPL && cur->type->kind == FUNC_IMPL)) { if(nodeop->equal(find,cur)) { - find->type->kind = cur->type->kind; + find->type->kind = FUNC_IMPL; } else { ErrorHandling(19,cur->line,cur->name); } @@ -166,7 +166,11 @@ static int Semantic_Check_Insert_Node(unit_t * cur) { nodeop->delete(cur,cur->node_type); return 0; } else { - symbol_table->insert(cur); + if(find && find->type->kind == STRUCTURE) { + ErrorHandling(3,cur->line,cur->name); + } else { + symbol_table->insert(cur); + } return 1; } } @@ -485,7 +489,9 @@ static void Semantic_Check_Exp(Node_t * root) { if(!type_ops->type_equal(left_type,right_type)) { ErrorHandling(5,mid->line,mid->text); } - if(!type(left->lchild,"ID") && !type(left->rchild,"RB") && !(type(left->lchild->right,"DOT"))) { + Node_t * ll = left; + while (ll->lchild) { ll = ll->lchild; } + if(!type(ll,"ID") || (type(ll,"ID") && type(ll->right,"LP"))) { ErrorHandling(6,mid->line,mid->text); } ret = left_type; diff --git a/Code/syntax.tab.c b/Code/syntax.tab.c index c129f59..cb7583d 100644 --- a/Code/syntax.tab.c +++ b/Code/syntax.tab.c @@ -67,7 +67,7 @@ /* First part of user prologue. */ -#line 1 "syntax.y" +#line 1 "./syntax.y" int yycolumn = 1; #define YY_USER_ACTION \ @@ -77,7 +77,7 @@ yycolumn += yyleng; //#define YYDEBUG 1 //int yydebug = 1; -#line 12 "syntax.y" +#line 12 "./syntax.y" #include <stdio.h> #include "lex.yy.c" @@ -92,7 +92,7 @@ extern int syntax; -#line 96 "syntax.tab.c" +#line 96 "./syntax.tab.c" # ifndef YY_CAST # ifdef __cplusplus @@ -1368,457 +1368,457 @@ yyreduce: switch (yyn) { case 2: /* Program: ExtDefList */ -#line 105 "syntax.y" +#line 105 "./syntax.y" { tree->root = (yyval.node) = Operator((yyval.node),"Program",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1374 "syntax.tab.c" +#line 1374 "./syntax.tab.c" break; case 3: /* ExtDefList: ExtDef ExtDefList */ -#line 107 "syntax.y" +#line 107 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDefList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1380 "syntax.tab.c" +#line 1380 "./syntax.tab.c" break; case 4: /* ExtDefList: %empty */ -#line 108 "syntax.y" +#line 108 "./syntax.y" { (yyval.node) = NULL; } -#line 1386 "syntax.tab.c" +#line 1386 "./syntax.tab.c" break; case 5: /* ExtDef: Specifier ExtDecList SEMI */ -#line 110 "syntax.y" +#line 110 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1392 "syntax.tab.c" +#line 1392 "./syntax.tab.c" break; case 6: /* ExtDef: Specifier SEMI */ -#line 111 "syntax.y" +#line 111 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1398 "syntax.tab.c" +#line 1398 "./syntax.tab.c" break; case 7: /* ExtDef: Specifier FunDec CompSt */ -#line 112 "syntax.y" +#line 112 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1404 "syntax.tab.c" +#line 1404 "./syntax.tab.c" break; case 8: /* ExtDef: Specifier FunDec SEMI */ -#line 113 "syntax.y" +#line 113 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1410 "syntax.tab.c" +#line 1410 "./syntax.tab.c" break; case 9: /* ExtDef: error SEMI */ -#line 114 "syntax.y" +#line 114 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1416 "syntax.tab.c" +#line 1416 "./syntax.tab.c" break; case 10: /* ExtDef: Specifier error */ -#line 115 "syntax.y" +#line 115 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef,missing ;"); } -#line 1422 "syntax.tab.c" +#line 1422 "./syntax.tab.c" break; case 11: /* ExtDef: Specifier error SEMI */ -#line 116 "syntax.y" +#line 116 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1428 "syntax.tab.c" +#line 1428 "./syntax.tab.c" break; case 12: /* ExtDef: Specifier error CompSt */ -#line 117 "syntax.y" +#line 117 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1434 "syntax.tab.c" +#line 1434 "./syntax.tab.c" break; case 13: /* ExtDecList: VarDec */ -#line 119 "syntax.y" +#line 119 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDecList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1440 "syntax.tab.c" +#line 1440 "./syntax.tab.c" break; case 14: /* ExtDecList: VarDec COMMA ExtDecList */ -#line 120 "syntax.y" +#line 120 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDecList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1446 "syntax.tab.c" +#line 1446 "./syntax.tab.c" break; case 15: /* Specifier: TYPE */ -#line 125 "syntax.y" +#line 125 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Specifier",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1452 "syntax.tab.c" +#line 1452 "./syntax.tab.c" break; case 16: /* Specifier: StructSpecifier */ -#line 126 "syntax.y" +#line 126 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Specifier",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1458 "syntax.tab.c" +#line 1458 "./syntax.tab.c" break; case 17: /* StructSpecifier: STRUCT OptTag LC DefList RC */ -#line 128 "syntax.y" +#line 128 "./syntax.y" { (yyval.node) = Operator((yyval.node),"StructSpecifier",(yyloc).first_line,5,(yyvsp[-4].node),(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1464 "syntax.tab.c" +#line 1464 "./syntax.tab.c" break; case 18: /* StructSpecifier: STRUCT Tag */ -#line 129 "syntax.y" +#line 129 "./syntax.y" { (yyval.node) = Operator((yyval.node),"StructSpecifier",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1470 "syntax.tab.c" +#line 1470 "./syntax.tab.c" break; case 19: /* OptTag: ID */ -#line 131 "syntax.y" +#line 131 "./syntax.y" { (yyval.node) = Operator((yyval.node),"OptTag",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1476 "syntax.tab.c" +#line 1476 "./syntax.tab.c" break; case 20: /* OptTag: %empty */ -#line 132 "syntax.y" +#line 132 "./syntax.y" { (yyval.node) = NULL; } -#line 1482 "syntax.tab.c" +#line 1482 "./syntax.tab.c" break; case 21: /* Tag: ID */ -#line 134 "syntax.y" +#line 134 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Tag",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1488 "syntax.tab.c" +#line 1488 "./syntax.tab.c" break; case 22: /* VarDec: ID */ -#line 138 "syntax.y" +#line 138 "./syntax.y" { (yyval.node) = Operator((yyval.node),"VarDec",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1494 "syntax.tab.c" +#line 1494 "./syntax.tab.c" break; case 23: /* VarDec: VarDec LB INT RB */ -#line 139 "syntax.y" +#line 139 "./syntax.y" { (yyval.node) = Operator((yyval.node),"VarDec",(yyloc).first_line,4,(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1500 "syntax.tab.c" +#line 1500 "./syntax.tab.c" break; case 24: /* VarDec: VarDec LB error RB */ -#line 140 "syntax.y" +#line 140 "./syntax.y" { (yyval.node) = NULL; yyerror("VarDec"); } -#line 1506 "syntax.tab.c" +#line 1506 "./syntax.tab.c" break; case 25: /* FunDec: ID LP VarList RP */ -#line 142 "syntax.y" +#line 142 "./syntax.y" { (yyval.node) = Operator((yyval.node),"FunDec",(yyloc).first_line,4,(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1512 "syntax.tab.c" +#line 1512 "./syntax.tab.c" break; case 26: /* FunDec: ID LP RP */ -#line 143 "syntax.y" +#line 143 "./syntax.y" { (yyval.node) = Operator((yyval.node),"FunDec",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1518 "syntax.tab.c" +#line 1518 "./syntax.tab.c" break; case 27: /* FunDec: ID LP error RP */ -#line 144 "syntax.y" +#line 144 "./syntax.y" { (yyval.node) = NULL; yyerror("FunDec"); } -#line 1524 "syntax.tab.c" +#line 1524 "./syntax.tab.c" break; case 28: /* FunDec: error LP VarList RP */ -#line 145 "syntax.y" +#line 145 "./syntax.y" { (yyval.node) = NULL; yyerror("FunDec"); } -#line 1530 "syntax.tab.c" +#line 1530 "./syntax.tab.c" break; case 29: /* VarList: ParamDec COMMA VarList */ -#line 147 "syntax.y" +#line 147 "./syntax.y" { (yyval.node) = Operator((yyval.node),"VarList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1536 "syntax.tab.c" +#line 1536 "./syntax.tab.c" break; case 30: /* VarList: ParamDec */ -#line 148 "syntax.y" +#line 148 "./syntax.y" { (yyval.node) = Operator((yyval.node),"VarList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1542 "syntax.tab.c" +#line 1542 "./syntax.tab.c" break; case 31: /* ParamDec: Specifier VarDec */ -#line 150 "syntax.y" +#line 150 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ParamDec",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1548 "syntax.tab.c" +#line 1548 "./syntax.tab.c" break; case 32: /* CompSt: LC DefList StmtList RC */ -#line 155 "syntax.y" +#line 155 "./syntax.y" { (yyval.node) = Operator((yyval.node),"CompSt",(yyloc).first_line,4,(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1554 "syntax.tab.c" +#line 1554 "./syntax.tab.c" break; case 33: /* CompSt: LC DefList error RC */ -#line 156 "syntax.y" +#line 156 "./syntax.y" { (yyval.node) = NULL; yyerror("CompSt"); } -#line 1560 "syntax.tab.c" +#line 1560 "./syntax.tab.c" break; case 34: /* StmtList: Stmt StmtList */ -#line 158 "syntax.y" +#line 158 "./syntax.y" { (yyval.node) = Operator((yyval.node),"StmtList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1566 "syntax.tab.c" +#line 1566 "./syntax.tab.c" break; case 35: /* StmtList: %empty */ -#line 159 "syntax.y" +#line 159 "./syntax.y" { (yyval.node) = NULL; } -#line 1572 "syntax.tab.c" +#line 1572 "./syntax.tab.c" break; case 36: /* Stmt: Exp SEMI */ -#line 161 "syntax.y" +#line 161 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1578 "syntax.tab.c" +#line 1578 "./syntax.tab.c" break; case 37: /* Stmt: CompSt */ -#line 162 "syntax.y" +#line 162 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1584 "syntax.tab.c" +#line 1584 "./syntax.tab.c" break; case 38: /* Stmt: RETURN Exp SEMI */ -#line 163 "syntax.y" +#line 163 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1590 "syntax.tab.c" +#line 1590 "./syntax.tab.c" break; case 39: /* Stmt: IF LP Exp RP Stmt */ -#line 164 "syntax.y" +#line 164 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,5,(yyvsp[-4].node),(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1596 "syntax.tab.c" +#line 1596 "./syntax.tab.c" break; case 40: /* Stmt: IF LP Exp RP Stmt ELSE Stmt */ -#line 165 "syntax.y" +#line 165 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,7,(yyvsp[-6].node),(yyvsp[-5].node),(yyvsp[-4].node),(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1602 "syntax.tab.c" +#line 1602 "./syntax.tab.c" break; case 41: /* Stmt: WHILE LP Exp RP Stmt */ -#line 166 "syntax.y" +#line 166 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,5,(yyvsp[-4].node),(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1608 "syntax.tab.c" +#line 1608 "./syntax.tab.c" break; case 42: /* Stmt: error SEMI */ -#line 167 "syntax.y" +#line 167 "./syntax.y" { (yyval.node) = NULL; yyerror("1Stmt"); } -#line 1614 "syntax.tab.c" +#line 1614 "./syntax.tab.c" break; case 43: /* Stmt: Exp error */ -#line 168 "syntax.y" +#line 168 "./syntax.y" { (yyval.node) = NULL; yyerror("2Stmt"); } -#line 1620 "syntax.tab.c" +#line 1620 "./syntax.tab.c" break; case 44: /* Stmt: IF LP Exp error RP Stmt */ -#line 169 "syntax.y" +#line 169 "./syntax.y" { (yyval.node) = NULL; yyerror("3Stmt"); } -#line 1626 "syntax.tab.c" +#line 1626 "./syntax.tab.c" break; case 45: /* Stmt: RETURN error SEMI */ -#line 170 "syntax.y" +#line 170 "./syntax.y" { (yyval.node) = NULL; yyerror("4Stmt"); } -#line 1632 "syntax.tab.c" +#line 1632 "./syntax.tab.c" break; case 46: /* Stmt: RETURN Exp error */ -#line 171 "syntax.y" +#line 171 "./syntax.y" { (yyval.node) = NULL; yyerror("5Stmt"); } -#line 1638 "syntax.tab.c" +#line 1638 "./syntax.tab.c" break; case 47: /* DefList: Def DefList */ -#line 176 "syntax.y" +#line 176 "./syntax.y" { (yyval.node) = Operator((yyval.node),"DefList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1644 "syntax.tab.c" +#line 1644 "./syntax.tab.c" break; case 48: /* DefList: %empty */ -#line 177 "syntax.y" +#line 177 "./syntax.y" { (yyval.node) = NULL; } -#line 1650 "syntax.tab.c" +#line 1650 "./syntax.tab.c" break; case 49: /* Def: Specifier DecList SEMI */ -#line 179 "syntax.y" +#line 179 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Def",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1656 "syntax.tab.c" +#line 1656 "./syntax.tab.c" break; case 50: /* Def: Specifier error SEMI */ -#line 180 "syntax.y" +#line 180 "./syntax.y" { (yyval.node) = NULL; yyerror("Def"); } -#line 1662 "syntax.tab.c" +#line 1662 "./syntax.tab.c" break; case 51: /* Def: Specifier DecList error SEMI */ -#line 181 "syntax.y" +#line 181 "./syntax.y" { (yyval.node) = NULL; yyerror("Def"); } -#line 1668 "syntax.tab.c" +#line 1668 "./syntax.tab.c" break; case 52: /* DecList: Dec */ -#line 183 "syntax.y" +#line 183 "./syntax.y" { (yyval.node) = Operator((yyval.node),"DecList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1674 "syntax.tab.c" +#line 1674 "./syntax.tab.c" break; case 53: /* DecList: Dec COMMA DecList */ -#line 184 "syntax.y" +#line 184 "./syntax.y" { (yyval.node) = Operator((yyval.node),"DecList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1680 "syntax.tab.c" +#line 1680 "./syntax.tab.c" break; case 54: /* Dec: VarDec */ -#line 186 "syntax.y" +#line 186 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Dec",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1686 "syntax.tab.c" +#line 1686 "./syntax.tab.c" break; case 55: /* Dec: VarDec ASSIGNOP Exp */ -#line 187 "syntax.y" +#line 187 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Dec",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1692 "syntax.tab.c" +#line 1692 "./syntax.tab.c" break; case 56: /* Exp: Exp ASSIGNOP Exp */ -#line 192 "syntax.y" +#line 192 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1698 "syntax.tab.c" +#line 1698 "./syntax.tab.c" break; case 57: /* Exp: Exp AND Exp */ -#line 193 "syntax.y" +#line 193 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1704 "syntax.tab.c" +#line 1704 "./syntax.tab.c" break; case 58: /* Exp: Exp OR Exp */ -#line 194 "syntax.y" +#line 194 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1710 "syntax.tab.c" +#line 1710 "./syntax.tab.c" break; case 59: /* Exp: Exp RELOP Exp */ -#line 195 "syntax.y" +#line 195 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1716 "syntax.tab.c" +#line 1716 "./syntax.tab.c" break; case 60: /* Exp: Exp PLUS Exp */ -#line 196 "syntax.y" +#line 196 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1722 "syntax.tab.c" +#line 1722 "./syntax.tab.c" break; case 61: /* Exp: Exp MINUS Exp */ -#line 197 "syntax.y" +#line 197 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1728 "syntax.tab.c" +#line 1728 "./syntax.tab.c" break; case 62: /* Exp: Exp STAR Exp */ -#line 198 "syntax.y" +#line 198 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1734 "syntax.tab.c" +#line 1734 "./syntax.tab.c" break; case 63: /* Exp: Exp DIV Exp */ -#line 199 "syntax.y" +#line 199 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1740 "syntax.tab.c" +#line 1740 "./syntax.tab.c" break; case 64: /* Exp: LP Exp RP */ -#line 200 "syntax.y" +#line 200 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1746 "syntax.tab.c" +#line 1746 "./syntax.tab.c" break; case 65: /* Exp: MINUS Exp */ -#line 201 "syntax.y" +#line 201 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1752 "syntax.tab.c" +#line 1752 "./syntax.tab.c" break; case 66: /* Exp: NOT Exp */ -#line 202 "syntax.y" +#line 202 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1758 "syntax.tab.c" +#line 1758 "./syntax.tab.c" break; case 67: /* Exp: ID LP Args RP */ -#line 203 "syntax.y" +#line 203 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,4,(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1764 "syntax.tab.c" +#line 1764 "./syntax.tab.c" break; case 68: /* Exp: ID LP RP */ -#line 204 "syntax.y" +#line 204 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1770 "syntax.tab.c" +#line 1770 "./syntax.tab.c" break; case 69: /* Exp: Exp LB Exp RB */ -#line 205 "syntax.y" +#line 205 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,4,(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1776 "syntax.tab.c" +#line 1776 "./syntax.tab.c" break; case 70: /* Exp: Exp DOT ID */ -#line 206 "syntax.y" +#line 206 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1782 "syntax.tab.c" +#line 1782 "./syntax.tab.c" break; case 71: /* Exp: ID */ -#line 207 "syntax.y" +#line 207 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1788 "syntax.tab.c" +#line 1788 "./syntax.tab.c" break; case 72: /* Exp: INT */ -#line 208 "syntax.y" +#line 208 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1794 "syntax.tab.c" +#line 1794 "./syntax.tab.c" break; case 73: /* Exp: FLOAT */ -#line 209 "syntax.y" +#line 209 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1800 "syntax.tab.c" +#line 1800 "./syntax.tab.c" break; case 74: /* Args: Exp COMMA Args */ -#line 211 "syntax.y" +#line 211 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Args",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1806 "syntax.tab.c" +#line 1806 "./syntax.tab.c" break; case 75: /* Args: Exp */ -#line 212 "syntax.y" +#line 212 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Args",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1812 "syntax.tab.c" +#line 1812 "./syntax.tab.c" break; case 76: /* Args: error Args */ -#line 213 "syntax.y" +#line 213 "./syntax.y" { (yyval.node) = NULL; yyerror("Wrong Args"); } -#line 1818 "syntax.tab.c" +#line 1818 "./syntax.tab.c" break; -#line 1822 "syntax.tab.c" +#line 1822 "./syntax.tab.c" default: break; } @@ -2016,7 +2016,7 @@ yyreturnlab: return yyresult; } -#line 216 "syntax.y" +#line 216 "./syntax.y" diff --git a/Code/syntax.tab.h b/Code/syntax.tab.h index e4f7015..37c6ded 100644 --- a/Code/syntax.tab.h +++ b/Code/syntax.tab.h @@ -91,11 +91,11 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 28 "syntax.y" +#line 28 "./syntax.y" struct Tree_node_t * node; -#line 99 "syntax.tab.h" +#line 99 "./syntax.tab.h" }; typedef union YYSTYPE YYSTYPE; -- GitLab