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  */