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;