SongZihuan il y a 5 ans
Parent
commit
82fbd00db8
6 fichiers modifiés avec 269 ajouts et 50 suppressions
  1. 141 45
      debug.log
  2. BIN
      gwarf
  3. 6 0
      paser/lexical.c
  4. 68 2
      paser/syntax.c
  5. 14 1
      paser/token.h
  6. 40 2
      status.log

+ 141 - 45
debug.log

@@ -32,10 +32,16 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 28
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 34
+[debug][lexical]  check list : count all = 36
 
 [debug][lexical]  continue to paser
 
@@ -71,10 +77,16 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 28
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 34
+[debug][lexical]  check list : count all = 36
 
 [debug][lexical]  continue to paser
 
@@ -110,10 +122,16 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 35
+[debug][lexical]  check list : count all = 36
 
 [info][lexical]  back_p
 
@@ -155,14 +173,20 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 35
+[debug][lexical]  check list : count all = 36
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = '^'
+[info][lexical]  p = '>'
 
 [debug][lexical]  check list : paser_list[0]->status = -1
 [debug][lexical]  check list : paser_list[1]->status = -1
@@ -194,10 +218,16 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 35
+[debug][lexical]  check list : count all = 36
 
 [info][lexical]  back_p
 
@@ -205,7 +235,7 @@
 
 [info][lexical]  set_start
 
-[info][lexical]  p = '^'
+[info][lexical]  p = '>'
 
 [debug][lexical]  check list : paser_list[0]->status = -1
 [debug][lexical]  check list : paser_list[1]->status = -1
@@ -232,15 +262,21 @@
 [debug][lexical]  check list : paser_list[22]->status = -1
 [debug][lexical]  check list : paser_list[23]->status = -1
 [debug][lexical]  check list : paser_list[24]->status = -1
