diff --git a/Code/data.h b/Code/data.h index d2d0b011b3cefd9a4cbfe361b7a573cb6f118ad6..02fbcf60cc17d000df00ba0b7a58749ad4f6e1c6 100644 --- a/Code/data.h +++ b/Code/data.h @@ -1,7 +1,7 @@ #ifndef STRUCT_H #define STRUCT_H - +#include <stdbool.h> //璇硶鏍戠粨鏋� typedef struct Tree_node_t { @@ -88,10 +88,12 @@ typedef struct Symbol_Node_t { struct Symbol_Node_t * scope_prev, * scope_next; }Symbol_Node_t; +extern struct Info_Node_Ops * nodeop; + struct SymbolInfoList_t { Symbol_Node_t head,tail; - + int list_cnt; //鍦╨ist閾捐〃鑺傜偣cur涔嬪悗鎻掑叆鏂拌妭鐐筺ew !!!娉ㄦ剰鎻掑叆鑺傜偣鍓嶈鍏坢alloc涓€涓妭鐐� //鍦╨ist閾捐〃涓垹闄ur鑺傜偣, !!!娉ㄦ剰锛氬垹闄よ妭鐐规椂鍊欎笉free锛屽湪stack涓璸op鐨勬椂鍊檉ree; }; @@ -106,9 +108,10 @@ typedef struct SymbolTable_t { //Api Symbol_Node_t * (* node_alloc)(); - void (*init)(int); //鍒濆鍖栧搱甯岃〃 + void (*init)(int); //鍒濆鍖栧搱甯岃〃 void (*insert)(Symbol_Node_t *); //鎻掑叆鑺傜偣 void (*remove)(Symbol_Node_t *); //鍒犻櫎鑺傜偣 + Symbol_Node_t * (*find)(char *); //鏌ヨ鍏冪礌锛岃繑鍥瀟rue锛屾壘鍒帮紝false娌℃湁鎵惧埌 }SymbolTable_t; diff --git a/Code/lex.yy.c b/Code/lex.yy.c index 94b77ff733867140565b2c5f5655bdbe3119859c..c8e8b398718e392fe97820e88c2493892448858c 100644 --- a/Code/lex.yy.c +++ b/Code/lex.yy.c @@ -1,6 +1,6 @@ -#line 1 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" +#line 1 "./lex.yy.c" -#line 3 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" +#line 3 "./lex.yy.c" #define YY_INT_ALIGNED short int @@ -523,8 +523,8 @@ int yy_flex_debug = 0; #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; -#line 1 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" -#line 2 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 1 "./lexical.l" +#line 2 "./lexical.l" #include <stdio.h> #include "debug.h" #include "syntax.tab.h" @@ -535,8 +535,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 538 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" -#line 539 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" +#line 538 "./lex.yy.c" +#line 539 "./lex.yy.c" #define INITIAL 0 @@ -753,9 +753,9 @@ YY_DECL } { -#line 44 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 44 "./lexical.l" -#line 758 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" +#line 758 "./lex.yy.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -814,163 +814,163 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 45 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 45 "./lexical.l" { ELEMENT("STRUCT"); return STRUCT; } YY_BREAK case 2: YY_RULE_SETUP -#line 46 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 46 "./lexical.l" { ELEMENT("RETURN"); return RETURN; } YY_BREAK case 3: YY_RULE_SETUP -#line 47 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 47 "./lexical.l" { ELEMENT("IF"); return IF; } YY_BREAK case 4: YY_RULE_SETUP -#line 48 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 48 "./lexical.l" { ELEMENT("ELSE"); return ELSE; } YY_BREAK case 5: YY_RULE_SETUP -#line 49 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 49 "./lexical.l" { ELEMENT("WHILE"); return WHILE; } YY_BREAK case 6: YY_RULE_SETUP -#line 50 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 50 "./lexical.l" { ELEMENT("TYPE"); return TYPE; } YY_BREAK case 7: YY_RULE_SETUP -#line 51 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 51 "./lexical.l" { ELEMENT("INT"); return INT;} YY_BREAK case 8: YY_RULE_SETUP -#line 52 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 52 "./lexical.l" { ELEMENT("FLOAT"); return FLOAT;} YY_BREAK case 9: YY_RULE_SETUP -#line 53 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 53 "./lexical.l" { ELEMENT("ID"); return ID; } YY_BREAK case 10: YY_RULE_SETUP -#line 54 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 54 "./lexical.l" { ELEMENT("SEMI"); return SEMI;} YY_BREAK case 11: YY_RULE_SETUP -#line 55 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 55 "./lexical.l" { ELEMENT("COMMA"); return COMMA;} YY_BREAK case 12: YY_RULE_SETUP -#line 56 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 56 "./lexical.l" { ELEMENT("ASSIGNOP"); return ASSIGNOP;} YY_BREAK case 13: YY_RULE_SETUP -#line 57 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 57 "./lexical.l" { ELEMENT("RELOP"); return RELOP;} YY_BREAK case 14: YY_RULE_SETUP -#line 58 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 58 "./lexical.l" { ELEMENT("PLUS"); return PLUS;} YY_BREAK case 15: YY_RULE_SETUP -#line 59 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 59 "./lexical.l" { ELEMENT("MINUS"); return MINUS;} YY_BREAK case 16: YY_RULE_SETUP -#line 60 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 60 "./lexical.l" { ELEMENT("STAR"); return STAR;} YY_BREAK case 17: YY_RULE_SETUP -#line 61 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 61 "./lexical.l" { ELEMENT("DIV"); return DIV;} YY_BREAK case 18: YY_RULE_SETUP -#line 62 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 62 "./lexical.l" { ELEMENT("AND"); return AND;} YY_BREAK case 19: YY_RULE_SETUP -#line 63 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 63 "./lexical.l" { ELEMENT("OR"); return OR;} YY_BREAK case 20: YY_RULE_SETUP -#line 64 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 64 "./lexical.l" { ELEMENT("DOT"); return DOT;} YY_BREAK case 21: YY_RULE_SETUP -#line 65 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 65 "./lexical.l" { ELEMENT("NOT"); return NOT;} YY_BREAK case 22: YY_RULE_SETUP -#line 66 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 66 "./lexical.l" { ELEMENT("LP"); return LP;} YY_BREAK case 23: YY_RULE_SETUP -#line 67 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 67 "./lexical.l" { ELEMENT("RP"); return RP;} YY_BREAK case 24: YY_RULE_SETUP -#line 68 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 68 "./lexical.l" { ELEMENT("LB"); return LB;} YY_BREAK case 25: YY_RULE_SETUP -#line 69 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 69 "./lexical.l" { ELEMENT("RB"); return RB;} YY_BREAK case 26: YY_RULE_SETUP -#line 70 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 70 "./lexical.l" { ELEMENT("LC"); return LC;} YY_BREAK case 27: YY_RULE_SETUP -#line 71 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 71 "./lexical.l" { ELEMENT("RC"); return RC;} YY_BREAK case 28: YY_RULE_SETUP -#line 72 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 72 "./lexical.l" { strcat(linetext," ");} YY_BREAK case 29: YY_RULE_SETUP -#line 73 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 73 "./lexical.l" { yycolumn += 3; strcat(linetext,"\t");} YY_BREAK case 30: /* rule 30 can match eol */ YY_RULE_SETUP -#line 74 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 74 "./lexical.l" { yycolumn = 1; yylineno += 1; memset(linetext,0,sizeof(linetext)); } YY_BREAK case 31: YY_RULE_SETUP -#line 75 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 75 "./lexical.l" { char c = input(); while(c != '\n') { c = input(); } yylineno += 1; } YY_BREAK case 32: YY_RULE_SETUP -#line 76 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 76 "./lexical.l" { char c1 = input(),c2 = input(); if (c1 == '\n') { @@ -993,15 +993,15 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 95 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 95 "./lexical.l" { LexicalError("%s",yytext); syntax++; } YY_BREAK case 34: YY_RULE_SETUP -#line 97 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 97 "./lexical.l" ECHO; YY_BREAK -#line 1004 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lex.yy.c" +#line 1004 "./lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -2006,7 +2006,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 97 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/lexical.l" +#line 97 "./lexical.l" extern int syntax; diff --git a/Code/parser b/Code/parser new file mode 100755 index 0000000000000000000000000000000000000000..e525621f021f4732c78f3cf8e4c2c168c1134983 Binary files /dev/null and b/Code/parser differ diff --git a/Code/symbol.c b/Code/symbol.c index ee2ba0038fce89cba21dc06e92dff6221450d809..4388f0e6499c367b9c1bfd578ee085f5125b74e5 100644 --- a/Code/symbol.c +++ b/Code/symbol.c @@ -11,20 +11,35 @@ typedef SymbolInfoList_t list_t; typedef struct SymbolStack_ele_t stack_ele_t; //閮藉簲璇ヤ娇鐢╯tatic + static void node_init(); static void node_delete(void * cur,int mode); +static bool node_equal(unit_t*,unit_t*); + +static struct Info_Node_Ops { + void (*init)(); + void (*delete)(void *,int); + bool (*equal)(unit_t*,unit_t*); +}InfoNodeOp = { + .init = node_init, + .delete = node_delete, + .equal = node_equal, +}; + +struct Info_Node_Ops * nodeop = &InfoNodeOp; + static void SymbolInfoList_insert(list_t * list,unit_t * cur,unit_t * new); static void SymbolInfoList_remove(list_t * list,unit_t * cur); static void SymbolInfoList_init(list_t * list); -static unit_t * SymbolInfoList_find(unit_t * cur); +static unit_t * SymbolInfoList_find(list_t * list,char * name); static list_t * SymbolInfoList_alloc(); static struct Hash_List_Ops { void (*insert)(list_t * list,unit_t * cur,unit_t * new); //鍦╨ist閾捐〃鑺傜偣cur涔嬪悗鎻掑叆鏂拌妭鐐筺ew !!!娉ㄦ剰鎻掑叆鑺傜偣鍓嶈鍏坢alloc涓€涓妭鐐� void (*remove)(list_t * list,unit_t * cur); //鍦╨ist閾捐〃涓垹闄ur鑺傜偣, !!!娉ㄦ剰锛氬垹闄よ妭鐐规椂鍊欎笉free锛屽湪stack涓璸op鐨勬椂鍊檉ree; void (*init)(list_t * list); //鍒濆鍖� - unit_t * (* find)(unit_t * cur); + unit_t * (* find)(list_t * list,char * name); list_t * (*alloc)(); }listop = { .insert = SymbolInfoList_insert, @@ -38,10 +53,11 @@ static struct Hash_List_Ops { //hash table list 鎺ュ彛 -static void SymbolTable_init(int size); static unit_t * SymbolTable_node_alloc(); +static void SymbolTable_init(int size); static void SymbolTable_insert(unit_t * cur); static void SymbolTable_remove(unit_t * cur); +static unit_t * SymbolTable_find(char *); //SymbolTable API @@ -59,6 +75,7 @@ MODULE_DEF(SymbolTable_t,symbol_table) = { .init = SymbolTable_init, .insert = SymbolTable_insert, .remove = SymbolTable_remove, + .find = SymbolTable_find, }; @@ -131,6 +148,16 @@ static void SymbolTable_remove(unit_t * cur) { }//璇存槑瑙佹渶鍚庯紝杩欓噷涓峟ree //Symbol Table +static unit_t * SymbolTable_find(char * name) { + int id = symbol_table->hash(name); + list_t * list = symbol_table->table[id]; + if(list == NULL) { + return NULL; + } else { + return listop.find(list,name); + } +} + /* * 鍦╯tack涓紝unit_t *鐨勬寚閽堜綔鐢� @@ -207,7 +234,6 @@ static stack_ele_t * SymbolStack_top() { } else { Log("The Symbol Stack is empty!"); assert(0); - return NULL; } } //Symbol Stack @@ -215,13 +241,22 @@ static stack_ele_t * SymbolStack_top() { //Symbol List static void SymbolInfoList_insert(list_t * list,unit_t * cur,unit_t * new) { - unit_t * next = cur->hash_next, * prev = cur->hash_prev; - prev->hash_next = next; - next->hash_prev = prev; + unit_t * next = cur->hash_next; + cur->hash_next = new; + new->hash_next = next; + next->hash_prev = new; + new->hash_prev = cur; + list->list_cnt++; } static void SymbolInfoList_init(list_t * list) { + list->list_cnt = 0; + list->head.hash_next = &list->tail; + list->tail.hash_prev = &list->head; + + list->head.hash_prev = list->tail.hash_next = NULL; + list->head.type = list->tail.type = HASHLIST; } static void SymbolInfoList_remove(list_t * list,unit_t * cur) { @@ -229,9 +264,10 @@ static void SymbolInfoList_remove(list_t * list,unit_t * cur) { assert(prev != NULL && next != NULL); prev->hash_next = next; next->hash_prev = prev; + list->list_cnt++; } -static unit_t * SymbolInfoList_find(unit_t * cur) { +static unit_t * SymbolInfoList_find(list_t * list,char * name) { } @@ -241,6 +277,20 @@ static list_t * SymbolInfoList_alloc() { //Symbol List +//Symbol Info node ops +static void node_init() { + +} + +static void node_delete(void * cur,int mode) { + +} + +static bool node_equal(unit_t* n1,unit_t* n2) { + +} +//Symbol Info node + /* 姣忔鍚戞暎鍒楄〃涓彃鍏ュ厓绱犳椂锛屾€绘槸灏嗘柊鎻掑叆鐨勫厓绱犳斁鍒拌妲戒笅鎸傜殑閾捐〃浠ュ強璇ュ眰 鎵€瀵瑰簲鐨勯摼琛ㄧ殑琛ㄥご銆傛瘡娆℃煡琛ㄦ椂濡傛灉瀹氫綅鍒版煇涓Ы锛屽垯鎸夐『搴忛亶鍘嗚繖涓Ы涓嬫寕鐨勯摼琛ㄥ苟杩斿洖 diff --git a/Code/syntax.tab.c b/Code/syntax.tab.c index 0c611a8894517d678d423621e65c5daa0fe6e3e2..0fc737b04c9fe21eabfddcad52e42e1c24ad6c41 100644 --- a/Code/syntax.tab.c +++ b/Code/syntax.tab.c @@ -67,7 +67,7 @@ /* First part of user prologue. */ -#line 3 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 3 "./syntax.y" int yycolumn = 1; char linetext[128]; @@ -78,7 +78,7 @@ yycolumn += yyleng; //#define YYDEBUG 1 //int yydebug = 1; -#line 15 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 15 "./syntax.y" #include <stdio.h> #include "lex.yy.c" @@ -93,7 +93,7 @@ extern int syntax; -#line 97 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 97 "./syntax.tab.c" # ifndef YY_CAST # ifdef __cplusplus @@ -1364,451 +1364,451 @@ yyreduce: switch (yyn) { case 2: /* Program: ExtDefList */ -#line 107 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 107 "./syntax.y" { tree->root = (yyval.node) = Operator((yyval.node),"Program",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1370 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1370 "./syntax.tab.c" break; case 3: /* ExtDefList: ExtDef ExtDefList */ -#line 109 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 109 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDefList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1376 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1376 "./syntax.tab.c" break; case 4: /* ExtDefList: %empty */ -#line 110 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 110 "./syntax.y" { (yyval.node) = NULL; } -#line 1382 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1382 "./syntax.tab.c" break; case 5: /* ExtDef: Specifier ExtDecList SEMI */ -#line 112 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1388 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1388 "./syntax.tab.c" break; case 6: /* ExtDef: Specifier SEMI */ -#line 113 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 113 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1394 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1394 "./syntax.tab.c" break; case 7: /* ExtDef: Specifier FunDec CompSt */ -#line 114 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 114 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1400 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1400 "./syntax.tab.c" break; case 8: /* ExtDef: error SEMI */ -#line 115 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 115 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1406 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1406 "./syntax.tab.c" break; case 9: /* ExtDef: Specifier error */ -#line 116 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 116 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef,missing ;"); } -#line 1412 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1412 "./syntax.tab.c" break; case 10: /* ExtDef: Specifier error SEMI */ -#line 117 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 117 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1418 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1418 "./syntax.tab.c" break; case 11: /* ExtDef: Specifier error CompSt */ -#line 118 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 118 "./syntax.y" { (yyval.node) = NULL;yyerror("ExtDef"); } -#line 1424 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1424 "./syntax.tab.c" break; case 12: /* ExtDecList: VarDec */ -#line 120 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 120 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDecList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1430 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1430 "./syntax.tab.c" break; case 13: /* ExtDecList: VarDec COMMA ExtDecList */ -#line 121 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 121 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ExtDecList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1436 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1436 "./syntax.tab.c" break; case 14: /* Specifier: TYPE */ -#line 126 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 126 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Specifier",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1442 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1442 "./syntax.tab.c" break; case 15: /* Specifier: StructSpecifier */ -#line 127 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 127 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Specifier",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1448 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1448 "./syntax.tab.c" break; case 16: /* StructSpecifier: STRUCT OptTag LC DefList RC */ -#line 129 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 129 "./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 1454 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1454 "./syntax.tab.c" break; case 17: /* StructSpecifier: STRUCT Tag */ -#line 130 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 130 "./syntax.y" { (yyval.node) = Operator((yyval.node),"StructSpecifier",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1460 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1460 "./syntax.tab.c" break; case 18: /* OptTag: ID */ -#line 132 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 132 "./syntax.y" { (yyval.node) = Operator((yyval.node),"OptTag",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1466 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1466 "./syntax.tab.c" break; case 19: /* OptTag: %empty */ -#line 133 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 133 "./syntax.y" { (yyval.node) = NULL; } -#line 1472 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1472 "./syntax.tab.c" break; case 20: /* Tag: ID */ -#line 135 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 135 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Tag",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1478 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1478 "./syntax.tab.c" break; case 21: /* VarDec: ID */ -#line 139 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 139 "./syntax.y" { (yyval.node) = Operator((yyval.node),"VarDec",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1484 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1484 "./syntax.tab.c" break; case 22: /* VarDec: VarDec LB INT RB */ -#line 140 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 140 "./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 1490 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1490 "./syntax.tab.c" break; case 23: /* VarDec: VarDec LB error RB */ -#line 141 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 141 "./syntax.y" { (yyval.node) = NULL; yyerror("VarDec"); } -#line 1496 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1496 "./syntax.tab.c" break; case 24: /* FunDec: ID LP VarList RP */ -#line 143 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 143 "./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 1502 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1502 "./syntax.tab.c" break; case 25: /* FunDec: ID LP RP */ -#line 144 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 144 "./syntax.y" { (yyval.node) = Operator((yyval.node),"FunDec",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1508 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1508 "./syntax.tab.c" break; case 26: /* FunDec: ID LP error RP */ -#line 145 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 145 "./syntax.y" { (yyval.node) = NULL; yyerror("FunDec"); } -#line 1514 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1514 "./syntax.tab.c" break; case 27: /* FunDec: error LP VarList RP */ -#line 146 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 146 "./syntax.y" { (yyval.node) = NULL; yyerror("FunDec"); } -#line 1520 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1520 "./syntax.tab.c" break; case 28: /* VarList: ParamDec COMMA VarList */ -#line 148 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 148 "./syntax.y" { (yyval.node) = Operator((yyval.node),"VarList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1526 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1526 "./syntax.tab.c" break; case 29: /* VarList: ParamDec */ -#line 149 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 149 "./syntax.y" { (yyval.node) = Operator((yyval.node),"VarList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1532 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1532 "./syntax.tab.c" break; case 30: /* ParamDec: Specifier VarDec */ -#line 151 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 151 "./syntax.y" { (yyval.node) = Operator((yyval.node),"ParamDec",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1538 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1538 "./syntax.tab.c" break; case 31: /* CompSt: LC DefList StmtList RC */ -#line 156 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 156 "./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 1544 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1544 "./syntax.tab.c" break; case 32: /* CompSt: LC DefList error RC */ -#line 157 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 157 "./syntax.y" { (yyval.node) = NULL; yyerror("CompSt"); } -#line 1550 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1550 "./syntax.tab.c" break; case 33: /* StmtList: Stmt StmtList */ -#line 159 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 159 "./syntax.y" { (yyval.node) = Operator((yyval.node),"StmtList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1556 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1556 "./syntax.tab.c" break; case 34: /* StmtList: %empty */ -#line 160 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 160 "./syntax.y" { (yyval.node) = NULL; } -#line 1562 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1562 "./syntax.tab.c" break; case 35: /* Stmt: Exp SEMI */ -#line 162 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 162 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1568 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1568 "./syntax.tab.c" break; case 36: /* Stmt: CompSt */ -#line 163 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 163 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1574 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1574 "./syntax.tab.c" break; case 37: /* Stmt: RETURN Exp SEMI */ -#line 164 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 164 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1580 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1580 "./syntax.tab.c" break; case 38: /* Stmt: IF LP Exp RP Stmt */ -#line 165 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 165 "./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 1586 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1586 "./syntax.tab.c" break; case 39: /* Stmt: IF LP Exp RP Stmt ELSE Stmt */ -#line 166 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 166 "./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 1592 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1592 "./syntax.tab.c" break; case 40: /* Stmt: WHILE LP Exp RP Stmt */ -#line 167 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 167 "./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 1598 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1598 "./syntax.tab.c" break; case 41: /* Stmt: error SEMI */ -#line 168 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 168 "./syntax.y" { (yyval.node) = NULL; yyerror("1Stmt"); } -#line 1604 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1604 "./syntax.tab.c" break; case 42: /* Stmt: Exp error */ -#line 169 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 169 "./syntax.y" { (yyval.node) = NULL; yyerror("2Stmt"); } -#line 1610 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1610 "./syntax.tab.c" break; case 43: /* Stmt: IF LP Exp error RP Stmt */ -#line 170 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 170 "./syntax.y" { (yyval.node) = NULL; yyerror("3Stmt"); } -#line 1616 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1616 "./syntax.tab.c" break; case 44: /* Stmt: RETURN error SEMI */ -#line 171 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 171 "./syntax.y" { (yyval.node) = NULL; yyerror("4Stmt"); } -#line 1622 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1622 "./syntax.tab.c" break; case 45: /* Stmt: RETURN Exp error */ -#line 172 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 172 "./syntax.y" { (yyval.node) = NULL; yyerror("5Stmt"); } -#line 1628 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1628 "./syntax.tab.c" break; case 46: /* DefList: Def DefList */ -#line 177 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 177 "./syntax.y" { (yyval.node) = Operator((yyval.node),"DefList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1634 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1634 "./syntax.tab.c" break; case 47: /* DefList: %empty */ -#line 178 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 178 "./syntax.y" { (yyval.node) = NULL; } -#line 1640 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1640 "./syntax.tab.c" break; case 48: /* Def: Specifier DecList SEMI */ -#line 180 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 180 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Def",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1646 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1646 "./syntax.tab.c" break; case 49: /* Def: Specifier error SEMI */ -#line 181 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 181 "./syntax.y" { (yyval.node) = NULL; yyerror("Def"); } -#line 1652 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1652 "./syntax.tab.c" break; case 50: /* Def: Specifier DecList error SEMI */ -#line 182 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 182 "./syntax.y" { (yyval.node) = NULL; yyerror("Def"); } -#line 1658 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1658 "./syntax.tab.c" break; case 51: /* DecList: Dec */ -#line 184 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 184 "./syntax.y" { (yyval.node) = Operator((yyval.node),"DecList",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1664 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1664 "./syntax.tab.c" break; case 52: /* DecList: Dec COMMA DecList */ -#line 185 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 185 "./syntax.y" { (yyval.node) = Operator((yyval.node),"DecList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1670 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1670 "./syntax.tab.c" break; case 53: /* Dec: VarDec */ -#line 187 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 187 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Dec",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1676 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1676 "./syntax.tab.c" break; case 54: /* Dec: VarDec ASSIGNOP Exp */ -#line 188 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 188 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Dec",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1682 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1682 "./syntax.tab.c" break; case 55: /* Exp: Exp ASSIGNOP Exp */ -#line 193 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1688 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1688 "./syntax.tab.c" break; case 56: /* Exp: Exp AND Exp */ -#line 194 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1694 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1694 "./syntax.tab.c" break; case 57: /* Exp: Exp OR Exp */ -#line 195 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1700 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1700 "./syntax.tab.c" break; case 58: /* Exp: Exp RELOP Exp */ -#line 196 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1706 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1706 "./syntax.tab.c" break; case 59: /* Exp: Exp PLUS Exp */ -#line 197 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1712 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1712 "./syntax.tab.c" break; case 60: /* Exp: Exp MINUS Exp */ -#line 198 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1718 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1718 "./syntax.tab.c" break; case 61: /* Exp: Exp STAR Exp */ -#line 199 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1724 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1724 "./syntax.tab.c" break; case 62: /* Exp: Exp DIV Exp */ -#line 200 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/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 1730 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1730 "./syntax.tab.c" break; case 63: /* Exp: LP Exp RP */ -#line 201 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 201 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1736 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1736 "./syntax.tab.c" break; case 64: /* Exp: MINUS Exp */ -#line 202 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 202 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1742 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1742 "./syntax.tab.c" break; case 65: /* Exp: NOT Exp */ -#line 203 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 203 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1748 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1748 "./syntax.tab.c" break; case 66: /* Exp: ID LP Args RP */ -#line 204 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 204 "./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 1754 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1754 "./syntax.tab.c" break; case 67: /* Exp: ID LP RP */ -#line 205 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 205 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1760 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1760 "./syntax.tab.c" break; case 68: /* Exp: Exp LB Exp RB */ -#line 206 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 206 "./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 1766 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1766 "./syntax.tab.c" break; case 69: /* Exp: Exp DOT ID */ -#line 207 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 207 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1772 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1772 "./syntax.tab.c" break; case 70: /* Exp: ID */ -#line 208 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 208 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1778 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1778 "./syntax.tab.c" break; case 71: /* Exp: INT */ -#line 209 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 209 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1784 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1784 "./syntax.tab.c" break; case 72: /* Exp: FLOAT */ -#line 210 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 210 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1790 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1790 "./syntax.tab.c" break; case 73: /* Args: Exp COMMA Args */ -#line 212 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 212 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Args",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); } -#line 1796 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1796 "./syntax.tab.c" break; case 74: /* Args: Exp */ -#line 213 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 213 "./syntax.y" { (yyval.node) = Operator((yyval.node),"Args",(yyloc).first_line,1,(yyvsp[0].node)); } -#line 1802 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1802 "./syntax.tab.c" break; case 75: /* Args: error Args */ -#line 214 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 214 "./syntax.y" { (yyval.node) = NULL; yyerror("Wrong Args"); } -#line 1808 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1808 "./syntax.tab.c" break; -#line 1812 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.c" +#line 1812 "./syntax.tab.c" default: break; } @@ -2006,7 +2006,7 @@ yyreturnlab: return yyresult; } -#line 217 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 217 "./syntax.y" diff --git a/Code/syntax.tab.h b/Code/syntax.tab.h index 2886c8ebf1c36b557ca79b0d67b143fe04146a76..6c3c38ec48ee56a82c3a94600b9986581bf4d903 100644 --- a/Code/syntax.tab.h +++ b/Code/syntax.tab.h @@ -35,8 +35,8 @@ especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ -#ifndef YY_YY_HOME_PPX_ZHAOCHAOYI_COMPILER_LAB2_CODE_SYNTAX_TAB_H_INCLUDED -# define YY_YY_HOME_PPX_ZHAOCHAOYI_COMPILER_LAB2_CODE_SYNTAX_TAB_H_INCLUDED +#ifndef YY_YY_SYNTAX_TAB_H_INCLUDED +# define YY_YY_SYNTAX_TAB_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -91,11 +91,11 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 31 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.y" +#line 31 "./syntax.y" struct Tree_node_t * node; -#line 99 "/home/ppx/zhaochaoyi/Compiler/Lab2/Code/syntax.tab.h" +#line 99 "./syntax.tab.h" }; typedef union YYSTYPE YYSTYPE; @@ -124,4 +124,4 @@ extern YYLTYPE yylloc; int yyparse (void); -#endif /* !YY_YY_HOME_PPX_ZHAOCHAOYI_COMPILER_LAB2_CODE_SYNTAX_TAB_H_INCLUDED */ +#endif /* !YY_YY_SYNTAX_TAB_H_INCLUDED */