Jelajahi Sumber

paser和代码初步对接成功

SongZihuan 5 tahun lalu
induk
melakukan
32683ddcee
6 mengubah file dengan 80 tambahan dan 475 penghapusan
  1. 2 331
      debug.log
  2. TEMPAT SAMPAH
      gwarf
  3. 3 3
      gwarf.c
  4. 59 39
      paser/syntax.c
  5. 8 5
      paser/token.h
  6. 8 97
      status.log

+ 2 - 331
debug.log

@@ -1,211 +1,5 @@
 [info][lexical]  set_start
 
-[info][lexical]  p = '('
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -1
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -3
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[debug][lexical]  continue to paser
-
-[info][lexical]  p = '2'
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -1
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -2
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[info][lexical]  back_p
-
-[info][lexical]  get value = '(' len = 1 from 8
-
-[debug]token type = 8
-
-[info][lexical]  set_start
-
-[info][lexical]  p = '2'
-
-[debug][lexical]  check list : paser_list[0]->status = 1
-[debug][lexical]  check list : paser_list[1]->status = 1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -1
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 0
-[debug][lexical]  check list : not_count = 8
-[debug][lexical]  check list : count all = 10
-
-[debug][lexical]  continue to paser
-
-[info][lexical]  p = ' '
-
-[debug][lexical]  check list : paser_list[0]->status = -2
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -1
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[info][lexical]  back_p
-
-[info][lexical]  get value = '2' len = 1 from 0
-
-[debug]token type = 0
-
-[info][lexical]  set_start
-
-[info][lexical]  p = ' '
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -3
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[debug][lexical]  continue to paser
-
-[info][lexical]  p = '+'
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -2
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[info][lexical]  back_p
-
-[info][lexical]  get value = ' ' len = 1 from 3
-
-[info][lexical]  set_start
-
-[info][lexical]  p = '+'
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -1
-[debug][lexical]  check list : paser_list[4]->status = -3
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[debug][lexical]  continue to paser
-
-[info][lexical]  p = ' '
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -1
-[debug][lexical]  check list : paser_list[4]->status = -2
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[info][lexical]  back_p
-
-[info][lexical]  get value = '+' len = 1 from 4
-
-[debug]token type = 4
-
-[info][lexical]  set_start
-
-[info][lexical]  p = ' '
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -3
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[debug][lexical]  continue to paser
-
-[info][lexical]  p = '2'
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -2
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[info][lexical]  back_p
-
-[info][lexical]  get value = ' ' len = 1 from 3
-
-[info][lexical]  set_start
-
 [info][lexical]  p = '2'
 
 [debug][lexical]  check list : paser_list[0]->status = 1
@@ -224,7 +18,7 @@
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = ')'
+[info][lexical]  p = '*'
 
 [debug][lexical]  check list : paser_list[0]->status = -2
 [debug][lexical]  check list : paser_list[1]->status = -1
@@ -248,89 +42,6 @@
 
 [info][lexical]  set_start
 
