diff --git a/Code/lex.yy.c b/Code/lex.yy.c index fbcf034b0254808e7004f9c8e54b1c063b3c5eb8..9e287e198f1e65da548d624ca39e4e714cda5ef0 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 14ff2c54ab0bd242ed5ef62eae26da282f17cf51..1c7f33155e30bba258ac9ff0199f7e1b9fa6c1a0 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 Binary files a/Code/parser and b/Code/parser differ diff --git a/Code/semantic.c b/Code/semantic.c index 7a609e0e9c60de9a90831df39004c3f9ef5a6dbb..7a59e4e3be632d509388593acc33f0f8c38e1a2f 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 c129f5940b90ddab1d83a33bc489f912c1e0680f..cb7583d6def8a68ed515f8fcf8406a77eaee64c2 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 e4f7015fe6b996bbdd823b28ad3f613f69d9fdd4..37c6dedd1d2a4676ff3c7173e160d265c77dd804 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;