-[debug][lexical]  check list : paser_list[25]->status = -1
+[debug][lexical]  check list : paser_list[25]->status = 1
 [debug][lexical]  check list : paser_list[26]->status = -1
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
-[debug][lexical]  check list : paser_list[29]->status = -2
+[debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -2
+[debug][lexical]  check list : paser_list[32]->status = 1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 33
+[debug][lexical]  check list : count all = 36
 
 [debug][lexical]  continue to paser
 
@@ -275,17 +311,23 @@
 [debug][lexical]  check list : paser_list[26]->status = -1
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
-[debug][lexical]  check list : paser_list[29]->status = -3
-[debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -4
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : s_end_count = 1
+[debug][lexical]  check list : not_count = 35
+[debug][lexical]  check list : count all = 36
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = '^' len = 1 from 29
+[info][lexical]  get value = '>' len = 1 from 31
 
-[debug]token type = 29
+[debug]token type = 31
 
 [info][lexical]  set_start
 
@@ -321,14 +363,20 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 35
+[debug][lexical]  check list : count all = 36
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = '2'
+[info][lexical]  p = '3'
 
 [debug][lexical]  check list : paser_list[0]->status = -1
 [debug][lexical]  check list : paser_list[1]->status = -1
@@ -360,10 +408,16 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 35
+[debug][lexical]  check list : count all = 36
 
 [info][lexical]  back_p
 
@@ -371,7 +425,7 @@
 
 [info][lexical]  set_start
 
-[info][lexical]  p = '2'
+[info][lexical]  p = '3'
 
 [debug][lexical]  check list : paser_list[0]->status = 1
 [debug][lexical]  check list : paser_list[1]->status = 1
@@ -403,14 +457,20 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 28
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 34
+[debug][lexical]  check list : count all = 36
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = '1'
+[info][lexical]  p = '3'
 
 [debug][lexical]  check list : paser_list[0]->status = 1
 [debug][lexical]  check list : paser_list[1]->status = 1
@@ -442,10 +502,16 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 28
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 34
+[debug][lexical]  check list : count all = 36
 
 [debug][lexical]  continue to paser
 
@@ -481,14 +547,20 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 35
+[debug][lexical]  check list : count all = 36
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = '21' len = 2 from 0
+[info][lexical]  get value = '33' len = 2 from 0
 
 [debug]token type = 0
 
@@ -526,10 +598,16 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 35
+[debug][lexical]  check list : count all = 36
 
 [debug][lexical]  continue to paser
 
@@ -565,10 +643,16 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 35
+[debug][lexical]  check list : count all = 36
 
 [info][lexical]  back_p
 
@@ -611,10 +695,16 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 35
+[debug][lexical]  check list : count all = 36
 
 [debug][lexical]  continue to paser
 
@@ -650,10 +740,16 @@
 [debug][lexical]  check list : paser_list[27]->status = -1
 [debug][lexical]  check list : paser_list[28]->status = -1
 [debug][lexical]  check list : paser_list[29]->status = -1
+[debug][lexical]  check list : paser_list[30]->status = -1
+[debug][lexical]  check list : paser_list[31]->status = -1
+[debug][lexical]  check list : paser_list[32]->status = -1
+[debug][lexical]  check list : paser_list[33]->status = -1
+[debug][lexical]  check list : paser_list[34]->status = -1
+[debug][lexical]  check list : paser_list[35]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 29
-[debug][lexical]  check list : count all = 30
+[debug][lexical]  check list : not_count = 35
+[debug][lexical]  check list : count all = 36
 
 [info][lexical]  back_p
 

BIN
gwarf


+ 6 - 0
paser/lexical.c

@@ -103,6 +103,12 @@ int paser(int *index){
         match_text(p, global_paser[BITAND_PASER], "&");
         match_text(p, global_paser[BITOR_PASER], "|");
         match_text(p, global_paser[BITNOTOR_PASER], "^");
+        match_text_s(p, global_paser[MORE_PASER], ">");
+        match_text_s(p, global_paser[LESS_PASER], "<");
+        match_text_s(p, global_paser[NOTEQ_PASER], "!=");
+        match_text_s(p, global_paser[EQEQ_PASER], "==");
+        match_text_s(p, global_paser[MOREEQ_PASER], ">=");
+        match_text_s(p, global_paser[LESSEQ_PASER], "<=");
 
         *index = check_list(global_paser);  // 检查解析结果
 

+ 68 - 2
paser/syntax.c

@@ -21,6 +21,7 @@ void bit_not(int *status, token_node *list);
 void bit_notor(int *status, token_node *list);
 void bit_or(int *status, token_node *list);
 void bit_and(int *status, token_node *list);
+void compare(int *status, token_node *list);
 
 void paser_error(char *text);
 
@@ -413,8 +414,8 @@ top_exp : polynomial
 void top_exp(int *status, token_node *list){
     fprintf(status_log, "[info][grammar]  mode status: top_exp\n");
     token exp;
-    get_base_token(status,list,bit_notor,exp);
-    if(exp.type != NON_bit_notor){
+    get_base_token(status,list,compare,exp);
+    if(exp.type != NON_compare){
         back_one_token(list, exp);
         return;
     }
@@ -423,6 +424,71 @@ void top_exp(int *status, token_node *list){
     return;
 }
 
+void compare(int *status, token_node *list){  // 多项式
+    fprintf(status_log, "[info][grammar]  mode status: polynomial\n");
+    token left, right, symbol, new_token;
+
+    left = pop_node(list);  // 先弹出一个token   检查token的类型:区分是模式1,还是模式2/3
+    if(left.type == NON_compare){  // 模式2/3
+        fprintf(status_log, "[info][grammar]  (polynomial)reduce right\n");
+        get_pop_token(status, list, symbol);
+        if(symbol.type == EQEQ_PASER || symbol.type == MOREEQ_PASER || symbol.type == LESSEQ_PASER ||
+           symbol.type == MORE_PASER || symbol.type == LESS_PASER || symbol.type == NOTEQ_PASER){  // 模式2/3
+            get_right_token(status, list, bit_notor, right);  // 回调右边
+            if(right.type != NON_bit_notor){
+                paser_error("Don't get a bit_notor");
+            }
+            new_token.type = NON_compare;
+            new_token.data_type = statement_value;
+            statement *code_tmp =  make_statement();
+            code_tmp->type = operation;
+
+            if(symbol.type == EQEQ_PASER){
+                code_tmp->code.operation.type = EQUAL_func;
+            }
+            else if(symbol.type == MOREEQ_PASER){
+                code_tmp->code.operation.type = MOREEQ_func;
+            }
+            else if(symbol.type == LESSEQ_PASER){
+                code_tmp->code.operation.type = LESSEQ_func;
+            }
+            else if(symbol.type == MORE_PASER){
+                code_tmp->code.operation.type = MORE_func;
+            }
+            else if(symbol.type == LESS_PASER){
+                code_tmp->code.operation.type = LESS_func;
+            }
+            else{
+                code_tmp->code.operation.type = NOTEQ_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 compare(status, list);  // 回调自己
+        }
+        else{  // 递归跳出
+            fprintf(status_log, "[info][grammar]  (polynomial)out\n");
+            back_one_token(list, left);
+            back_again(list, symbol);
+            return;
+        }
+    }
+    else{  // 模式1
+        fprintf(status_log, "[info][grammar]  (polynomial)back one token to (factor)\n");
+        back_one_token(list, left);
+        get_base_token(status, list, bit_notor, new_token);
+        if(new_token.type != NON_bit_notor){
+            back_one_token(list, new_token);  // 往回[不匹配类型]
+            return;
+        }
+        new_token.type = NON_compare;
+        add_node(list, new_token);
+        return compare(status, list);  // 回调自己
+    }
+}
+
 /*
 bit_notor : bit_or
           | bit_notor BITOR bit_or

+ 14 - 1
paser/token.h

@@ -3,7 +3,7 @@
 
 #include "../inter/interpreter.h"
 
-#define MAX_PASER_SIZE 30
+#define MAX_PASER_SIZE 36
 #define INT_PASER 0
 #define DOUBLE_PASER 1
 #define ENTER_PASER 2
@@ -34,6 +34,12 @@
 #define BITAND_PASER 27
 #define BITOR_PASER 28
 #define BITNOTOR_PASER 29
+#define EQEQ_PASER 30
+#define MORE_PASER 31
+#define MOREEQ_PASER 32
+#define LESS_PASER 33
+#define LESSEQ_PASER 34
+#define NOTEQ_PASER 35
 
 // 获取并返回一个token
 #define get_pop_token(status,list,new_token) \
@@ -108,6 +114,12 @@ typedef enum token_type
     BITAND = BITAND_PASER,
     BITOR = BITOR_PASER,
     BITNOTOR = BITNOTOR_PASER,
+    EQEQ = EQEQ_PASER,
+    MORE = MORE_PASER,
+    MOREEQ = MOREEQ_PASER,
+    LESS = LESS_PASER,
+    LESSEQ = LESSEQ_PASER,
+    NOTEQ = NOTEQ_PASER,
 
     // 特殊符号
     BAD_token = -2,
@@ -135,6 +147,7 @@ typedef enum token_type
     NON_bit_and = -23,
     NON_bit_or = -24,
     NON_bit_notor = -25,
+    NON_compare = -26,
 } token_type;
 
 typedef union token_data

+ 40 - 2
status.log

@@ -12,6 +12,11 @@
 [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: top_exp
+[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: bit_or
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (bit_or)back one token to (bit_and)
@@ -77,7 +82,7 @@
 [info][grammar]  mode status: power
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (power)reduce right
-[debug][grammar]  get token type : 29; data type : 0
+[debug][grammar]  get token type : 31; 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]
@@ -171,6 +176,20 @@
 [info][grammar]  (bit_or)reduce right
 [debug][grammar]  get token seek += 1 : 0, index : 1
 [debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (bit_notor)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]  (polynomial)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]
@@ -179,6 +198,11 @@
 [info][grammar]  (bit_or)back one token to (bit_and)
 [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: bit_or
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (bit_or)back one token to (bit_and)
+[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: bit_and
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (bit_move)back one token to (factor)
@@ -221,7 +245,7 @@
 [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: 21
+[info][grammar]  (number)get int number: 33
 [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]
@@ -337,6 +361,20 @@
 [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]  (polynomial)reduce right
+[debug][grammar]  get token seek += 1 : 0, index : 1
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (polynomial)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]
 [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]