diff --git a/Code/Makefile b/Code/Makefile
index bd8d8316d22072258084ae2fea5dd939471df6ed..ff0ad6c13d218ff0b35cc2243199a78b9fccc9a5 100755
--- a/Code/Makefile
+++ b/Code/Makefile
@@ -40,10 +40,13 @@ syntax-c: $(YFILE)
 -include $(patsubst %.o, %.d, $(OBJS))
 
 
+
+TESTFILE = $(shell find ../ -name "*.cmm")
+
 # 瀹氫箟鐨勪竴浜涗吉鐩爣
 .PHONY: clean test
 test: parser
-	./parser ../Test/test1.cmm ../Test/test2.cmm > a.txt
+	./parser $(TESTFILE) > a.txt
 	@rm *.o
 clean:
 	@rm -f parser lex.yy.c syntax.tab.c syntax.tab.h syntax.output
diff --git a/Code/a.txt b/Code/a.txt
index 9fe96d246132b48f822bdd41249b3b6344b69b8b..fd963f490bcbe741f1b4a27eec18b514909225ec 100644
--- a/Code/a.txt
+++ b/Code/a.txt
@@ -1,39 +1,4 @@
-Program (1)
-  ExtDefList (1)
-    ExtDef (1)
-      Specifier (1)
-        TYPE: int
-      FunDec (1)
-        ID: inc
-        LP
-        RP
-      CompSt (2)
-        LC
-        DefList (3)
-          Def (3)
-            Specifier (3)
-              TYPE: int
-            DecList (3)
-              Dec (3)
-                VarDec (3)
-                  ID: i
-                ASSIGNOP
-                Exp (3)
-                  INT: 0123
-            SEMI
-          DefList (4)
-            Def (4)
-              Specifier (4)
-                TYPE: int
-              DecList (4)
-                Dec (4)
-                  VarDec (4)
-                    ID: j
-                  ASSIGNOP
-                  Exp (4)
-                    INT: 0x3F
-              SEMI
-        RC
+Syntax error:1
 
 
 
@@ -94,9 +59,6 @@ Program (1)
                   ID: image
                 ASSIGNOP
                 Exp (8)
-                  FLOAT: 3.5
+                  FLOAT: 3.500000
               SEMI
           RC
-
-
-
diff --git a/Code/data.c b/Code/data.c
index 118515f7fbe6cd9c3e3900b4ea1a5c02fc5aa7c3..e9caf1637cfd2b910e35fd0a2b546a2e37e2eb82 100644
--- a/Code/data.c
+++ b/Code/data.c
@@ -1,9 +1,10 @@
-#include "data.h"
 #include <malloc.h>
 #include <assert.h>
 #include <string.h>
-#include "debug.h"
 #include <stdarg.h>
