SongZihuan %!s(int64=5) %!d(string=hai) anos
pai
achega
ad110f4980
Modificáronse 7 ficheiros con 563 adicións e 305 borrados
  1. 318 218
      debug.log
  2. BIN=BIN
      gwarf
  3. 6 0
      inter/interpreter.h
  4. 5 0
      paser/lexical.c
  5. 123 31
      paser/syntax.c
  6. 23 1
      paser/token.h
  7. 88 55
      status.log

+ 318 - 218
debug.log

@@ -1,6 +1,6 @@
 [info][lexical]  set_start
 
-[info][lexical]  p = '('
+[info][lexical]  p = 'w'
 
 [debug][lexical]  check list : paser_list[0]->status = -1
 [debug][lexical]  check list : paser_list[1]->status = -1
@@ -10,15 +10,18 @@
 [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[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 : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = '2'
+[info][lexical]  p = 'h'
 
 [debug][lexical]  check list : paser_list[0]->status = -1
 [debug][lexical]  check list : paser_list[1]->status = -1
@@ -28,24 +31,42 @@
 [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[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
+[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 : end_count = 0
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
-[info][lexical]  back_p
+[debug][lexical]  continue to paser
 
-[info][lexical]  get value = '(' len = 1 from 8
+[info][lexical]  p = 'i'
 
-[debug]token type = 8
+[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 : end_count = 0
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
-[info][lexical]  set_start
+[debug][lexical]  continue to paser
 
-[info][lexical]  p = '2'
+[info][lexical]  p = 'l'
 
-[debug][lexical]  check list : paser_list[0]->status = 1
-[debug][lexical]  check list : paser_list[1]->status = 1
+[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
@@ -54,15 +75,39 @@
 [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 : end_count = 0
-[debug][lexical]  check list : not_count = 8
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = ' '
+[info][lexical]  p = 'e'
 
-[debug][lexical]  check list : paser_list[0]->status = -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 : paser_list[10]->status = -3
+[debug][lexical]  check list : paser_list[11]->status = -1
+[debug][lexical]  check list : paser_list[12]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
+
+[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
@@ -72,141 +117,166 @@
 [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 = -2
+[debug][lexical]  check list : paser_list[11]->status = -1
+[debug][lexical]  check list : paser_list[12]->status = -1
 [debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = '2' len = 1 from 0
+[info][lexical]  get value = 'while' len = 5 from 10
 
-[debug]token type = 0
+[debug]token type = 10
 
 [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
 [debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -3
+[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[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 : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = '+'
+[info][lexical]  p = '1'
 
 [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[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[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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = ' ' len = 1 from 3
+[info][lexical]  get value = '(' len = 1 from 8
+
+[debug]token type = 8
 
 [info][lexical]  set_start
 
-[info][lexical]  p = '+'
+[info][lexical]  p = '1'
 
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
+[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[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 : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 11
+[debug][lexical]  check list : count all = 13
 
 [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[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 = -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 : 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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = '+' len = 1 from 4
+[info][lexical]  get value = '1' len = 1 from 0
 
-[debug]token type = 4
+[debug]token type = 0
 
 [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
 [debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -3
+[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[5]->status = -3
 [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 : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = '2'
+[info][lexical]  p = '1'
 
 [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[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[5]->status = -2
 [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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = ' ' len = 1 from 3
+[info][lexical]  get value = '-' len = 1 from 5
+
+[debug]token type = 5
 
 [info][lexical]  set_start
 
-[info][lexical]  p = '2'
+[info][lexical]  p = '1'
 
 [debug][lexical]  check list : paser_list[0]->status = 1
 [debug][lexical]  check list : paser_list[1]->status = 1
@@ -218,9 +288,12 @@
 [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 : end_count = 0
-[debug][lexical]  check list : not_count = 8
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 11
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
@@ -236,13 +309,16 @@
 [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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = '2' len = 1 from 0
+[info][lexical]  get value = '1' len = 1 from 0
 
 [debug]token type = 0
 
@@ -260,13 +336,16 @@
 [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 : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [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
@@ -278,9 +357,12 @@
 [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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
@@ -288,132 +370,127 @@
 
 [debug]token type = 9
 
-[info][grammar]  (polynomial)out
 [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
 [debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -3
+[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 = -3
+[debug][lexical]  check list : paser_list[12]->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]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = '*'
+[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 = -2
+[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 = -2
+[debug][lexical]  check list : paser_list[12]->status = -1
 [debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = ' ' len = 1 from 3
+[info][lexical]  get value = '{' len = 1 from 11
+
+[debug]token type = 11
 
 [info][lexical]  set_start
 
-[info][lexical]  p = '*'
+[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[2]->status = -3
 [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 = -3
+[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 : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = ' '
+[info][lexical]  p = '1'
 
 [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[2]->status = -2
 [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 = -2
+[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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = '*' len = 1 from 6
+[info][lexical]  get value = '
+' len = 1 from 2
 
-[debug]token type = 6
+[debug]token type = 2
 
 [info][lexical]  set_start
 
-[info][lexical]  p = ' '
+[info][lexical]  p = '1'
 
-[debug][lexical]  check list : paser_list[0]->status = -1
-[debug][lexical]  check list : paser_list[1]->status = -1
+[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[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 : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 11
+[debug][lexical]  check list : count all = 13
 
 [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'
+[info][lexical]  p = '0'
 
 [debug][lexical]  check list : paser_list[0]->status = 1
 [debug][lexical]  check list : paser_list[1]->status = 1
@@ -425,13 +502,16 @@
 [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 : end_count = 0
-[debug][lexical]  check list : not_count = 8
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 11
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = <Enter>
+[info][lexical]  p = '+'
 
 [debug][lexical]  check list : paser_list[0]->status = -2
 [debug][lexical]  check list : paser_list[1]->status = -1
@@ -443,63 +523,70 @@
 [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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = '3' len = 1 from 0
+[info][lexical]  get value = '10' len = 2 from 0
 
 [debug]token type = 0
 
 [info][lexical]  set_start
 
-[info][lexical]  p = <Enter>
+[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 = -3
+[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[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 : 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 : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = '2'
+[info][lexical]  p = '1'
 
 [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 = -2
+[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[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 : 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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = '
-' len = 1 from 2
+[info][lexical]  get value = '+' len = 1 from 4
 
-[debug]token type = 2
+[debug]token type = 4
 
-[info][grammar]  (polynomial)out
 [info][lexical]  set_start
 
-[info][lexical]  p = '2'
+[info][lexical]  p = '1'
 
 [debug][lexical]  check list : paser_list[0]->status = 1
 [debug][lexical]  check list : paser_list[1]->status = 1
@@ -511,16 +598,19 @@
 [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 : end_count = 0
-[debug][lexical]  check list : not_count = 8
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 11
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = ' '
+[info][lexical]  p = '0'
 
-[debug][lexical]  check list : paser_list[0]->status = -2
-[debug][lexical]  check list : paser_list[1]->status = -1
+[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
@@ -529,145 +619,144 @@
 [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 : 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 : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 11
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = '+'
+[info][lexical]  p = <Enter>
 
-[debug][lexical]  check list : paser_list[0]->status = -1
+[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 = -2
+[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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = ' ' len = 1 from 3
+[info][lexical]  get value = '10' len = 2 from 0
+
+[debug]token type = 0
 
 [info][lexical]  set_start
 
-[info][lexical]  p = '+'
+[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[2]->status = -3
 [debug][lexical]  check list : paser_list[3]->status = -1
-[debug][lexical]  check list : paser_list[4]->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 : 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 : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [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
-[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -2
 [debug][lexical]  check list : paser_list[3]->status = -1
-[debug][lexical]  check list : paser_list[4]->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 : 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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = '+' len = 1 from 4
+[info][lexical]  get value = '
+' len = 1 from 2
 
-[debug]token type = 4
+[debug]token type = 2
 
 [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
 [debug][lexical]  check list : paser_list[2]->status = -1
-[debug][lexical]  check list : paser_list[3]->status = -3
+[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 = -3
 [debug][lexical]  check list : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
-[info][lexical]  p = '3'
+[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 = -2
+[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 = -2
 [debug][lexical]  check list : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = ' ' len = 1 from 3
+[info][lexical]  get value = '}' len = 1 from 12
+
+[debug]token type = 12
 
 [info][lexical]  set_start
 
-[info][lexical]  p = '3'
+[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[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -3
 [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
@@ -675,17 +764,20 @@
 [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 : end_count = 0
-[debug][lexical]  check list : not_count = 8
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
 [info][lexical]  p = <Enter>
 
-[debug][lexical]  check list : paser_list[0]->status = -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[2]->status = -2
 [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
@@ -693,15 +785,19 @@
 [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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
-[info][lexical]  get value = '3' len = 1 from 0
+[info][lexical]  get value = '
+' len = 1 from 2
 
-[debug]token type = 0
+[debug]token type = 2
 
 [info][lexical]  set_start
 
@@ -717,9 +813,12 @@
 [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 : end_count = 0
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [debug][lexical]  continue to paser
 
@@ -735,9 +834,12 @@
 [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 : end_count = 1
-[debug][lexical]  check list : not_count = 9
-[debug][lexical]  check list : count all = 10
+[debug][lexical]  check list : not_count = 12
+[debug][lexical]  check list : count all = 13
 
 [info][lexical]  back_p
 
@@ -746,6 +848,4 @@
 
 [debug]token type = <EOF>
 
-[info][grammar]  (polynomial)out
-[info][grammar]  (command_list)out
 [info][paser]  stop run

BIN=BIN
gwarf


+ 6 - 0
inter/interpreter.h

@@ -11,6 +11,12 @@
 #define read_statement_list(the_statement,the_var) read_statement(the_statement,the_var,NULL)
 #define run_func(base_the_var,the_var,name) run_func_core(base_the_var,the_var,name,false)
 
+#define push_statement(base,token) \
+do{ \
+statement *tmp = find_statement_list(0, base); \
+append_statement(tmp, token.data.statement_value); \
+}while(0);
+
 // the type of data(GWARF_value)
 typedef enum{
     NUMBER_value = 1,  // [只允许系统使用] [1]

+ 5 - 0
paser/lexical.c

@@ -71,6 +71,8 @@ int paser(int *index){
         // 执行解析器
         match_int(p, global_paser[INT_PASER]);
         match_double(p, global_paser[DOUBLE_PASER]);
+
+        // 常规文本解析器
         match_text(p, global_paser[ENTER_PASER], "\n");
         match_text(p, global_paser[SPACE_PASER], " ");
         match_text(p, global_paser[ADD_PASER], "+");
@@ -79,6 +81,9 @@ int paser(int *index){
         match_text(p, global_paser[DIV_PASER], "/");
         match_text(p, global_paser[LB_PASER], "(");
         match_text(p, global_paser[RB_PASER], ")");
+        match_text(p, global_paser[WHILE_PASER], "while");
+        match_text(p, global_paser[LP_PASER], "{");
+        match_text(p, global_paser[RP_PASER], "}");
 
         *index = check_list(global_paser);  // 检查解析结果
 

+ 123 - 31
paser/syntax.c

@@ -6,7 +6,8 @@ void factor(int *status, token_node *list);
 void number(int *status, token_node *list);
 void polynomial(int *status, token_node *list);
 void command(int *status, token_node *list);
-
+void while_(int *status, token_node *list);
+void block_(int *status, token_node *list);
 void paser_error(char *text);
 
 /*
@@ -21,7 +22,6 @@ void command_list(int *status, token_node *list){  // 多项式
     if(left.type == NON_command_list){  // 模式2
         fprintf(status_log, "[info][grammar]  (command_list)reduce right\n");
         get_right_token(status, list, command, right);  // 回调右边
-        
         if(right.type == NON_command){
             new_token.type = NON_command_list;
             new_token.data_type = empty;
@@ -29,20 +29,25 @@ void command_list(int *status, token_node *list){  // 多项式
             return command_list(status, list);  // 回调自己
         }
         else{  // 递归跳出[EOF_token]
-            fprintf(debug, "[info][grammar]  (command_list)out\n");
-            back_one_token(list, left);  // 理论上不back也可以
+            printf("right.type = %d\n", right.type);
+            fprintf(status_log, "[info][grammar]  (command_list)out\n");
+            back_one_token(list, left);
+            back_again(list, right);
             return;
         }
     }
     else if(left.type == EOF_token){  // 递归跳出的条件
-        fprintf(debug, "[info][grammar]  (command_list)out\n");
+        fprintf(status_log, "[info][grammar]  (command_list)out\n");
         return;
     }
     else{  // 模式1
         fprintf(status_log, "[info][grammar]  (command_list)back one token to (command)\n");
         back_one_token(list, left);
         get_base_token(status, list, command, new_token);
-
+        if(new_token.type != NON_command){
+            back_one_token(list, new_token);  // 往回[不匹配类型]
+            return;
+        }
         new_token.type = NON_command_list;
         add_node(list, new_token);
         return command_list(status, list);  // 回调自己
@@ -54,12 +59,18 @@ command : polynomial <ENTER>
 */
 void command(int *status, token_node *list){  // 多项式
     fprintf(status_log, "[info][grammar]  mode status: polynomial\n", text);
-    token left, stop, new_token;
+    token left, new_token;
 
-    new_token.type = NON_command;
-    new_token.data_type = statement_value;
-    left = pop_node(list);  // 先弹出一个token   检查token的类型:区分是模式1,还是模式2/3
-    if(left.type == ENTER_PASER){
+    left = pop_node(list);  // 先弹出一个token   检查token
+    if(left.type == WHILE_PASER){  // 是while类型的数据
+        fprintf(status_log, "[info][grammar]  (command)back one token to (while)\n");
+        back_one_token(list, left);
+        get_base_token(status, list, while_, new_token);
+
+        get_stop_token();
+        push_statement(statement_base, new_token);
+    }
+    else if(left.type == ENTER_PASER){
         fprintf(status_log, "[info][grammar]  (command)back <ENTER>\n");
     }
     else if(left.type == EOF_token){
@@ -67,35 +78,106 @@ void command(int *status, token_node *list){  // 多项式
         back_one_token(list, left);
         goto return_back;
     }
-    else{
+    else{  // 表达式
         fprintf(status_log, "[info][grammar]  (command)back one token to (polynomial)\n");
         back_one_token(list, left);
         get_base_token(status, list, polynomial, new_token);
-
-        get_pop_token(status, list, stop);
-        if(stop.type != ENTER_PASER && stop.type != EOF_token){
-            paser_error("Don't get stop token or EOF");
-        }
-        if(stop.type == EOF_token){
-            back_one_token(list, stop);
+        if(new_token.type != NON_polynomial){
+            back_one_token(list, new_token);  // 往回[不匹配类型]
+            return;
         }
-
-        statement *tmp = find_statement_list(0, statement_base);
-        append_statement(tmp, new_token.data.statement_value);
+        get_stop_token();
+        push_statement(statement_base, new_token);
     }
+
+    new_token.type = NON_command;
     add_node(list, new_token);
 
     return_back: 
     return;  // 回调自己
 }
 
+/*
+while_ : WHILE LB polynomial RB block  // TODO:把polynomial改为top_exp
+*/
+void while_(int *status, token_node *list){
+    fprintf(status_log, "[info][grammar]  mode status: while_\n");
+    token while_t, lb_t, exp_t, rb_t, block_t, new_token;
+    while_t = pop_node(list);
+    if(while_t.type == WHILE_PASER){
+        get_pop_token(status, list, lb_t);
+        if(lb_t.type != LB_PASER){
+            paser_error("Don't get '('");
+        }
+        get_right_token(status,list,polynomial,exp_t);
+        if(exp_t.type != NON_polynomial){  // 不是表达式
+            paser_error("Don't get 'polynomial'");
+        }
+        get_pop_token(status, list, rb_t);
+        if(rb_t.type != RB_PASER){
+            paser_error("Don't get ')'");
+        }
+
+        get_right_token(status,list,block_,block_t);
+        if(block_t.type != NON_block){  // 不是表达式
+            paser_error("Don't get '{'");
+        }
+
+        statement *while_tmp =  make_statement();
+        while_tmp->type = while_cycle;
+        while_tmp->code.while_cycle.condition = exp_t.data.statement_value;
+        while_tmp->code.while_cycle.done = block_t.data.statement_value;
+
+        new_token.type = NON_while;
+        new_token.data_type = statement_value;
+        new_token.data.statement_value = while_tmp;
+        add_node(list, new_token);  // 压入节点[弹出3个压入1个]
+        return;
+    }
+    else{
+        back_one_token(list, while_t);
+        return;
+    }
+}
+
+/*
+block_ : LP command_list RB
+*/
+void block_(int *status, token_node *list){
+    fprintf(status_log, "[info][grammar]  mode status: block_\n");
+    token lp_t, rp_t, new_token, command_list_t;
+    lp_t = pop_node(list);
+    if(lp_t.type == LP_PASER){
+        statement *block_tmp =  make_statement();
+        statement_base = append_statement_list(block_tmp, statement_base);
+        
+        get_right_token(status,list,command_list,command_list_t);
+
+        statement_base = free_statement_list(statement_base);  // 重新释放
+        get_pop_token(status, list, rp_t);
+        if(rp_t.type != RP_PASER){
+            printf("rp_t.type = %d\n", rp_t.type);
+            paser_error("Don't get '}'");
+        }
+        new_token.type = NON_block;
+        new_token.data_type = statement_value;
+        new_token.data.statement_value = block_tmp;
+        add_node(list, new_token);  // 压入节点[弹出3个压入1个]
+        return;
+    }
+    else{
+        back_one_token(list, lp_t);
+        return;
+    }
+}
+
 /*
 polynomial : factor
            | polynomial ADD factor
            | polynomial SUB factor
 */
 void polynomial(int *status, token_node *list){  // 多项式
-    fprintf(status_log, "[info][grammar]  mode status: polynomial\n", text);
+    fprintf(status_log, "[info][grammar]  mode status: polynomial\n");
     token left, right, symbol, new_token;
 
     left = pop_node(list);  // 先弹出一个token   检查token的类型:区分是模式1,还是模式2/3
@@ -104,7 +186,9 @@ void polynomial(int *status, token_node *list){  // 多项式
         get_pop_token(status, list, symbol);
         if(symbol.type == ADD_PASER || symbol.type == SUB_PASER){  // 模式2/3
             get_right_token(status, list, factor, right);  // 回调右边
-
+            if(right.type != NON_factor){
+                paser_error("Don't get a factor");
+            }
             new_token.type = NON_polynomial;
             new_token.data_type = statement_value;
             statement *code_tmp =  make_statement();
@@ -124,7 +208,7 @@ void polynomial(int *status, token_node *list){  // 多项式
             return polynomial(status, list);  // 回调自己
         }
         else{  // 递归跳出
-            fprintf(debug, "[info][grammar]  (polynomial)out\n");
+            fprintf(status_log, "[info][grammar]  (polynomial)out\n");
             back_one_token(list, left);
             back_again(list, symbol);
             return;
@@ -134,7 +218,10 @@ void polynomial(int *status, token_node *list){  // 多项式
         fprintf(status_log, "[info][grammar]  (polynomial)back one token to (factor)\n");
         back_one_token(list, left);
         get_base_token(status, list, factor, new_token);
-
+        if(new_token.type != NON_factor){
+            back_one_token(list, new_token);  // 往回[不匹配类型]
+            return;
+        }
         new_token.type = NON_polynomial;
         add_node(list, new_token);
         return polynomial(status, list);  // 回调自己
@@ -147,7 +234,7 @@ factor : number
        | factor DIV number
 */
 void factor(int *status, token_node *list){  // 因试分解
-    fprintf(status_log, "[info][grammar]  mode status: factor\n", text);
+    fprintf(status_log, "[info][grammar]  mode status: factor\n");
     token left, right, symbol, new_token;
 
     left = pop_node(list);  // 先弹出一个token   检查token的类型:区分是模式1,还是模式2/3
@@ -157,7 +244,9 @@ 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);  // 回调右边
-
+            if(right.type != NON_base_value){
+                paser_error("Don't get a value");
+            }
             // 逻辑操作
             new_token.type = NON_factor;
             new_token.data_type = statement_value;
@@ -188,7 +277,10 @@ void factor(int *status, token_node *list){  // 因试分解
         fprintf(status_log, "[info][grammar]  (factor)back one token to (number)\n");
         back_one_token(list, left);
         get_base_token(status, list, number, new_token);
-
+        if(new_token.type != NON_base_value){
+            back_one_token(list, new_token);  // 往回[不匹配类型]
+            return;
+        }
         new_token.type = NON_factor;
         add_node(list, new_token);
         return factor(status, list);  // 回调自己
@@ -201,11 +293,10 @@ number : INT_PASER
        | LB polynomial RB
 */
 void number(int *status, token_node *list){  // 数字归约
-    fprintf(status_log, "[info][grammar]  mode status: number\n", text);
+    fprintf(status_log, "[info][grammar]  mode status: number\n");
     token gett, new_token;
 
     gett = pop_node(list);  // 取得一个token
-
     if(gett.type == INT_PASER){  // int类型
         new_token.type = NON_base_value;
 
@@ -260,5 +351,6 @@ void number(int *status, token_node *list){  // 数字归约
 
 void paser_error(char *text){
     fprintf(status_log, "[error][grammar]  paser error : %s\n\n", text);
+    printf("[error][grammar]  paser error : %s\n\n", text);
     exit(1);
 }

+ 23 - 1
paser/token.h

@@ -3,7 +3,7 @@
 
 #include "../inter/interpreter.h"
 
-#define MAX_PASER_SIZE 10
+#define MAX_PASER_SIZE 13
 #define INT_PASER 0
 #define DOUBLE_PASER 1
 #define ENTER_PASER 2
@@ -14,6 +14,9 @@
 #define DIV_PASER 7
 #define LB_PASER 8
 #define RB_PASER 9
+#define WHILE_PASER 10
+#define LP_PASER 11
+#define RP_PASER 12
 
 // 获取并返回一个token
 #define get_pop_token(status,list,new_token) \
@@ -46,6 +49,18 @@ add_node(list, new_token); \
 back_token(list); \
 }while(0);
 
+#define get_stop_token()  \
+do{ \
+token stop; \
+get_pop_token(status, list, stop); \
+if(stop.type != ENTER_PASER && stop.type != EOF_token){ \
+    paser_error("Don't get stop token or EOF"); \
+} \
+if(stop.type == EOF_token){ \
+    back_one_token(list, stop); \
+} \
+}while(0);
+
 // 非终结符
 #define NonTerminator -1
 
@@ -61,6 +76,11 @@ typedef enum token_type
     DIV = DIV_PASER,
     LB = LB_PASER,
     RB = RB_PASER,
+    WHILE = WHILE_PASER,
+    LP = LP_PASER,
+    RP = RP_PASER,
+
+    // 特殊符号
     BAD_token = -2,
     EOF_token = -3,
 
@@ -70,6 +90,8 @@ typedef enum token_type
     NON_polynomial = -7,
     NON_command = -8,
     NON_command_list = -9,
+    NON_while = -10,
+    NON_block = -11,
 } token_type;
 
 typedef union token_data

+ 88 - 55
status.log

@@ -1,4 +1,4 @@
-[debug][grammar]  get token type : 8; data type : 0
+[debug][grammar]  get token type : 10; 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
@@ -8,22 +8,15 @@
 [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]  (command)back one token to (polynomial)
-[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)
+[info][grammar]  (command)back one token to (while)
 [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
+[info][grammar]  mode status: while_
 [debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (factor)back one token to (number)
+[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: 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]  after add a token[seek : 1, index : 1]
@@ -39,7 +32,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: 2
+[info][grammar]  (number)get int number: 1
 [info][grammar]  (number)add one token
 [debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  after add a token[seek : 1, index : 1]
@@ -49,7 +42,7 @@
 [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]  get token type : 5; 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]
@@ -77,7 +70,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: 2
+[info][grammar]  (number)get int number: 1
 [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]
@@ -105,6 +98,7 @@
 [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]
@@ -113,6 +107,51 @@
 [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]  get token type : 11; 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: block_
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[debug][grammar]  get token type : 2; 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: polynomial
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (command_list)back one token to (command)
+[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: polynomial
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (command)back <ENTER>
+[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: polynomial
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (command_list)reduce right
+[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: polynomial
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (command)back one token to (polynomial)
+[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: 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 : 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: 10
 [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]
@@ -122,16 +161,35 @@
 [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]  get token type : 4; 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]  (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]
+[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: 3
+[info][grammar]  (number)get int number: 10
 [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]
@@ -159,6 +217,7 @@
 [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]
@@ -175,7 +234,7 @@
 [info][grammar]  mode status: polynomial
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (command_list)reduce right
-[debug][grammar]  get token type : 0; data type : 0
+[debug][grammar]  get token type : 12; 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: polynomial
@@ -195,84 +254,58 @@
 [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
+[info][grammar]  (number)back 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 : 4; 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]  pop a token[seek : 0, index : 0]
+[info][grammar]  (command_list)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]
-[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: 3
-[info][grammar]  (number)add one token
+[debug][grammar]  get token type : 2; 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]
 [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 : -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]
+[info][grammar]  mode status: polynomial
 [debug][grammar]  pop a token[seek : 0, index : 0]
-[info][grammar]  (factor)out
+[info][grammar]  (command_list)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]
-[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]  (command)back <EOF>
 [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]  (command_list)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]  pop 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]