-[info][lexical]  p = ')'
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -1
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -3
-[debug][lexical]  check list : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[debug][lexical]  continue to paser
-
-[info][lexical]  p = ' '
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -1
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -2
-[debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[info][lexical]  back_p
-
-[info][lexical]  get value = ')' len = 1 from 9
-
-[debug]token type = 9
-
-[info][grammar]  (polynomial)out
-[info][lexical]  set_start
-
-[info][lexical]  p = ' '
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -3
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[debug][lexical]  continue to paser
-
-[info][lexical]  p = '*'
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -2
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[info][lexical]  back_p
-
-[info][lexical]  get value = ' ' len = 1 from 3
-
-[info][lexical]  set_start
-
 [info][lexical]  p = '*'
 
 [debug][lexical]  check list : paser_list[0]->status = -1
@@ -349,7 +60,7 @@
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = ' '
+[info][lexical]  p = '3'
 
 [debug][lexical]  check list : paser_list[0]->status = -1
 [debug][lexical]  check list : paser_list[1]->status = -1
@@ -373,46 +84,6 @@
 
 [info][lexical]  set_start
 
-[info][lexical]  p = ' '
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -3
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[debug][lexical]  continue to paser
-
-[info][lexical]  p = '3'
-
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
-[debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -2
-[debug][lexical]  check list : paser_list[4]->status = -1
-[debug][lexical]  check list : paser_list[5]->status = -1
-[debug][lexical]  check list : paser_list[6]->status = -1
-[debug][lexical]  check list : paser_list[7]->status = -1
-[debug][lexical]  check list : paser_list[8]->status = -1
-[debug][lexical]  check list : paser_list[9]->status = -1
-[debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
-
-[info][lexical]  back_p
-
-[info][lexical]  get value = ' ' len = 1 from 3
-
-[info][lexical]  set_start
-
 [info][lexical]  p = '3'
 
 [debug][lexical]  check list : paser_list[0]->status = 1

TEMPAT SAMPAH
gwarf


+ 3 - 3
gwarf.c

@@ -21,9 +21,9 @@ int main(){
     login(the_var);
 
     parser("/home/songzihuan/test.gwf");
-    // printf("----start run----\n");
-    // traverse_global(global_inter->global_code, the_var);
-    // printf("code end...\n");
+    printf("----start run----\n");
+    traverse_global(global_inter->global_code, the_var);
+    printf("code end...\n");
     return 0;
 }
 

+ 59 - 39
paser/syntax.c

@@ -25,23 +25,29 @@ void polynomial(int *status, token_node *list){  // 多项式
             get_right_token(status, list, factor, right);  // 回调右边
 
             new_token.type = NON_polynomial;
-            new_token.data_type = d_number;
-
-            // 逻辑处理
-            double l_num = left.data.d_number, r_num = right.data.d_number;
+            new_token.data_type = statement_value;
+            statement *code_tmp =  make_statement();
+            code_tmp->type = operation;
 
             if(symbol.type == ADD_PASER){
-                new_token.data.d_number = l_num + r_num;
+                code_tmp->code.operation.type = ADD_func;
             }
             else{
-                new_token.data.d_number = l_num - r_num;
+                code_tmp->code.operation.type = SUB_func;
             }
+            code_tmp->code.operation.left_exp = left.data.statement_value;
+            code_tmp->code.operation.right_exp = right.data.statement_value;
+            new_token.data.statement_value = code_tmp;
+
             add_node(list, new_token);  // 压入节点[弹出3个压入1个]
             return polynomial(status, list);  // 回调自己
         }
         else{  // 递归跳出
-            printf("left.data.d_number = %f\n", left.data.d_number);
             fprintf(debug, "[info][grammar]  (polynomial)out\n");
+
+            statement *tmp = find_statement_list(0, statement_base);
+            append_statement(tmp, left.data.statement_value);
+
             back_one_token(list, left);
             back_again(list, symbol);
             return;
@@ -75,24 +81,21 @@ void factor(int *status, token_node *list){  // 因试分解
         if(symbol.type == MUL_PASER || symbol.type == DIV_PASER){  // 模式2/3
             get_right_token(status, list, number, right);  // 回调右边
 
-            new_token.type = NON_factor;
-            new_token.data_type = d_number;
-
             // 逻辑操作
-            double l_num = left.data.d_number, r_num;
-            if(right.type == NON_dou){
-                r_num = right.data.d_number;
-            }
-            else if(right.type == NON_int){
-                r_num = (double)right.data.i_number;
-            }
+            new_token.type = NON_factor;
+            new_token.data_type = statement_value;
+            statement *code_tmp =  make_statement();
+            code_tmp->type = operation;
 
             if(symbol.type == MUL_PASER){
-                new_token.data.d_number = l_num * r_num;
+                code_tmp->code.operation.type = MUL_func;
             }
             else{
-                new_token.data.d_number = l_num / r_num;
+                code_tmp->code.operation.type = DIV_func;
             }
+            code_tmp->code.operation.left_exp = left.data.statement_value;
+            code_tmp->code.operation.right_exp = right.data.statement_value;
+            new_token.data.statement_value = code_tmp;
             add_node(list, new_token);  // 压入节点[弹出3个压入1个]
             return factor(status, list);  // 回调自己
         }
@@ -109,9 +112,6 @@ void factor(int *status, token_node *list){  // 因试分解
         back_one_token(list, left);
         get_base_token(status, list, number, new_token);
 
-        if(new_token.type == NON_int){
-            new_token.data.d_number = (double)new_token.data.i_number;
-        }
         new_token.type = NON_factor;
         add_node(list, new_token);
         return factor(status, list);  // 回调自己
@@ -130,27 +130,47 @@ void number(int *status, token_node *list){  // 数字归约
     gett = pop_node(list);  // 取得一个token
 
     if(gett.type == INT_PASER){  // int类型
-        new_token.type = NON_int;
-        new_token.data_type = i_number;
-        new_token.data.i_number = atoi(gett.data.text);
-        fprintf(status_log, "[info][grammar]  (number)get int number: %d\n", new_token.data.i_number);
+        new_token.type = NON_base_value;
+
+        GWARF_value tmp_value;
+        tmp_value.type = INT_value;
+        tmp_value.value.int_value = atoi(gett.data.text);
+
+        statement *code_tmp =  make_statement();
+        code_tmp->type = call;
+        code_tmp->code.call.func = pack_call_name("int", NULL);
+        code_tmp->code.call.parameter_list = pack_value_parameter(tmp_value);
+        new_token.data.statement_value = code_tmp;
+        new_token.data_type = statement_value;
+
+        fprintf(status_log, "[info][grammar]  (number)get int number: %d\n", tmp_value.value.int_value);
     }
     else if(gett.type == DOUBLE_PASER){
-        new_token.type = NON_dou;
-        new_token.data_type = d_number;
-        new_token.data.d_number = atof(gett.data.text);
+        new_token.type = NON_base_value;
+
+        GWARF_value tmp_value;
+        tmp_value.type = NUMBER_value;
+        tmp_value.value.double_value = atof(gett.data.text);
+
+        statement *code_tmp =  make_statement();
+        code_tmp->type = call;
+        code_tmp->code.call.func = pack_call_name("double", NULL);
+        code_tmp->code.call.parameter_list = pack_value_parameter(tmp_value);
+        new_token.data.statement_value = code_tmp;
+        new_token.data_type = statement_value;
+
         fprintf(status_log, "[info][grammar]  (number)get double number: %f\n", new_token.data.d_number);
     }
-    else if(gett.type == LB_PASER){  // 模式3
-        fprintf(status_log, "[info][grammar]  (number)get LB\n");
-        get_right_token(status, list, polynomial, new_token);
-        new_token.type = NON_dou;
-        token rb;
-        get_pop_token(status, list ,rb);
-        if(rb.type != RB_PASER){  // 匹配失败
-            paser_error("Don't get ')'");
-        }
-    }
+    // else if(gett.type == LB_PASER){  // 模式3
+    //     fprintf(status_log, "[info][grammar]  (number)get LB\n");
+    //     get_right_token(status, list, polynomial, new_token);
+    //     new_token.type = NON_dou;
+    //     token rb;
+    //     get_pop_token(status, list ,rb);
+    //     if(rb.type != RB_PASER){  // 匹配失败
+    //         paser_error("Don't get ')'");
+    //     }
+    // }
     else{  // 不是期望值
         fprintf(status_log, "[info][grammar]  (number)back one token\n");
         back_one_token(list, gett);

+ 8 - 5
paser/token.h

@@ -1,9 +1,7 @@
 #ifndef TOKN_INCLUED
 #define TOKN_INCLUED
 
-#define bool int
-#define true 1
-#define false 0
+#include "../inter/interpreter.h"
 
 #define MAX_PASER_SIZE 10
 #define INT_PASER 0
@@ -67,8 +65,7 @@ typedef enum token_type
     EOF_token = -3,
 
     // 终结符
-    NON_int = -4,
-    NON_dou = -5,
+    NON_base_value = -4,
     NON_factor = -6,
     NON_polynomial = -7,
 } token_type;
@@ -78,6 +75,9 @@ typedef union token_data
     char *text;
     int i_number;
     double d_number;
+    struct statement *statement_value;
+    struct if_list *if_list_base;
+    struct parameter *parameter_list;
 } token_data;
 
 
@@ -88,6 +88,9 @@ typedef struct token
         text,
         d_number,
         i_number,
+        statement_value,
+        if_list_base,
+        parameter_list,
     } data_type;  // data的数据类型
     token_data data;
 } token;

+ 8 - 97
status.log

@@ -1,21 +1,5 @@
-[debug][grammar]  get token type : 8; data type : 0
-[debug][grammar]  add a token[seek : 0, index : 0, size : 1]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[info][grammar]  mode status: polynomial
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (polynomial)back one token to (factor)
-[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[info][grammar]  mode status: factor
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (factor)back one token to (number)
-[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[info][grammar]  mode status: number
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (number)get LB
 [debug][grammar]  get token type : 0; data type : 0
-[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 1]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [info][grammar]  mode status: polynomial
 [debug][grammar]  pop a token[seek : 0, index : 0]
@@ -39,106 +23,33 @@
 [info][grammar]  mode status: factor
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (factor)reduce right
-[debug][grammar]  get token type : 4; data type : 0
-[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (factor)out
-[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[debug][grammar]  add a token[seek : 1, index : 1, size : 2]
-[debug][grammar]  after add a token[seek : 2, index : 2]
-[debug][grammar]  back a token[seek : 2, index : 2]
-[debug][grammar]  pop a token[seek : 0, index : 1]
-[debug][grammar]  add a token[seek : 0, index : 1, size : 3]
-[debug][grammar]  after add a token[seek : 1, index : 2]
-[info][grammar]  mode status: polynomial
-[debug][grammar]  pop a token[seek : 0, index : 1]
-[info][grammar]  (factor)reduce right
-[debug][grammar]  get token seek += 1 : 0, index : 1
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[debug][grammar]  get token type : 0; data type : 0
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[info][grammar]  mode status: factor
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (factor)back one token to (number)
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[info][grammar]  mode status: number
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (number)get int number: 2
-[info][grammar]  (number)add one token
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[info][grammar]  mode status: factor
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (factor)reduce right
-[debug][grammar]  get token type : 9; data type : 0
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (factor)out
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[debug][grammar]  add a token[seek : 1, index : 1, size : 3]
-[debug][grammar]  after add a token[seek : 2, index : 2]
-[debug][grammar]  back a token[seek : 2, index : 2]
-[debug][grammar]  pop a token[seek : 0, index : 1]
-[debug][grammar]  add a token[seek : 0, index : 1, size : 3]
-[debug][grammar]  after add a token[seek : 1, index : 2]
-[info][grammar]  mode status: polynomial
-[debug][grammar]  pop a token[seek : 0, index : 1]
-[info][grammar]  (factor)reduce right
-[debug][grammar]  get token seek += 1 : 0, index : 1
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[debug][grammar]  add a token[seek : 1, index : 1, size : 3]
-[debug][grammar]  after add a token[seek : 2, index : 2]
-[debug][grammar]  back a token[seek : 2, index : 2]
-[debug][grammar]  pop a token[seek : 0, index : 1]
-[debug][grammar]  get token seek += 1 : 0, index : 1
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (number)add one token
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
-[debug][grammar]  after add a token[seek : 1, index : 1]
-[info][grammar]  mode status: factor
-[debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (factor)reduce right
 [debug][grammar]  get token type : 6; data type : 0
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [debug][grammar]  get token type : 0; data type : 0
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [info][grammar]  mode status: number
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (number)get int number: 3
 [info][grammar]  (number)add one token
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  pop a token[seek : 0, index : 0]
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [info][grammar]  mode status: factor
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (factor)reduce right
 [debug][grammar]  get token type : 2; data type : 0
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (factor)out
-[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  after add a token[seek : 1, index : 1]
-[debug][grammar]  add a token[seek : 1, index : 1, size : 3]
+[debug][grammar]  add a token[seek : 1, index : 1, size : 2]
 [debug][grammar]  after add a token[seek : 2, index : 2]
 [debug][grammar]  back a token[seek : 2, index : 2]
 [debug][grammar]  pop a token[seek : 0, index : 1]