Browse Source

实现bool逻辑

SongZihuan 5 years ago
parent
commit
cf85edd85a
6 changed files with 901 additions and 48 deletions
  1. 445 43
      debug.log
  2. BIN
      gwarf
  3. 3 0
      paser/lexical.c
  4. 157 2
      paser/syntax.c
  5. 16 1
      paser/token.h
  6. 280 2
      status.log

+ 445 - 43
debug.log

@@ -1,5 +1,209 @@
 [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 = -1
+[debug][lexical]  check list : paser_list[10]->status = -1
+[debug][lexical]  check list : paser_list[11]->status = -1
+[debug][lexical]  check list : paser_list[12]->status = -1
+[debug][lexical]  check list : paser_list[13]->status = -1
+[debug][lexical]  check list : paser_list[14]->status = -1
+[debug][lexical]  check list : paser_list[15]->status = -1
+[debug][lexical]  check list : paser_list[16]->status = -1
+[debug][lexical]  check list : paser_list[17]->status = -1
+[debug][lexical]  check list : paser_list[18]->status = -1
+[debug][lexical]  check list : paser_list[19]->status = -1
+[debug][lexical]  check list : paser_list[20]->status = -1
+[debug][lexical]  check list : paser_list[21]->status = -1
+[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[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 = -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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -2
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : s_end_count = 0
+[debug][lexical]  check list : not_count = 37
+[debug][lexical]  check list : count all = 39
+
+[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 = -1
+[debug][lexical]  check list : paser_list[10]->status = -1
+[debug][lexical]  check list : paser_list[11]->status = -1
+[debug][lexical]  check list : paser_list[12]->status = -1
+[debug][lexical]  check list : paser_list[13]->status = -1
+[debug][lexical]  check list : paser_list[14]->status = -1
+[debug][lexical]  check list : paser_list[15]->status = -1
+[debug][lexical]  check list : paser_list[16]->status = -1
+[debug][lexical]  check list : paser_list[17]->status = -1
+[debug][lexical]  check list : paser_list[18]->status = -1
+[debug][lexical]  check list : paser_list[19]->status = -1
+[debug][lexical]  check list : paser_list[20]->status = -1
+[debug][lexical]  check list : paser_list[21]->status = -1
+[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[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 = -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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -3
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : s_end_count = 0
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = '!' len = 1 from 38
+
+[debug]token type = 38
+
+[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 = -2
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : paser_list[10]->status = -1
+[debug][lexical]  check list : paser_list[11]->status = -1
+[debug][lexical]  check list : paser_list[12]->status = -1
+[debug][lexical]  check list : paser_list[13]->status = -1
+[debug][lexical]  check list : paser_list[14]->status = -1
+[debug][lexical]  check list : paser_list[15]->status = -1
+[debug][lexical]  check list : paser_list[16]->status = -1
+[debug][lexical]  check list : paser_list[17]->status = -1
+[debug][lexical]  check list : paser_list[18]->status = -1
+[debug][lexical]  check list : paser_list[19]->status = -1
+[debug][lexical]  check list : paser_list[20]->status = -1
+[debug][lexical]  check list : paser_list[21]->status = -1
+[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[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 = -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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : s_end_count = 0
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
+
+[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 = -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 : paser_list[10]->status = -1
+[debug][lexical]  check list : paser_list[11]->status = -1
+[debug][lexical]  check list : paser_list[12]->status = -1
+[debug][lexical]  check list : paser_list[13]->status = -1
+[debug][lexical]  check list : paser_list[14]->status = -1
+[debug][lexical]  check list : paser_list[15]->status = -1
+[debug][lexical]  check list : paser_list[16]->status = -1
+[debug][lexical]  check list : paser_list[17]->status = -1
+[debug][lexical]  check list : paser_list[18]->status = -1
+[debug][lexical]  check list : paser_list[19]->status = -1
+[debug][lexical]  check list : paser_list[20]->status = -1
+[debug][lexical]  check list : paser_list[21]->status = -1
+[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[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 = -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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : s_end_count = 0
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = '(' len = 1 from 8
+
+[debug]token type = 8
+
+[info][lexical]  set_start
+
 [info][lexical]  p = '3'
 
 [debug][lexical]  check list : paser_list[0]->status = 1
@@ -38,10 +242,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 34
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 37
+[debug][lexical]  check list : count all = 39
 
 [debug][lexical]  continue to paser
 
@@ -83,10 +290,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 34
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 37
+[debug][lexical]  check list : count all = 39
 
 [debug][lexical]  continue to paser
 
@@ -128,10 +338,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 35
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
 
 [info][lexical]  back_p
 
@@ -179,14 +392,17 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 35
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
 
 [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
@@ -224,10 +440,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 35
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
 
 [info][lexical]  back_p
 
@@ -235,7 +454,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
@@ -262,21 +481,72 @@
 [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 = -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[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 : paser_list[35]->status = 1
+[debug][lexical]  check list : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -2
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 33
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 37
+[debug][lexical]  check list : count all = 39
+
+[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 = -1
+[debug][lexical]  check list : paser_list[10]->status = -1
+[debug][lexical]  check list : paser_list[11]->status = -1
+[debug][lexical]  check list : paser_list[12]->status = -1
+[debug][lexical]  check list : paser_list[13]->status = -1
+[debug][lexical]  check list : paser_list[14]->status = -1
+[debug][lexical]  check list : paser_list[15]->status = -1
+[debug][lexical]  check list : paser_list[16]->status = -1
+[debug][lexical]  check list : paser_list[17]->status = -1
+[debug][lexical]  check list : paser_list[18]->status = -1
+[debug][lexical]  check list : paser_list[19]->status = -1
+[debug][lexical]  check list : paser_list[20]->status = -1
+[debug][lexical]  check list : paser_list[21]->status = -1
+[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[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 = -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 = -2
+[debug][lexical]  check list : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -3
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : s_end_count = 0
+[debug][lexical]  check list : not_count = 37
+[debug][lexical]  check list : count all = 39
 
 [debug][lexical]  continue to paser
 
@@ -313,21 +583,24 @@
 [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 = -4
+[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 : paser_list[35]->status = -4
+[debug][lexical]  check list : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->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
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = '>' len = 1 from 31
+[info][lexical]  get value = '!=' len = 2 from 35
 
-[debug]token type = 31
+[debug]token type = 35
 
 [info][lexical]  set_start
 
@@ -369,10 +642,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 35
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
 
 [debug][lexical]  continue to paser
 
@@ -414,10 +690,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 35
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
 
 [info][lexical]  back_p
 
@@ -463,10 +742,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 34
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 37
+[debug][lexical]  check list : count all = 39
 
 [debug][lexical]  continue to paser
 
@@ -508,14 +790,17 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 34
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 37
+[debug][lexical]  check list : count all = 39
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = <Enter>
+[info][lexical]  p = ')'
 
 [debug][lexical]  check list : paser_list[0]->status = -3
 [debug][lexical]  check list : paser_list[1]->status = -1
@@ -553,10 +838,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 35
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
 
 [info][lexical]  back_p
 
@@ -566,6 +854,108 @@
 
 [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 = -2
+[debug][lexical]  check list : paser_list[10]->status = -1
+[debug][lexical]  check list : paser_list[11]->status = -1
+[debug][lexical]  check list : paser_list[12]->status = -1
+[debug][lexical]  check list : paser_list[13]->status = -1
+[debug][lexical]  check list : paser_list[14]->status = -1
+[debug][lexical]  check list : paser_list[15]->status = -1
+[debug][lexical]  check list : paser_list[16]->status = -1
+[debug][lexical]  check list : paser_list[17]->status = -1
+[debug][lexical]  check list : paser_list[18]->status = -1
+[debug][lexical]  check list : paser_list[19]->status = -1
+[debug][lexical]  check list : paser_list[20]->status = -1
+[debug][lexical]  check list : paser_list[21]->status = -1
+[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[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 = -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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : s_end_count = 0
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = <Enter>
+
+[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 : paser_list[10]->status = -1
+[debug][lexical]  check list : paser_list[11]->status = -1
+[debug][lexical]  check list : paser_list[12]->status = -1
+[debug][lexical]  check list : paser_list[13]->status = -1
+[debug][lexical]  check list : paser_list[14]->status = -1
+[debug][lexical]  check list : paser_list[15]->status = -1
+[debug][lexical]  check list : paser_list[16]->status = -1
+[debug][lexical]  check list : paser_list[17]->status = -1
+[debug][lexical]  check list : paser_list[18]->status = -1
+[debug][lexical]  check list : paser_list[19]->status = -1
+[debug][lexical]  check list : paser_list[20]->status = -1
+[debug][lexical]  check list : paser_list[21]->status = -1
+[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[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 = -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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : s_end_count = 0
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = ')' len = 1 from 9
+
+[debug]token type = 9
+
+[info][lexical]  set_start
+
 [info][lexical]  p = <Enter>
 
 [debug][lexical]  check list : paser_list[0]->status = -1
@@ -604,10 +994,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 35
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
 
 [debug][lexical]  continue to paser
 
@@ -649,10 +1042,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 35
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
 
 [info][lexical]  back_p
 
@@ -701,10 +1097,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 0
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 35
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
 
 [debug][lexical]  continue to paser
 
@@ -746,10 +1145,13 @@
 [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 : paser_list[36]->status = -1
+[debug][lexical]  check list : paser_list[37]->status = -1
+[debug][lexical]  check list : paser_list[38]->status = -1
 [debug][lexical]  check list : end_count = 1
 [debug][lexical]  check list : s_end_count = 0
-[debug][lexical]  check list : not_count = 35
-[debug][lexical]  check list : count all = 36
+[debug][lexical]  check list : not_count = 38
+[debug][lexical]  check list : count all = 39
 
 [info][lexical]  back_p
 

BIN
gwarf


+ 3 - 0
paser/lexical.c

@@ -109,6 +109,9 @@ int paser(int *index){
         match_text_s(p, global_paser[EQEQ_PASER], "==");
         match_text_s(p, global_paser[MOREEQ_PASER], ">=");
         match_text_s(p, global_paser[LESSEQ_PASER], "<=");
+        match_text_s(p, global_paser[OR_PASER], "||");
+        match_text_s(p, global_paser[AND_PASER], "&&");
+        match_text(p, global_paser[NOT_PASER], "!");
 
         *index = check_list(global_paser);  // 检查解析结果
 

+ 157 - 2
paser/syntax.c

@@ -22,6 +22,9 @@ 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 bool_and(int *status, token_node *list);
+void bool_or(int *status, token_node *list);
+void bool_not(int *status, token_node *list);
 
 void paser_error(char *text);
 
@@ -414,8 +417,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,compare,exp);
-    if(exp.type != NON_compare){
+    get_base_token(status,list,bool_or,exp);
+    if(exp.type != NON_bool_or){
         back_one_token(list, exp);
         return;
     }
@@ -424,6 +427,158 @@ void top_exp(int *status, token_node *list){
     return;
 }
 
+/*
+bool_or : bool_and
+        | bool_or AND bool_and
+*/
+void bool_or(int *status, token_node *list){  // 因试分解
+    fprintf(status_log, "[info][grammar]  mode status: bool_or\n");
+    token left, right, symbol, new_token;
+
+    left = pop_node(list);  // 先弹出一个token   检查token的类型:区分是模式1,还是模式2/3
+    if(left.type == NON_bool_or){  // 模式2/3
+        fprintf(status_log, "[info][grammar]  (bool_or)reduce right\n");
+        get_pop_token(status, list, symbol);
+
+        if(symbol.type == OR_PASER){  // 模式2/3
+            get_right_token(status, list, bool_and, right);  // 回调右边
+            if(right.type != NON_bool_and){
+                paser_error("Don't get a compare");
+            }
+            // 逻辑操作
+            new_token.type = NON_bool_or;
+            new_token.data_type = statement_value;
+
+            statement *code_tmp =  make_statement();
+            code_tmp->type = operation;
+            code_tmp->code.operation.type = OR_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 bool_or(status, list);  // 回调自己
+        }
+        else{  // 递归跳出
+            // 回退,也就是让下一次pop的时候读取到的是left而不是symbol
+            fprintf(status_log, "[info][grammar]  (bit_notor)out\n");
+            back_one_token(list, left);
+            back_again(list, symbol);
+            return;
+        }
+    }
+    else{  // 模式1
+        fprintf(status_log, "[info][grammar]  (bool_or)back one token to (bool_and)\n");
+        back_one_token(list, left);
+        get_base_token(status, list, bool_and, new_token);
+        if(new_token.type != NON_bool_and){
+            back_one_token(list, new_token);  // 往回[不匹配类型]
+            return;
+        }
+        new_token.type = NON_bool_or;
+        add_node(list, new_token);
+        return bool_or(status, list);  // 回调自己
+    }
+}
+
+/*
+bool_and : bool_not
+         | bool_and AND bool_not
+*/
+void bool_and(int *status, token_node *list){  // 因试分解
+    fprintf(status_log, "[info][grammar]  mode status: bool_and\n");
+    token left, right, symbol, new_token;
+
+    left = pop_node(list);  // 先弹出一个token   检查token的类型:区分是模式1,还是模式2/3
+    if(left.type == NON_bool_and){  // 模式2/3
+        fprintf(status_log, "[info][grammar]  (bool_and)reduce right\n");
+        get_pop_token(status, list, symbol);
+
+        if(symbol.type == AND_PASER){  // 模式2/3
+            get_right_token(status, list, bool_not, right);  // 回调右边
+            if(right.type != NON_bool_not){
+                paser_error("Don't get a bool_not");
+            }
+            // 逻辑操作
+            new_token.type = NON_bool_and;
+            new_token.data_type = statement_value;
+
+            statement *code_tmp =  make_statement();
+            code_tmp->type = operation;
+            code_tmp->code.operation.type = AND_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 bool_and(status, list);  // 回调自己
+        }
+        else{  // 递归跳出
+            // 回退,也就是让下一次pop的时候读取到的是left而不是symbol
+            fprintf(status_log, "[info][grammar]  (bit_notor)out\n");
+            back_one_token(list, left);
+            back_again(list, symbol);
+            return;
+        }
+    }
+    else{  // 模式1
+        fprintf(status_log, "[info][grammar]  (bool_and)back one token to (compare)\n");
+        back_one_token(list, left);
+        get_base_token(status, list, bool_not, new_token);
+        if(new_token.type != NON_bool_not){
+            back_one_token(list, new_token);  // 往回[不匹配类型]
+            return;
+        }
+        new_token.type = NON_bool_and;
+        add_node(list, new_token);
+        return bool_and(status, list);  // 回调自己
+    }
+}
+
+/*
+bool_not : compare
+         | BITNOT compare
+*/
+void bool_not(int *status, token_node *list){
+    fprintf(status_log, "[info][grammar]  mode status: negative\n");
+    token left, right, new_token;
+
+    left = pop_node(list);  // 先弹出一个token   检查token的类型:区分是模式1,还是模式2/3
+    if(left.type == NOT_PASER){  // 模式2
+        fprintf(status_log, "[info][grammar]  (bool_not)reduce right\n");
+
+        get_right_token(status, list, compare, right);  // 回调右边
+        if(right.type != NON_compare){
+            paser_error("Don't get a compare");
+        }
+        // 逻辑操作
+        new_token.type = NON_bool_not;
+        new_token.data_type = statement_value;
+
+        statement *code_tmp =  make_statement();
+        code_tmp->type = operation;
+        code_tmp->code.operation.type = NOT_func;
+        code_tmp->code.operation.left_exp = NULL;
+        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;  // 回调自己
+    }
+    else{  // 模式1
+        fprintf(status_log, "[info][grammar]  (negative)back one token to (bit_not)\n");
+        back_one_token(list, left);
+        get_base_token(status, list, compare, new_token);
+        if(new_token.type != NON_compare){
+            back_one_token(list, new_token);  // 往回[不匹配类型]
+            return;
+        }
+        new_token.type = NON_bool_not;
+        add_node(list, new_token);
+        return;
+    }
+}
+
 void compare(int *status, token_node *list){  // 多项式
     fprintf(status_log, "[info][grammar]  mode status: polynomial\n");
     token left, right, symbol, new_token;

+ 16 - 1
paser/token.h

@@ -3,7 +3,7 @@
 
 #include "../inter/interpreter.h"
 
-#define MAX_PASER_SIZE 36
+#define MAX_PASER_SIZE 39
 #define INT_PASER 0
 #define DOUBLE_PASER 1
 #define ENTER_PASER 2
@@ -40,6 +40,10 @@
 #define LESS_PASER 33
 #define LESSEQ_PASER 34
 #define NOTEQ_PASER 35
+#define AND_PASER 36
+#define OR_PASER 37
+#define NOT_PASER 38
+
 
 // 获取并返回一个token
 #define get_pop_token(status,list,new_token) \
@@ -103,6 +107,11 @@ typedef enum token_type
     WHILE = WHILE_PASER,
     LP = LP_PASER,
     RP = RP_PASER,
+    LI = LI_PASER,
+    RI = RI_PASER,
+    POW = POW_PASER,
+    LOG = LOG_PASER,
+    SQRT = SQRT_PASER,
     IF = IF_PASER,
     ELIF = ELIF_PASER,
     ELSE = ELSE_PASER,
@@ -120,6 +129,9 @@ typedef enum token_type
     LESS = LESS_PASER,
     LESSEQ = LESSEQ_PASER,
     NOTEQ = NOTEQ_PASER,
+    AND = AND_PASER,
+    OR = OR_PASER,
+    NOT = NOT_PASER,
 
     // 特殊符号
     BAD_token = -2,
@@ -148,6 +160,9 @@ typedef enum token_type
     NON_bit_or = -24,
     NON_bit_notor = -25,
     NON_compare = -26,
+    NON_bool_and = -27,
+    NON_bool_or = -28,
+    NON_bool_not = -29,
 } token_type;
 
 typedef union token_data

+ 280 - 2
status.log

@@ -1,4 +1,4 @@
-[debug][grammar]  get token type : 0; data type : 0
+[debug][grammar]  get token type : 38; 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: top_exp
@@ -12,6 +12,94 @@
 [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: bool_or
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (bool_or)back one token to (bool_and)
+[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: bool_and
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (bool_and)back one token to (compare)
+[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: negative
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (bool_not)reduce right
+[debug][grammar]  get token type : 8; data type : 0
+[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: 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)
+[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)
+[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_and
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (bit_move)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]  (bit_move)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: 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 (element)
+[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: negative
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (negative)back one token to (bit_not)
+[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_not
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (bit_not)back one token to (power)
+[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: power
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (power)back one token to (element)
+[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: element
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (element)get LB
+[debug][grammar]  get token type : 0; data type : 0
+[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: bool_or
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (bool_or)back one token to (bool_and)
+[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: bool_and
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (bool_and)back one token to (compare)
+[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: negative
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (negative)back one token to (bit_not)
+[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: polynomial
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (polynomial)back one token to (factor)
@@ -82,7 +170,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 : 31; data type : 0
+[debug][grammar]  get token type : 35; 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]
@@ -258,6 +346,165 @@
 [info][grammar]  mode status: power
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (power)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]  (power)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]  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]  add a token[seek : 0, index : 1, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 2]
+[info][grammar]  mode status: factor
+[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]
+[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]  (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]
+[info][grammar]  mode status: factor
+[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]
+[info][grammar]  (bit_move)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: bit_and
+[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]
+[info][grammar]  (bit_and)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: bit_or
+[debug][grammar]  pop a token[seek : 0, index : 1]
+[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_or)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: bit_or
+[debug][grammar]  pop a token[seek : 0, index : 1]
+[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]
+[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]  add a token[seek : 0, index : 1, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 2]
+[info][grammar]  mode status: bool_and
+[debug][grammar]  pop a token[seek : 0, index : 1]
+[info][grammar]  (bool_and)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: bool_or
+[debug][grammar]  pop a token[seek : 0, index : 1]
+[info][grammar]  (bool_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]
+[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]
+[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: power
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (power)reduce right
 [debug][grammar]  get token type : -3; data type : 6
 [debug][grammar]  add a token[seek : 0, index : 0, size : 3]
 [debug][grammar]  after add a token[seek : 1, index : 1]
@@ -376,6 +623,37 @@
 [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]  add a token[seek : 0, index : 1, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 2]
+[info][grammar]  mode status: bool_and
+[debug][grammar]  pop a token[seek : 0, index : 1]
+[info][grammar]  (bool_and)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: bool_or
+[debug][grammar]  pop a token[seek : 0, index : 1]
+[info][grammar]  (bool_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]
+[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]
 [debug][grammar]  add a token[seek : 0, index : 0, size : 3]