+#include <stdlib.h>
+#include "data.h"
+#include "debug.h"
 
 static MultiwayTree_t * __MultiwayTree_init(MultiwayTree_t * t) {
     t->root = tree->Node_alloc("begin",0);
@@ -65,12 +66,13 @@ static void __MultiwayTree_Traverse(Node_t * cur,int deep) {
     }
     if(cur->lchild == NULL) {
         printf("%s",cur->content);
+        char ** s;
         if(strcmp(cur->content,"ID") == 0) {
             printf(": %s",cur->text);
         } else if(strcmp(cur->content,"INT") == 0) {
-            printf(": %s",cur->text);
+            printf(": %d",strtol(cur->text,s,0));
         } else if(strcmp(cur->content,"FLOAT") == 0) {
-            printf(": %s",cur->text);
+            printf(": %f",(float)atof(cur->text));
         } else if(strcmp(cur->content,"TYPE") == 0) {
             printf(": %s",cur->text);
         }
@@ -107,7 +109,6 @@ MultiwayTree_t * tree = &__Multiwaytree;
 
 Node_t * Operator(Node_t * cur,char * content,int line,int argc,...) {
     cur = tree->Node_alloc(content,line);
-    // Log("%s %d %d",content,line,argc);
     // printf("%d: parent:%p %s:%s--- child:",argc,cur,cur->content,cur->text);
     va_list ap;
     va_start(ap,argc);
@@ -115,7 +116,6 @@ Node_t * Operator(Node_t * cur,char * content,int line,int argc,...) {
         Node_t * temp = (Node_t*)va_arg(ap,Node_t*);
         if(temp == NULL) continue;
         // printf("%p %s:%s--- ",temp,temp->content,temp->text);
-        // Log("%s",temp->content);
         tree->rminsert(cur,temp);
     }
     va_end(ap);
@@ -124,7 +124,3 @@ Node_t * Operator(Node_t * cur,char * content,int line,int argc,...) {
 }
 
 
-static char * num_transform(char * s) {
-
-}
-
diff --git a/Code/debug.h b/Code/debug.h
index 98f1551a78f714478a30f04f4d83b48b044a8e01..77344d78b23d93a9281d6726e4e188b36779a1ca 100644
--- a/Code/debug.h
+++ b/Code/debug.h
@@ -1,21 +1,27 @@
 // #define DEBUG
 // #define SCANNER_DEBUG
+// #define FINAL
+
 
 #ifndef DEBUG_H
 #define DEBUG_H
 
 
-
 #ifdef SCANNER_DEBUG
     #define ELEMENT(_S_) {printf("TYPE =( %s ),content=( %s )\n",_S_,yytext);yylval.node = add_node_text(_S_,yytext,yyleng);}
 #else
-    #define ELEMENT(_S_) { yylval.node = add_node_text(_S_,yytext,yyleng);}
+    #define ELEMENT(_S_) { yylval.node = add_node_text(_S_,yytext,yyleng);strcat(linetext,yytext);}
 #endif
 
-
-#define _Log(...) fprintf(stderr,__VA_ARGS__);
-#define SyntaxError(format, ...) _Log("\33[1;31m row=%d col=%d, " format "\33[0m\n",yylloc.first_line,yycolumn, ## __VA_ARGS__)
-#define LexicalError(format, ...) _Log("\33[1;32m row=%d col=%d, " format "\33[0m\n",yylloc.first_line,yycolumn, ## __VA_ARGS__)
+#ifdef FINAL
+    #define _Log(...) fprintf(stderr,__VA_ARGS__);
+    #define SyntaxError(format, ...) _Log("Error type B at Line %d: Syntax error. \'%s\'\n", yylineno, yytext)
+    #define LexicalError(format, ...) _Log("Error type A at Line %d: Mysterious characters \'%s\'\n", yylineno, yytext)
+#else
+    #define _Log(...) fprintf(stderr,__VA_ARGS__);
+    #define SyntaxError(format, ...) _Log("\33[1;31m row=%d col=%d, " format "\33[0m\n",yylloc.first_line,yycolumn, ## __VA_ARGS__)
+    #define LexicalError(format, ...) _Log("\33[1;32m row=%d col=%d, " format "\33[0m\n",yylloc.first_line,yycolumn, ## __VA_ARGS__)
+#endif
 
 #define Log(format, ...) \
     _Log("\33[1;34m[%s,%d,%s] " format "\33[0m\n", \
@@ -23,4 +29,8 @@
 
 #define PRINT_TREE(A) tree->traverse(A,0);
 
+#ifdef FINAL
+
+#endif
+
 #endif
\ No newline at end of file
diff --git a/Code/lex.yy.c b/Code/lex.yy.c
index eb12b4a5bae757df03d89a1af9bb39cd786ebc50..caf81a3f5a643412dd0dc8dc39796f8e8bdbce6b 100644
--- a/Code/lex.yy.c
+++ b/Code/lex.yy.c
@@ -943,23 +943,23 @@ YY_RULE_SETUP
 case 27:
 YY_RULE_SETUP
 #line 66 "./lexical.l"
-{ ;}
+{ strcat(linetext," ");}
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 67 "./lexical.l"
-{ yycolumn += 3; }
+{ yycolumn += 3; strcat(linetext,"\t");}
 	YY_BREAK
 case 29:
 /* rule 29 can match eol */
 YY_RULE_SETUP
 #line 68 "./lexical.l"
-{ yycolumn = 1; yylineno += 1; }
+{ yycolumn = 1; yylineno += 1; linetext[0] = '\0'; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 69 "./lexical.l"
-{ LexicalError("Lexical Error: %s",yytext);     /*printf("Error type A at Line %d: Mysterious characters \'%s\'\n", yylineno, yytext);*/ }
+{ LexicalError("Lexical Error: %s",yytext); }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
@@ -1978,7 +1978,7 @@ extern int syntax;
 
 void yyerror(char* msg) {
     syntax++;
-    SyntaxError("%s : \n\t%s\n\t^", msg,yytext);
+    SyntaxError("%s : %s\n\t%s\n", msg,yytext,linetext);
 }
 
 static Node_t* add_node_text(char * content,char *text,int len) {
diff --git a/Code/lexical.l b/Code/lexical.l
index 097089f5ed60e80f06d4928463d4014dbe4ade48..b0f1fafb1800866d0ca20e95dbd721f4f28d04d5 100755
--- a/Code/lexical.l
+++ b/Code/lexical.l
@@ -63,10 +63,10 @@ WHILE	while
 {RB}	    { ELEMENT("RB"); return RB;}
 {LC}	    { ELEMENT("LC"); return LC;}
 {RC}	    { ELEMENT("RC"); return RC;}
-[ ]         { ;}
-[\t]        { yycolumn += 3; }
-[\n]        { yycolumn = 1; yylineno += 1; }
-.           { LexicalError("Lexical Error: %s",yytext);     /*printf("Error type A at Line %d: Mysterious characters \'%s\'\n", yylineno, yytext);*/ }
+[ ]         { strcat(linetext," ");}
+[\t]        { yycolumn += 3; strcat(linetext,"\t");}
+[\n]        { yycolumn = 1; yylineno += 1; linetext[0] = '\0'; }
+.           { LexicalError("Lexical Error: %s",yytext); }
 
 %%
 
@@ -74,7 +74,7 @@ extern int syntax;
 
 void yyerror(char* msg) {
     syntax++;
-    SyntaxError("%s : \n\t%s\n\t^", msg,yytext);
+    SyntaxError("%s : %s\n\t%s\n", msg,yytext,linetext);
 }
 
 static Node_t* add_node_text(char * content,char *text,int len) {
diff --git a/Code/main.c b/Code/main.c
index 7d8e708c000583b51e6e14bb2507e37618ca7979..5c493f2bd851c2e462bbe4d1b556b47693a67727 100755
--- a/Code/main.c
+++ b/Code/main.c
@@ -25,13 +25,15 @@ int main(int argc,char *argv[]) {
         }
         yyrestart(f);
         yyparse();
-        fclose(f);   
-        if(syntax == 0) {
-            tree->traverse(tree->root,0);
+        fclose(f);
+        if (syntax == 1) {
+            #ifndef FINAL
+                printf("Syntax error:%d\n",syntax);
+                printf("\n\n\n");
+            #endif
         } else {
-            printf("Syntax error:%d\n",syntax);
+            tree->traverse(tree->root,0);
         }
-        printf("\n\n\n");
     }
     return 0;
 }
diff --git a/Code/parser b/Code/parser
index 4b6e04050b707a9cdfdca404373a3d2976cde240..744cd3321bbe9debcc238ecefb365dafe3c93c1b 100755
Binary files a/Code/parser and b/Code/parser differ
diff --git a/Code/syntax.output b/Code/syntax.output
index 9b3f7b8e09a2eff06e517f385e50d93d96e962f4..dbcb518c2babb9f6b1dd98473db01cda8c48feef 100644
--- a/Code/syntax.output
+++ b/Code/syntax.output
@@ -79,24 +79,25 @@
    56    | ID
    57    | INT
    58    | FLOAT
+   59    | Exp PLUS error
 
-   59 Args: Exp COMMA Args
-   60     | Exp
-   61     | error Args
+   60 Args: Exp COMMA Args
+   61     | Exp
+   62     | error Args
 
 
 缁堢粨璇瘝锛岄檮鏈夊畠浠嚭鐜板鐨勮鍒�
 
     $end (0) 0
-    error <node> (256) 24 33 61
+    error <node> (256) 24 33 59 62
     INT <node> (258) 17 57
     FLOAT <node> (259) 58
     ID <node> (260) 13 15 16 18 19 52 53 55 56
     SEMI <node> (261) 4 5 27 29 33 36
-    COMMA <node> (262) 8 20 38 59
+    COMMA <node> (262) 8 20 38 60
     ASSIGNOP <node> (263) 40 41
     RELOP <node> (264) 44
-    PLUS <node> (265) 45
+    PLUS <node> (265) 45 59
     MINUS <node> (266) 46 50
     STAR <node> (267) 47
     DIV <node> (268) 48
@@ -181,11 +182,11 @@
         on left: 39 40
         on right: 37 38
     Exp <node> (51)
-        on left: 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
-        on right: 27 29 30 31 32 40 41 42 43 44 45 46 47 48 49 50 51 54 55 59 60
+        on left: 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
+        on right: 27 29 30 31 32 40 41 42 43 44 45 46 47 48 49 50 51 54 55 59 60 61
     Args <node> (52)
-        on left: 59 60 61
-        on right: 52 59 61
+        on left: 60 61 62
+        on right: 52 60 62
 
 
 鐘舵€� 0
@@ -795,6 +796,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     SEMI      鍋忕Щ锛屽苟杩涘叆鐘舵€� 75
     ASSIGNOP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 76
@@ -886,6 +888,7 @@
    50    | MINUS Exp 鈥�
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     MINUS  鍋忕Щ锛屽苟杩涘叆鐘舵€� 79
     DOT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 84
@@ -907,6 +910,7 @@
    51    | NOT Exp 鈥�
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     MINUS  鍋忕Щ锛屽苟杩涘叆鐘舵€� 79
     DOT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 84
@@ -928,6 +932,7 @@
    49    | LP Exp 鈥� RP
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     ASSIGNOP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 76
     RELOP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 77
@@ -955,6 +960,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     SEMI      鍋忕Щ锛屽苟杩涘叆鐘舵€� 93
     ASSIGNOP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 76
@@ -1050,7 +1056,9 @@
 鐘舵€� 78
 
    45 Exp: Exp PLUS 鈥� Exp
+   59    | Exp PLUS 鈥� error
 
+    error  鍋忕Щ锛屽苟杩涘叆鐘舵€� 98
     INT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 48
     FLOAT  鍋忕Щ锛屽苟杩涘叆鐘舵€� 49
     ID     鍋忕Щ锛屽苟杩涘叆鐘舵€� 50
@@ -1058,7 +1066,7 @@
     NOT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 52
     LP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 53
 
-    Exp  杞埌鐘舵€� 98
+    Exp  杞埌鐘舵€� 99
 
 
 鐘舵€� 79
@@ -1072,7 +1080,7 @@
     NOT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 52
     LP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 53
 
-    Exp  杞埌鐘舵€� 99
+    Exp  杞埌鐘舵€� 100
 
 
 鐘舵€� 80
@@ -1086,7 +1094,7 @@
     NOT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 52
     LP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 53
 
-    Exp  杞埌鐘舵€� 100
+    Exp  杞埌鐘舵€� 101
 
 
 鐘舵€� 81
@@ -1100,7 +1108,7 @@
     NOT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 52
     LP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 53
 
-    Exp  杞埌鐘舵€� 101
+    Exp  杞埌鐘舵€� 102
 
 
 鐘舵€� 82
@@ -1114,7 +1122,7 @@
     NOT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 52
     LP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 53
 
-    Exp  杞埌鐘舵€� 102
+    Exp  杞埌鐘舵€� 103
 
 
 鐘舵€� 83
@@ -1128,14 +1136,14 @@
     NOT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 52
     LP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 53
 
-    Exp  杞埌鐘舵€� 103
+    Exp  杞埌鐘舵€� 104
 
 
 鐘舵€� 84
 
    55 Exp: Exp DOT 鈥� ID
 
-    ID  鍋忕Щ锛屽苟杩涘叆鐘舵€� 104
+    ID  鍋忕Щ锛屽苟杩涘叆鐘舵€� 105
 
 
 鐘舵€� 85
@@ -1149,7 +1157,7 @@
     NOT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 52
     LP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 53
 
-    Exp  杞埌鐘舵€� 105
+    Exp  杞埌鐘舵€� 106
 
 
 鐘舵€� 86
@@ -1165,6 +1173,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     ASSIGNOP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 76
     RELOP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 77
@@ -1189,7 +1198,7 @@
 
 鐘舵€� 88
 
-   61 Args: error 鈥� Args
+   62 Args: error 鈥� Args
 
     error  鍋忕Щ锛屽苟杩涘叆鐘舵€� 88
     INT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 48
@@ -1200,7 +1209,7 @@
     LP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 53
 
     Exp   杞埌鐘舵€� 90
-    Args  杞埌鐘舵€� 106
+    Args  杞埌鐘舵€� 107
 
 
 鐘舵€� 89
@@ -1222,10 +1231,11 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
-   59 Args: Exp 鈥� COMMA Args
-   60     | Exp 鈥�
+   59    | Exp 鈥� PLUS error
+   60 Args: Exp 鈥� COMMA Args
+   61     | Exp 鈥�
 
-    COMMA     鍋忕Щ锛屽苟杩涘叆鐘舵€� 107
+    COMMA     鍋忕Щ锛屽苟杩涘叆鐘舵€� 108
     ASSIGNOP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 76
     RELOP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 77
     PLUS      鍋忕Щ锛屽苟杩涘叆鐘舵€� 78
@@ -1237,14 +1247,14 @@
     DOT       鍋忕Щ锛屽苟杩涘叆鐘舵€� 84
     LB        鍋忕Щ锛屽苟杩涘叆鐘舵€� 85
 
-    $default  浣跨敤瑙勫垯 60 浠ュ綊绾� (Args)
+    $default  浣跨敤瑙勫垯 61 浠ュ綊绾� (Args)
 
 
 鐘舵€� 91
 
    52 Exp: ID LP Args 鈥� RP
 
-    RP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 108
+    RP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 109
 
 
 鐘舵€� 92
@@ -1275,6 +1285,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     ASSIGNOP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 76
     RELOP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 77
@@ -1285,7 +1296,7 @@
     AND       鍋忕Щ锛屽苟杩涘叆鐘舵€� 82
     OR        鍋忕Щ锛屽苟杩涘叆鐘舵€� 83
     DOT       鍋忕Щ锛屽苟杩涘叆鐘舵€� 84
-    RP        鍋忕Щ锛屽苟杩涘叆鐘舵€� 109
+    RP        鍋忕Щ锛屽苟杩涘叆鐘舵€� 110
     LB        鍋忕Щ锛屽苟杩涘叆鐘舵€� 85
 
 
@@ -1302,6 +1313,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     ASSIGNOP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 76
     RELOP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 77
@@ -1312,7 +1324,7 @@
     AND       鍋忕Щ锛屽苟杩涘叆鐘舵€� 82
     OR        鍋忕Щ锛屽苟杩涘叆鐘舵€� 83
     DOT       鍋忕Щ锛屽苟杩涘叆鐘舵€� 84
-    RP        鍋忕Щ锛屽苟杩涘叆鐘舵€� 110
+    RP        鍋忕Щ锛屽苟杩涘叆鐘舵€� 111
     LB        鍋忕Щ锛屽苟杩涘叆鐘舵€� 85
 
 
@@ -1329,6 +1341,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     ASSIGNOP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 76
     RELOP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 77
@@ -1357,6 +1370,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     PLUS   鍋忕Щ锛屽苟杩涘叆鐘舵€� 78
     MINUS  鍋忕Щ锛屽苟杩涘叆鐘舵€� 79
@@ -1370,6 +1384,13 @@
 
 鐘舵€� 98
 
+   59 Exp: Exp PLUS error 鈥�
+
+    $default  浣跨敤瑙勫垯 59 浠ュ綊绾� (Exp)
+
+
+鐘舵€� 99
+
    41 Exp: Exp 鈥� ASSIGNOP Exp
    42    | Exp 鈥� AND Exp
    43    | Exp 鈥� OR Exp
@@ -1381,6 +1402,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     MINUS  鍋忕Щ锛屽苟杩涘叆鐘舵€� 79
     STAR   鍋忕Щ锛屽苟杩涘叆鐘舵€� 80
@@ -1391,7 +1413,7 @@
     $default  浣跨敤瑙勫垯 45 浠ュ綊绾� (Exp)
 
 
-鐘舵€� 99
+鐘舵€� 100
 
    41 Exp: Exp 鈥� ASSIGNOP Exp
    42    | Exp 鈥� AND Exp
@@ -1404,6 +1426,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     MINUS  鍋忕Щ锛屽苟杩涘叆鐘舵€� 79
     DOT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 84
@@ -1412,7 +1435,7 @@
     $default  浣跨敤瑙勫垯 46 浠ュ綊绾� (Exp)
 
 
-鐘舵€� 100
+鐘舵€� 101
 
    41 Exp: Exp 鈥� ASSIGNOP Exp
    42    | Exp 鈥� AND Exp
@@ -1425,6 +1448,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     MINUS  鍋忕Щ锛屽苟杩涘叆鐘舵€� 79
     DIV    鍋忕Щ锛屽苟杩涘叆鐘舵€� 81
@@ -1434,7 +1458,7 @@
     $default  浣跨敤瑙勫垯 47 浠ュ綊绾� (Exp)
 
 
-鐘舵€� 101
+鐘舵€� 102
 
    41 Exp: Exp 鈥� ASSIGNOP Exp
    42    | Exp 鈥� AND Exp
@@ -1447,6 +1471,7 @@
    48    | Exp DIV Exp 鈥�
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     MINUS  鍋忕Щ锛屽苟杩涘叆鐘舵€� 79
     DOT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 84
@@ -1455,7 +1480,7 @@
     $default  浣跨敤瑙勫垯 48 浠ュ綊绾� (Exp)
 
 
-鐘舵€� 102
+鐘舵€� 103
 
    41 Exp: Exp 鈥� ASSIGNOP Exp
    42    | Exp 鈥� AND Exp
@@ -1468,6 +1493,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     RELOP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 77
     PLUS   鍋忕Щ锛屽苟杩涘叆鐘舵€� 78
@@ -1480,7 +1506,7 @@
     $default  浣跨敤瑙勫垯 42 浠ュ綊绾� (Exp)
 
 
-鐘舵€� 103
+鐘舵€� 104
 
    41 Exp: Exp 鈥� ASSIGNOP Exp
    42    | Exp 鈥� AND Exp
@@ -1493,6 +1519,7 @@
    48    | Exp 鈥� DIV Exp
    54    | Exp 鈥� LB Exp RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     RELOP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 77
     PLUS   鍋忕Щ锛屽苟杩涘叆鐘舵€� 78
@@ -1506,14 +1533,14 @@
     $default  浣跨敤瑙勫垯 43 浠ュ綊绾� (Exp)
 
 
-鐘舵€� 104
+鐘舵€� 105
 
    55 Exp: Exp DOT ID 鈥�
 
     $default  浣跨敤瑙勫垯 55 浠ュ綊绾� (Exp)
 
 
-鐘舵€� 105
+鐘舵€� 106
 
    41 Exp: Exp 鈥� ASSIGNOP Exp
    42    | Exp 鈥� AND Exp
@@ -1526,6 +1553,7 @@
    54    | Exp 鈥� LB Exp RB
    54    | Exp LB Exp 鈥� RB
    55    | Exp 鈥� DOT ID
+   59    | Exp 鈥� PLUS error
 
     ASSIGNOP  鍋忕Щ锛屽苟杩涘叆鐘舵€� 76
     RELOP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 77
@@ -1537,19 +1565,19 @@
     OR        鍋忕Щ锛屽苟杩涘叆鐘舵€� 83
     DOT       鍋忕Щ锛屽苟杩涘叆鐘舵€� 84
     LB        鍋忕Щ锛屽苟杩涘叆鐘舵€� 85
-    RB        鍋忕Щ锛屽苟杩涘叆鐘舵€� 111
+    RB        鍋忕Щ锛屽苟杩涘叆鐘舵€� 112
 
 
-鐘舵€� 106
+鐘舵€� 107
 
-   61 Args: error Args 鈥�
+   62 Args: error Args 鈥�
 
-    $default  浣跨敤瑙勫垯 61 浠ュ綊绾� (Args)
+    $default  浣跨敤瑙勫垯 62 浠ュ綊绾� (Args)
 
 
-鐘舵€� 107
+鐘舵€� 108
 
-   59 Args: Exp COMMA 鈥� Args
+   60 Args: Exp COMMA 鈥� Args
 
     error  鍋忕Щ锛屽苟杩涘叆鐘舵€� 88
     INT    鍋忕Щ锛屽苟杩涘叆鐘舵€� 48
@@ -1560,17 +1588,17 @@
     LP     鍋忕Щ锛屽苟杩涘叆鐘舵€� 53
 
     Exp   杞埌鐘舵€� 90
-    Args  杞埌鐘舵€� 112
+    Args  杞埌鐘舵€� 113
 
 
-鐘舵€� 108
+鐘舵€� 109
 
    52 Exp: ID LP Args RP 鈥�
 
     $default  浣跨敤瑙勫垯 52 浠ュ綊绾� (Exp)
 
 
-鐘舵€� 109
+鐘舵€� 110
 
    30 Stmt: IF LP Exp RP 鈥� Stmt
    31     | IF LP Exp RP 鈥� Stmt ELSE Stmt
@@ -1588,11 +1616,11 @@
     WHILE   鍋忕Щ锛屽苟杩涘叆鐘舵€� 56
 
     CompSt  杞埌鐘舵€� 57
-    Stmt    杞埌鐘舵€� 113
+    Stmt    杞埌鐘舵€� 114
     Exp     杞埌鐘舵€� 60
 
 
-鐘舵€� 110
+鐘舵€� 111
 
    32 Stmt: WHILE LP Exp RP 鈥� Stmt
 
@@ -1609,42 +1637,42 @@
     WHILE   鍋忕Щ锛屽苟杩涘叆鐘舵€� 56
 
     CompSt  杞埌鐘舵€� 57
-    Stmt    杞埌鐘舵€� 114
+    Stmt    杞埌鐘舵€� 115
     Exp     杞埌鐘舵€� 60
 
 
-鐘舵€� 111
+鐘舵€� 112
 
    54 Exp: Exp LB Exp RB 鈥�
 
     $default  浣跨敤瑙勫垯 54 浠ュ綊绾� (Exp)
 
 
-鐘舵€� 112
+鐘舵€� 113
 
-   59 Args: Exp COMMA Args 鈥�
+   60 Args: Exp COMMA Args 鈥�
 
-    $default  浣跨敤瑙勫垯 59 浠ュ綊绾� (Args)
+    $default  浣跨敤瑙勫垯 60 浠ュ綊绾� (Args)
 
 
-鐘舵€� 113
+鐘舵€� 114
 
    30 Stmt: IF LP Exp RP Stmt 鈥�
    31     | IF LP Exp RP Stmt 鈥� ELSE Stmt
 
-    ELSE  鍋忕Щ锛屽苟杩涘叆鐘舵€� 115
+    ELSE  鍋忕Щ锛屽苟杩涘叆鐘舵€� 116
 
     $default  浣跨敤瑙勫垯 30 浠ュ綊绾� (Stmt)
 
 
-鐘舵€� 114
+鐘舵€� 115
 
    32 Stmt: WHILE LP Exp RP Stmt 鈥�
 
     $default  浣跨敤瑙勫垯 32 浠ュ綊绾� (Stmt)
 
 
-鐘舵€� 115
+鐘舵€� 116
 
    31 Stmt: IF LP Exp RP Stmt ELSE 鈥� Stmt
 
@@ -1661,11 +1689,11 @@
     WHILE   鍋忕Щ锛屽苟杩涘叆鐘舵€� 56
 
     CompSt  杞埌鐘舵€� 57
-    Stmt    杞埌鐘舵€� 116
+    Stmt    杞埌鐘舵€� 117
     Exp     杞埌鐘舵€� 60
 
 
-鐘舵€� 116
+鐘舵€� 117
 
    31 Stmt: IF LP Exp RP Stmt ELSE Stmt 鈥�
 
diff --git a/Code/syntax.tab.c b/Code/syntax.tab.c
index 0af65659399ff14fdfaeb2818494b5e2048cc792..da6e58f4893fd4ea2c3ce8feecd8db7430e16f15 100644
--- a/Code/syntax.tab.c
+++ b/Code/syntax.tab.c
@@ -70,12 +70,13 @@
 #line 3 "./syntax.y"
 
     int yycolumn = 1;
+    char linetext[128];
     #define YY_USER_ACTION \
                 yylloc.first_line = yylloc.last_line = yylineno; \
                 yylloc.first_column = yycolumn; \
                 yylloc.last_column = yycolumn + yyleng - 1; \
                 yycolumn += yyleng;
-#line 12 "./syntax.y"
+#line 13 "./syntax.y"
 
     #include <stdio.h>
     #include "lex.yy.c"
@@ -90,7 +91,7 @@
     extern int syntax;
                 
 
-#line 94 "./syntax.tab.c"
+#line 95 "./syntax.tab.c"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -501,16 +502,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  11
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   264
+#define YYLAST   270
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  31
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  22
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  62
+#define YYNRULES  63
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  117
+#define YYNSTATES  118
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   285
@@ -562,13 +563,13 @@ static const yytype_int8 yytranslate[] =
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint8 yyrline[] =
 {
-       0,   107,   107,   109,   110,   112,   113,   114,   116,   117,
-     122,   123,   125,   126,   128,   129,   131,   135,   136,   138,
-     139,   141,   142,   144,   149,   150,   152,   153,   155,   156,
-     157,   158,   159,   160,   161,   166,   167,   169,   171,   172,
-     174,   175,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     199,   200,   201
+       0,   108,   108,   110,   111,   113,   114,   115,   117,   118,
+     123,   124,   126,   127,   129,   130,   132,   136,   137,   139,
+     140,   142,   143,   145,   150,   151,   153,   154,   156,   157,
+     158,   159,   160,   161,   162,   167,   168,   170,   172,   173,
+     175,   176,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   201,   202,   203
 };
 #endif
 
@@ -601,7 +602,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 }
 #endif
 
-#define YYPACT_NINF (-84)
+#define YYPACT_NINF (-67)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -615,18 +616,18 @@ yysymbol_name (yysymbol_kind_t yysymbol)
    STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-      51,   -84,     9,    17,   -84,    51,    93,   -84,    -5,    34,
-     -84,   -84,   -84,    55,   -84,    74,     1,    12,    51,    57,
-     -84,    78,    98,    80,    51,   -84,    78,    81,    51,   -84,
-      78,    82,   100,   -84,   -84,    99,   -84,    35,    -2,   116,
-     128,   -84,   -84,   102,   -84,    51,   -84,    27,   -84,   -84,
-     117,    92,    92,    92,    92,   119,   131,   -84,   113,    35,
-     104,    92,   -84,    78,   -84,   -84,    67,    39,    39,   162,
-     118,    92,    92,   -84,   -84,   -84,    92,    92,    92,    92,
-      92,    92,    92,    92,   146,    92,   204,   -84,    89,   -84,
-     133,   132,   -84,   -84,   176,   190,   204,   237,   243,    39,
-      32,    39,   230,   217,   -84,   147,   -84,    89,   -84,    62,
-      62,   -84,   -84,   125,   -84,    62,   -84
+      51,   -67,     9,    18,   -67,    51,    11,   -67,    10,    60,
+     -67,   -67,   -67,    22,   -67,    49,    -2,    12,    51,    57,
+     -67,    69,    77,    72,    51,   -67,    69,    80,    51,   -67,
+      69,    87,   103,   -67,   -67,    90,   -67,    35,    39,   108,
+     120,   -67,   -67,   107,   -67,    51,   -67,     0,   -67,   -67,
+     122,    98,    98,    98,    98,   123,   125,   -67,   105,    35,
+     110,    98,   -67,    69,   -67,   -67,    67,   247,   247,   168,
+     124,    98,    98,   -67,   -67,   -67,    98,    98,    89,    98,
+      98,    98,    98,    98,   138,    98,   210,   -67,    94,   -67,
+     139,   136,   -67,   -67,   182,   196,   210,   243,   -67,   249,
+     247,    32,   247,   236,   223,   -67,   153,   -67,    94,   -67,
+      62,    62,   -67,   -67,   129,   -67,    62,   -67
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -643,17 +644,17 @@ static const yytype_int8 yydefact[] =
        0,     0,    37,     0,    21,    34,     0,    51,    52,     0,
        0,     0,     0,    24,    26,    28,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    41,    39,     0,    54,
-      61,     0,    50,    30,     0,     0,    42,    45,    46,    47,
-      48,    49,    43,    44,    56,     0,    62,     0,    53,     0,
-       0,    55,    60,    31,    33,     0,    32
+      62,     0,    50,    30,     0,     0,    42,    45,    60,    46,
+      47,    48,    49,    43,    44,    56,     0,    63,     0,    53,
+       0,     0,    55,    61,    31,    33,     0,    32
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-     -84,   -84,   159,   -84,   144,     4,   -84,   -84,   -84,   -19,
-     -84,   121,   -84,   150,   120,   -68,   -12,   -84,   130,   -84,
-     -51,   -83
+     -67,   -67,   154,   -67,   137,     4,   -67,   -67,   -67,   -19,
+     -67,   126,   -67,   155,   111,   -60,   -16,   -67,   150,   -67,
+     -51,   -66
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -669,64 +670,66 @@ static const yytype_int8 yydefgoto[] =
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int8 yytable[] =
 {
-      67,    68,    69,    70,     6,   106,    61,    38,    21,     6,
-      86,    43,    37,    23,     8,    90,    42,    11,   -14,    22,
-      94,    95,    22,    30,   112,    96,    97,    98,    99,   100,
-     101,   102,   103,    65,   105,    24,    47,    90,    48,    49,
-      50,   113,   114,    79,    38,    81,    51,   116,    84,    30,
-      79,    36,    52,    85,    53,    84,    90,    18,    24,   -27,
-      85,    54,    55,    47,    56,    48,    49,    50,    88,     1,
-      48,    49,    50,    51,    19,     1,     2,    29,    51,    52,
-      20,    53,     2,    33,    52,    24,    53,    89,    54,    55,
-      88,    56,    48,    49,    50,    48,    49,    50,    13,    14,
-      51,    35,    44,    51,    36,    41,    52,    45,    53,    52,
-      75,    53,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    46,    62,    22,    93,    85,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    63,    66,    73,    71,    85,
-     107,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      72,   104,   108,   115,    85,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    12,    34,    64,    25,    85,   111,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    74,
-       0,     0,    92,    85,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    87,     0,     0,   109,    85,    76,    77,
+      67,    68,    69,    70,     6,    21,    65,    38,    37,     6,
+      86,    43,    42,    23,     8,    90,    13,    14,    11,    22,
+      94,    95,   107,    30,    36,    96,    97,    99,   100,   101,
+     102,   103,   104,   -14,   106,    24,    47,    90,    48,    49,
+      50,    19,   113,    79,    38,    81,    51,    61,    84,    30,
+     114,   115,    52,    85,    53,    20,   117,    90,    24,   -27,
+      22,    54,    55,    47,    56,    48,    49,    50,    88,     1,
+      48,    49,    50,    51,    33,     1,     2,    29,    51,    52,
+      35,    53,     2,    18,    52,    24,    53,    89,    54,    55,
+      98,    56,    48,    49,    50,    88,    36,    48,    49,    50,
+      51,    48,    49,    50,    41,    51,    52,    44,    53,    51,
+      45,    52,    46,    53,    62,    52,    75,    53,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    63,    22,    73,
+      93,    85,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    66,    71,   105,    72,    85,   108,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,   109,   116,    34,    12,
+      85,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      74,    64,    25,     0,    85,   112,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,     0,     0,     0,    92,    85,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,     0,
+       0,     0,   110,    85,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    87,     0,     0,   111,    85,    76,    77,
       78,    79,    80,    81,    82,    83,    84,     0,     0,     0,
-     110,    85,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,     0,     0,     0,     0,    85,    77,    78,    79,    80,
-      81,    82,     0,    84,     0,     0,     0,     0,    85,    77,
-      78,    79,    80,    81,     0,     0,    84,    78,    79,    80,
-      81,    85,     0,    84,    79,    80,    81,     0,    85,    84,
-       0,     0,     0,     0,    85
+       0,    85,    77,    78,    79,    80,    81,    82,     0,    84,
+       0,     0,     0,     0,    85,    77,    78,    79,    80,    81,
+       0,     0,    84,    78,    79,    80,    81,    85,    79,    84,
+      79,    80,    81,    84,    85,    84,     0,     0,    85,     0,
+      85
 };
 
 static const yytype_int8 yycheck[] =
 {
-      51,    52,    53,    54,     0,    88,     8,    26,     7,     5,
-      61,    30,    24,     1,     5,    66,    28,     0,    23,    21,
-      71,    72,    21,    19,   107,    76,    77,    78,    79,    80,
-      81,    82,    83,     6,    85,    23,     1,    88,     3,     4,
-       5,   109,   110,    11,    63,    13,    11,   115,    16,    45,
-      11,    24,    17,    21,    19,    16,   107,    23,    23,    24,
+      51,    52,    53,    54,     0,     7,     6,    26,    24,     5,
+      61,    30,    28,     1,     5,    66,     5,     6,     0,    21,
+      71,    72,    88,    19,    24,    76,    77,    78,    79,    80,
+      81,    82,    83,    23,    85,    23,     1,    88,     3,     4,
+       5,    19,   108,    11,    63,    13,    11,     8,    16,    45,
+     110,   111,    17,    21,    19,     6,   116,   108,    23,    24,
       21,    26,    27,     1,    29,     3,     4,     5,     1,    18,
-       3,     4,     5,    11,    19,    18,    25,    20,    11,    17,
-       6,    19,    25,     5,    17,    23,    19,    20,    26,    27,
-       1,    29,     3,     4,     5,     3,     4,     5,     5,     6,
-      11,     3,    20,    11,    24,    24,    17,     7,    19,    17,
-       6,    19,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    22,     6,    21,     6,    21,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,     7,    19,    24,    19,    21,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      19,     5,    20,    28,    21,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,     5,    21,    45,    17,    21,    22,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    59,
+       3,     4,     5,    11,     5,    18,    25,    20,    11,    17,
+       3,    19,    25,    23,    17,    23,    19,    20,    26,    27,
+       1,    29,     3,     4,     5,     1,    24,     3,     4,     5,
+      11,     3,     4,     5,    24,    11,    17,    20,    19,    11,
+       7,    17,    22,    19,     6,    17,     6,    19,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,     7,    21,    24,
+       6,    21,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    19,    19,     5,    19,    21,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    20,    28,    21,     5,
+      21,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      59,    45,    17,    -1,    21,    22,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    -1,    -1,    -1,    20,    21,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
       -1,    -1,    20,    21,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    63,    -1,    -1,    20,    21,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    -1,    -1,    -1,
-      20,    21,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    -1,    -1,    -1,    21,     9,    10,    11,    12,
-      13,    14,    -1,    16,    -1,    -1,    -1,    -1,    21,     9,
-      10,    11,    12,    13,    -1,    -1,    16,    10,    11,    12,
-      13,    21,    -1,    16,    11,    12,    13,    -1,    21,    16,
-      -1,    -1,    -1,    -1,    21
+      -1,    21,     9,    10,    11,    12,    13,    14,    -1,    16,
+      -1,    -1,    -1,    -1,    21,     9,    10,    11,    12,    13,
+      -1,    -1,    16,    10,    11,    12,    13,    21,    11,    16,
+      11,    12,    13,    16,    21,    16,    -1,    -1,    21,    -1,
+      21
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
@@ -742,9 +745,9 @@ static const yytype_int8 yystos[] =
       51,     8,     6,     7,    42,     6,    19,    51,    51,    51,
       51,    19,    19,    24,    45,     6,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    21,    51,    49,     1,    20,
-      51,    52,    20,     6,    51,    51,    51,    51,    51,    51,
-      51,    51,    51,    51,     5,    51,    52,     7,    20,    20,
-      20,    22,    52,    46,    46,    28,    46
+      51,    52,    20,     6,    51,    51,    51,    51,     1,    51,
+      51,    51,    51,    51,    51,     5,    51,    52,     7,    20,
+      20,    20,    22,    52,    46,    46,    28,    46
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
@@ -756,7 +759,7 @@ static const yytype_int8 yyr1[] =
       46,    46,    46,    46,    46,    47,    47,    48,    49,    49,
       50,    50,    51,    51,    51,    51,    51,    51,    51,    51,
       51,    51,    51,    51,    51,    51,    51,    51,    51,    51,
-      52,    52,    52
+      51,    52,    52,    52
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -768,7 +771,7 @@ static const yytype_int8 yyr2[] =
        3,     5,     7,     5,     2,     2,     0,     3,     1,     3,
        1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
        3,     2,     2,     4,     3,     4,     3,     1,     1,     1,
-       3,     1,     2
+       3,     3,     1,     2
 };
 
 
@@ -1345,373 +1348,379 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* Program: ExtDefList  */
-#line 107 "./syntax.y"
+#line 108 "./syntax.y"
                                     { tree->root = (yyval.node) = Operator((yyval.node),"Program",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1351 "./syntax.tab.c"
+#line 1354 "./syntax.tab.c"
     break;
 
   case 3: /* ExtDefList: ExtDef ExtDefList  */
-#line 109 "./syntax.y"
+#line 110 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"ExtDefList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1357 "./syntax.tab.c"
+#line 1360 "./syntax.tab.c"
     break;
 
   case 4: /* ExtDefList: %empty  */
-#line 110 "./syntax.y"
+#line 111 "./syntax.y"
                                     { (yyval.node) = NULL; }
-#line 1363 "./syntax.tab.c"
+#line 1366 "./syntax.tab.c"
     break;
 
   case 5: /* ExtDef: Specifier ExtDecList SEMI  */
-#line 112 "./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 1369 "./syntax.tab.c"
+#line 1372 "./syntax.tab.c"
     break;
 
   case 6: /* ExtDef: Specifier SEMI  */
-#line 113 "./syntax.y"
+#line 114 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1375 "./syntax.tab.c"
+#line 1378 "./syntax.tab.c"
     break;
 
   case 7: /* ExtDef: Specifier FunDec CompSt  */
-#line 114 "./syntax.y"
+#line 115 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"ExtDef",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1381 "./syntax.tab.c"
+#line 1384 "./syntax.tab.c"
     break;
 
   case 8: /* ExtDecList: VarDec  */
-#line 116 "./syntax.y"
+#line 117 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"ExtDecList",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1387 "./syntax.tab.c"
+#line 1390 "./syntax.tab.c"
     break;
 
   case 9: /* ExtDecList: VarDec COMMA ExtDecList  */
-#line 117 "./syntax.y"
+#line 118 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"ExtDecList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1393 "./syntax.tab.c"
+#line 1396 "./syntax.tab.c"
     break;
 
   case 10: /* Specifier: TYPE  */
-#line 122 "./syntax.y"
+#line 123 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Specifier",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1399 "./syntax.tab.c"
+#line 1402 "./syntax.tab.c"
     break;
 
   case 11: /* Specifier: StructSpecifier  */
-#line 123 "./syntax.y"
+#line 124 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Specifier",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1405 "./syntax.tab.c"
+#line 1408 "./syntax.tab.c"
     break;
 
   case 12: /* StructSpecifier: STRUCT OptTag LC DefList RC  */
-#line 125 "./syntax.y"
+#line 126 "./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 1411 "./syntax.tab.c"
+#line 1414 "./syntax.tab.c"
     break;
 
   case 13: /* StructSpecifier: STRUCT Tag  */
-#line 126 "./syntax.y"
+#line 127 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"StructSpecifier",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1417 "./syntax.tab.c"
+#line 1420 "./syntax.tab.c"
     break;
 
   case 14: /* OptTag: ID  */
-#line 128 "./syntax.y"
+#line 129 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"OptTag",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1423 "./syntax.tab.c"
+#line 1426 "./syntax.tab.c"
     break;
 
   case 15: /* OptTag: %empty  */
-#line 129 "./syntax.y"
+#line 130 "./syntax.y"
                                     { (yyval.node) = NULL; }
-#line 1429 "./syntax.tab.c"
+#line 1432 "./syntax.tab.c"
     break;
 
   case 16: /* Tag: ID  */
-#line 131 "./syntax.y"
+#line 132 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Tag",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1435 "./syntax.tab.c"
+#line 1438 "./syntax.tab.c"
     break;
 
   case 17: /* VarDec: ID  */
-#line 135 "./syntax.y"
+#line 136 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"VarDec",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1441 "./syntax.tab.c"
+#line 1444 "./syntax.tab.c"
     break;
 
   case 18: /* VarDec: VarDec LB INT RB  */
-#line 136 "./syntax.y"
+#line 137 "./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 1447 "./syntax.tab.c"
+#line 1450 "./syntax.tab.c"
     break;
 
   case 19: /* FunDec: ID LP VarList RP  */
-#line 138 "./syntax.y"
+#line 139 "./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 1453 "./syntax.tab.c"
+#line 1456 "./syntax.tab.c"
     break;
 
   case 20: /* FunDec: ID LP RP  */
-#line 139 "./syntax.y"
+#line 140 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"FunDec",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1459 "./syntax.tab.c"
+#line 1462 "./syntax.tab.c"
     break;
 
   case 21: /* VarList: ParamDec COMMA VarList  */
-#line 141 "./syntax.y"
+#line 142 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"VarList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1465 "./syntax.tab.c"
+#line 1468 "./syntax.tab.c"
     break;
 
   case 22: /* VarList: ParamDec  */
-#line 142 "./syntax.y"
+#line 143 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"ParamDec",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1471 "./syntax.tab.c"
+#line 1474 "./syntax.tab.c"
     break;
 
   case 23: /* ParamDec: Specifier VarDec  */
-#line 144 "./syntax.y"
+#line 145 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"ParamDec",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1477 "./syntax.tab.c"
+#line 1480 "./syntax.tab.c"
     break;
 
   case 24: /* CompSt: LC DefList StmtList RC  */
-#line 149 "./syntax.y"
+#line 150 "./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 1483 "./syntax.tab.c"
+#line 1486 "./syntax.tab.c"
     break;
 
   case 25: /* CompSt: error RC  */
-#line 150 "./syntax.y"
+#line 151 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"CompSt",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node));/* error */ }
-#line 1489 "./syntax.tab.c"
+#line 1492 "./syntax.tab.c"
     break;
 
   case 26: /* StmtList: Stmt StmtList  */
-#line 152 "./syntax.y"
+#line 153 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"StmtList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1495 "./syntax.tab.c"
+#line 1498 "./syntax.tab.c"
     break;
 
   case 27: /* StmtList: %empty  */
-#line 153 "./syntax.y"
+#line 154 "./syntax.y"
                                     { (yyval.node) = NULL; }
-#line 1501 "./syntax.tab.c"
+#line 1504 "./syntax.tab.c"
     break;
 
   case 28: /* Stmt: Exp SEMI  */
-#line 155 "./syntax.y"
+#line 156 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1507 "./syntax.tab.c"
+#line 1510 "./syntax.tab.c"
     break;
 
   case 29: /* Stmt: CompSt  */
-#line 156 "./syntax.y"
+#line 157 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1513 "./syntax.tab.c"
+#line 1516 "./syntax.tab.c"
     break;
 
   case 30: /* Stmt: RETURN Exp SEMI  */
-#line 157 "./syntax.y"
+#line 158 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1519 "./syntax.tab.c"
+#line 1522 "./syntax.tab.c"
     break;
 
   case 31: /* Stmt: IF LP Exp RP Stmt  */
-#line 158 "./syntax.y"
+#line 159 "./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 1525 "./syntax.tab.c"
+#line 1528 "./syntax.tab.c"
     break;
 
   case 32: /* Stmt: IF LP Exp RP Stmt ELSE Stmt  */
-#line 159 "./syntax.y"
+#line 160 "./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 1531 "./syntax.tab.c"
+#line 1534 "./syntax.tab.c"
     break;
 
   case 33: /* Stmt: WHILE LP Exp RP Stmt  */
-#line 160 "./syntax.y"
+#line 161 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,5,(yyvsp[-4].node),(yyvsp[-3].node),(yyvsp[-2].node),(yyvsp[-2].node),(yyvsp[-1].node)); }
-#line 1537 "./syntax.tab.c"
+#line 1540 "./syntax.tab.c"
     break;
 
   case 34: /* Stmt: error SEMI  */
-#line 161 "./syntax.y"
+#line 162 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Stmt",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node));/* error */ }
-#line 1543 "./syntax.tab.c"
+#line 1546 "./syntax.tab.c"
     break;
 
   case 35: /* DefList: Def DefList  */
-#line 166 "./syntax.y"
+#line 167 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"DefList",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1549 "./syntax.tab.c"
+#line 1552 "./syntax.tab.c"
     break;
 
   case 36: /* DefList: %empty  */
-#line 167 "./syntax.y"
+#line 168 "./syntax.y"
                                     { (yyval.node) = NULL; }
-#line 1555 "./syntax.tab.c"
+#line 1558 "./syntax.tab.c"
     break;
 
   case 37: /* Def: Specifier DecList SEMI  */
-#line 169 "./syntax.y"
+#line 170 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Def",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1561 "./syntax.tab.c"
+#line 1564 "./syntax.tab.c"
     break;
 
   case 38: /* DecList: Dec  */
-#line 171 "./syntax.y"
+#line 172 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"DecList",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1567 "./syntax.tab.c"
+#line 1570 "./syntax.tab.c"
     break;
 
   case 39: /* DecList: Dec COMMA DecList  */
-#line 172 "./syntax.y"
+#line 173 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"DecList",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1573 "./syntax.tab.c"
+#line 1576 "./syntax.tab.c"
     break;
 
   case 40: /* Dec: VarDec  */
-#line 174 "./syntax.y"
+#line 175 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Dec",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1579 "./syntax.tab.c"
+#line 1582 "./syntax.tab.c"
     break;
 
   case 41: /* Dec: VarDec ASSIGNOP Exp  */
-#line 175 "./syntax.y"
+#line 176 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Dec",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1585 "./syntax.tab.c"
+#line 1588 "./syntax.tab.c"
     break;
 
   case 42: /* Exp: Exp ASSIGNOP Exp  */
-#line 180 "./syntax.y"
+#line 181 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1591 "./syntax.tab.c"
+#line 1594 "./syntax.tab.c"
     break;
 
   case 43: /* Exp: Exp AND Exp  */
-#line 181 "./syntax.y"
+#line 182 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1597 "./syntax.tab.c"
+#line 1600 "./syntax.tab.c"
     break;
 
   case 44: /* Exp: Exp OR Exp  */
-#line 182 "./syntax.y"
+#line 183 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1603 "./syntax.tab.c"
+#line 1606 "./syntax.tab.c"
     break;
 
   case 45: /* Exp: Exp RELOP Exp  */
-#line 183 "./syntax.y"
+#line 184 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1609 "./syntax.tab.c"
+#line 1612 "./syntax.tab.c"
     break;
 
   case 46: /* Exp: Exp PLUS Exp  */
-#line 184 "./syntax.y"
+#line 185 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1615 "./syntax.tab.c"
+#line 1618 "./syntax.tab.c"
     break;
 
   case 47: /* Exp: Exp MINUS Exp  */
-#line 185 "./syntax.y"
+#line 186 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1621 "./syntax.tab.c"
+#line 1624 "./syntax.tab.c"
     break;
 
   case 48: /* Exp: Exp STAR Exp  */
-#line 186 "./syntax.y"
+#line 187 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1627 "./syntax.tab.c"
+#line 1630 "./syntax.tab.c"
     break;
 
   case 49: /* Exp: Exp DIV Exp  */
-#line 187 "./syntax.y"
+#line 188 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1633 "./syntax.tab.c"
+#line 1636 "./syntax.tab.c"
     break;
 
   case 50: /* Exp: LP Exp RP  */
-#line 188 "./syntax.y"
+#line 189 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1639 "./syntax.tab.c"
+#line 1642 "./syntax.tab.c"
     break;
 
   case 51: /* Exp: MINUS Exp  */
-#line 189 "./syntax.y"
+#line 190 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1645 "./syntax.tab.c"
+#line 1648 "./syntax.tab.c"
     break;
 
   case 52: /* Exp: NOT Exp  */
-#line 190 "./syntax.y"
+#line 191 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1651 "./syntax.tab.c"
+#line 1654 "./syntax.tab.c"
     break;
 
   case 53: /* Exp: ID LP Args RP  */
-#line 191 "./syntax.y"
+#line 192 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,4,(yyvsp[-3].node),(yyvsp[-3].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1657 "./syntax.tab.c"
+#line 1660 "./syntax.tab.c"
     break;
 
   case 54: /* Exp: ID LP RP  */
-#line 192 "./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 1663 "./syntax.tab.c"
+#line 1666 "./syntax.tab.c"
     break;
 
   case 55: /* Exp: Exp LB Exp RB  */
-#line 193 "./syntax.y"
+#line 194 "./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 1669 "./syntax.tab.c"
+#line 1672 "./syntax.tab.c"
     break;
 
   case 56: /* Exp: Exp DOT ID  */
-#line 194 "./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 1675 "./syntax.tab.c"
+#line 1678 "./syntax.tab.c"
     break;
 
   case 57: /* Exp: ID  */
-#line 195 "./syntax.y"
+#line 196 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1681 "./syntax.tab.c"
+#line 1684 "./syntax.tab.c"
     break;
 
   case 58: /* Exp: INT  */
-#line 196 "./syntax.y"
+#line 197 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1687 "./syntax.tab.c"
+#line 1690 "./syntax.tab.c"
     break;
 
   case 59: /* Exp: FLOAT  */
-#line 197 "./syntax.y"
+#line 198 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Exp",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1693 "./syntax.tab.c"
+#line 1696 "./syntax.tab.c"
     break;
 
-  case 60: /* Args: Exp COMMA Args  */
+  case 60: /* Exp: Exp PLUS error  */
 #line 199 "./syntax.y"
+                                    { (yyval.node) = NULL; }
+#line 1702 "./syntax.tab.c"
+    break;
+
+  case 61: /* Args: Exp COMMA Args  */
+#line 201 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Args",(yyloc).first_line,3,(yyvsp[-2].node),(yyvsp[-1].node),(yyvsp[0].node)); }
-#line 1699 "./syntax.tab.c"
+#line 1708 "./syntax.tab.c"
     break;
 
-  case 61: /* Args: Exp  */
-#line 200 "./syntax.y"
+  case 62: /* Args: Exp  */
+#line 202 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Args",(yyloc).first_line,1,(yyvsp[0].node)); }
-#line 1705 "./syntax.tab.c"
+#line 1714 "./syntax.tab.c"
     break;
 
-  case 62: /* Args: error Args  */
-#line 201 "./syntax.y"
+  case 63: /* Args: error Args  */
+#line 203 "./syntax.y"
                                     { (yyval.node) = Operator((yyval.node),"Args",(yyloc).first_line,2,(yyvsp[-1].node),(yyvsp[0].node));/* error */ }
-#line 1711 "./syntax.tab.c"
+#line 1720 "./syntax.tab.c"
     break;
 
 
-#line 1715 "./syntax.tab.c"
+#line 1724 "./syntax.tab.c"
 
       default: break;
     }
@@ -1909,6 +1918,6 @@ yyreturnlab:
   return yyresult;
 }
 
-#line 204 "./syntax.y"
+#line 206 "./syntax.y"
 
 
diff --git a/Code/syntax.tab.h b/Code/syntax.tab.h
index a6f5959fb9f4c49dd7ba3a4ceda8f0a88b2ccdde..b5aacb8c507371b3dc8a8ce2d0a3b2b63984ad05 100644
--- a/Code/syntax.tab.h
+++ b/Code/syntax.tab.h
@@ -90,7 +90,7 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 28 "./syntax.y"
+#line 29 "./syntax.y"
 
     struct __Tree_node_t * node;
 
diff --git a/Code/syntax.y b/Code/syntax.y
index 14bafc8c99790f93326007228c9440b34cbf8ea9..325c18e6cf45d4c017bfd273bc89903c8e4297c3 100755
--- a/Code/syntax.y
+++ b/Code/syntax.y
@@ -2,6 +2,7 @@
 
 %{
     int yycolumn = 1;
+    char linetext[128];
     #define YY_USER_ACTION \
                 yylloc.first_line = yylloc.last_line = yylineno; \
                 yylloc.first_column = yycolumn; \
@@ -195,6 +196,7 @@ Exp : Exp ASSIGNOP Exp              { $$ = Operator($$,"Exp",@$.first_line,3,$1,
     | ID                            { $$ = Operator($$,"Exp",@$.first_line,1,$1); }
     | INT                           { $$ = Operator($$,"Exp",@$.first_line,1,$1); }
     | FLOAT                         { $$ = Operator($$,"Exp",@$.first_line,1,$1); }
+    | Exp PLUS error                { $$ = NULL; }
     ;
 Args : Exp COMMA Args               { $$ = Operator($$,"Args",@$.first_line,3,$1,$2,$3); }
     | Exp                           { $$ = Operator($$,"Args",@$.first_line,1,$1); }
diff --git a/Test/test1.cmm b/Test/test1.cmm
index 02fa459ce2a681612c87a125a6fb3770e626636b..aee0c73dcd8037da16773d66a1b4c304184fa3c3 100644
--- a/Test/test1.cmm
+++ b/Test/test1.cmm
@@ -1,5 +1,5 @@
 int inc()
 {
 	int i = 0123;
-	int j = 0x3F;
+	int j = 0x3F -=;
 }
diff --git a/task.md b/task.md
index 7cc4f07b6434ae6f1a771d00a1373fc7f167e9f8..613a37d10393325dcfc2b6d590485e72c2f4a379 100644
--- a/task.md
+++ b/task.md
@@ -9,3 +9,7 @@ CompSt -> error RC
 Exp -> error RP | error RB  | error OPs(+-*/ && || RELOP)
 
 Args -> error COMMA
+
+杩橀渶瑕佸仛锛�
+
+閿欒鎭㈠锛屾敞閲