Kaynağa Gözat

paser基本对接

SongZihuan 5 yıl önce
ebeveyn
işleme
8a6094a9fd
7 değiştirilmiş dosya ile 922 ekleme ve 41 silme
  1. 589 9
      debug.log
  2. BIN
      gwarf
  3. 18 8
      paser/lexical.c
  4. 1 1
      paser/paser.c
  5. 92 15
      paser/syntax.c
  6. 3 0
      paser/token.h
  7. 219 8
      status.log

+ 589 - 9
debug.log

@@ -1,5 +1,504 @@
 [info][lexical]  set_start
 [info][lexical]  set_start
 
 
+[info][lexical]  p = '('
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -3
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = '2'
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -2
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = '(' len = 1 from 8
+
+[debug]token type = 8
+
+[info][lexical]  set_start
+
+[info][lexical]  p = '2'
+
+[debug][lexical]  check list : paser_list[0]->status = 1
+[debug][lexical]  check list : paser_list[1]->status = 1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 8
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = ' '
+
+[debug][lexical]  check list : paser_list[0]->status = -2
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = '2' len = 1 from 0
+
+[debug]token type = 0
+
+[info][lexical]  set_start
+
+[info][lexical]  p = ' '
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -3
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = '+'
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -2
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = ' ' len = 1 from 3
+
+[info][lexical]  set_start
+
+[info][lexical]  p = '+'
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -3
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = ' '
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -2
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = '+' len = 1 from 4
+
+[debug]token type = 4
+
+[info][lexical]  set_start
+
+[info][lexical]  p = ' '
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -3
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = '2'
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -2
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = ' ' len = 1 from 3
+
+[info][lexical]  set_start
+
+[info][lexical]  p = '2'
+
+[debug][lexical]  check list : paser_list[0]->status = 1
+[debug][lexical]  check list : paser_list[1]->status = 1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 8
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = ')'
+
+[debug][lexical]  check list : paser_list[0]->status = -2
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = '2' len = 1 from 0
+
+[debug]token type = 0
+
+[info][lexical]  set_start
+
+[info][lexical]  p = ')'
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -3
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = ' '
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -2
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = ')' len = 1 from 9
+
+[debug]token type = 9
+
+[info][grammar]  (polynomial)out
+[info][lexical]  set_start
+
+[info][lexical]  p = ' '
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -3
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = '*'
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -2
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = ' ' len = 1 from 3
+
+[info][lexical]  set_start
+
+[info][lexical]  p = '*'
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[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 = -3
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = ' '
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -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[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 6
+
+[debug]token type = 6
+
+[info][lexical]  set_start
+
+[info][lexical]  p = ' '
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -3
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = '3'
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -2
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = ' ' len = 1 from 3
+
+[info][lexical]  set_start
+
+[info][lexical]  p = '3'
+
+[debug][lexical]  check list : paser_list[0]->status = 1
+[debug][lexical]  check list : paser_list[1]->status = 1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 8
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = <Enter>
+
+[debug][lexical]  check list : paser_list[0]->status = -2
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = '3' len = 1 from 0
+
+[debug]token type = 0
+
+[info][lexical]  set_start
+
+[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 = -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 : end_count = 0
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = '2'
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -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 : 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 2
+
+[debug]token type = 2
+
+[info][grammar]  (polynomial)out
+[info][lexical]  set_start
+
 [info][lexical]  p = '2'
 [info][lexical]  p = '2'
 
 
 [debug][lexical]  check list : paser_list[0]->status = 1
 [debug][lexical]  check list : paser_list[0]->status = 1
@@ -18,7 +517,7 @@
 
 
 [debug][lexical]  continue to paser
 [debug][lexical]  continue to paser
 
 
-[info][lexical]  p = '*'
+[info][lexical]  p = ' '
 
 
 [debug][lexical]  check list : paser_list[0]->status = -2
 [debug][lexical]  check list : paser_list[0]->status = -2
 [debug][lexical]  check list : paser_list[1]->status = -1
 [debug][lexical]  check list : paser_list[1]->status = -1
@@ -42,15 +541,97 @@
 
 
 [info][lexical]  set_start
 [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[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = '+'
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -2
+[debug][lexical]  check list : paser_list[4]->status = -1
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = ' ' len = 1 from 3
+
+[info][lexical]  set_start
+
+[info][lexical]  p = '+'
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -3
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 0
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[debug][lexical]  continue to paser
+
+[info][lexical]  p = ' '
 
 
 [debug][lexical]  check list : paser_list[0]->status = -1
 [debug][lexical]  check list : paser_list[0]->status = -1
 [debug][lexical]  check list : paser_list[1]->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 = -1
 [debug][lexical]  check list : paser_list[3]->status = -1
 [debug][lexical]  check list : paser_list[3]->status = -1
+[debug][lexical]  check list : paser_list[4]->status = -2
+[debug][lexical]  check list : paser_list[5]->status = -1
+[debug][lexical]  check list : paser_list[6]->status = -1
+[debug][lexical]  check list : paser_list[7]->status = -1
+[debug][lexical]  check list : paser_list[8]->status = -1
+[debug][lexical]  check list : paser_list[9]->status = -1
+[debug][lexical]  check list : end_count = 1
+[debug][lexical]  check list : not_count = 9
+[debug][lexical]  check list : count all = 10
+
+[info][lexical]  back_p
+
+[info][lexical]  get value = '+' len = 1 from 4
+
+[debug]token type = 4
+
+[info][lexical]  set_start
+
+[info][lexical]  p = ' '
+
+[debug][lexical]  check list : paser_list[0]->status = -1
+[debug][lexical]  check list : paser_list[1]->status = -1
+[debug][lexical]  check list : paser_list[2]->status = -1
+[debug][lexical]  check list : paser_list[3]->status = -3
 [debug][lexical]  check list : paser_list[4]->status = -1
 [debug][lexical]  check list : paser_list[4]->status = -1
 [debug][lexical]  check list : paser_list[5]->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[7]->status = -1
 [debug][lexical]  check list : paser_list[8]->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[9]->status = -1
@@ -65,10 +646,10 @@
 [debug][lexical]  check list : paser_list[0]->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[1]->status = -1
 [debug][lexical]  check list : paser_list[2]->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[3]->status = -2
 [debug][lexical]  check list : paser_list[4]->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 = -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[7]->status = -1
 [debug][lexical]  check list : paser_list[8]->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[9]->status = -1
@@ -78,9 +659,7 @@
 
 
 [info][lexical]  back_p
 [info][lexical]  back_p
 
 
-[info][lexical]  get value = '*' len = 1 from 6
-
-[debug]token type = 6
+[info][lexical]  get value = ' ' len = 1 from 3
 
 
 [info][lexical]  set_start
 [info][lexical]  set_start
 
 
@@ -165,7 +744,8 @@
 [info][lexical]  get value = '
 [info][lexical]  get value = '
 ' len = 1 from 2
 ' len = 1 from 2
 
 
-[debug]token type = 2
+[debug]token type = <EOF>
 
 
 [info][grammar]  (polynomial)out
 [info][grammar]  (polynomial)out
+[info][grammar]  (command_list)out
 [info][paser]  stop run
 [info][paser]  stop run


+ 18 - 8
paser/lexical.c

@@ -7,6 +7,7 @@ void match_double(char, word_paser *);
 void match_text(char, word_paser *, char *);
 void match_text(char, word_paser *, char *);
 
 
 int is_in(int);
 int is_in(int);
+extern void paser_error(char *);
 
 
 token get_token(int *paser_status){
 token get_token(int *paser_status){
     token return_token;
     token return_token;
@@ -16,12 +17,21 @@ token get_token(int *paser_status){
         *paser_status = paser(&index);  // 解析
         *paser_status = paser(&index);  // 解析
     }while(is_in(index));
     }while(is_in(index));
 
 
-    return_token.type = index;
-    return_token.data_type = text;
-    return_token.data.text = malloc(strlen(global_paser[index]->text));
-    strcpy(return_token.data.text, global_paser[index]->text);
-    fprintf(debug, "[debug]token type = %d\n\n", index);
-
+    if(!(*paser_status)){  // 匹配到eof
+        return_token.type = EOF_token;
+        return_token.data_type = empty;
+        fprintf(debug, "[debug]token type = <EOF>\n\n");
+    }
+    else if(index == -2){
+        paser_error("lexical token error");
+    }
+    else{
+        return_token.type = index;
+        return_token.data_type = text;
+        return_token.data.text = malloc(strlen(global_paser[index]->text));
+        strcpy(return_token.data.text, global_paser[index]->text);
+        fprintf(debug, "[debug]token type = %d\n\n", index);
+    }
     return return_token;
     return return_token;
 }
 }
 
 
@@ -38,8 +48,8 @@ int is_in(int element){  // 检查某个值是否在数组中
 
 
 int paser(int *index){
 int paser(int *index){
     char p;
     char p;
-    int status = 1;
-    int is_eof = 0;
+    int status = 1;  // 是否还有继续
+    int is_eof = 0;  // 考虑用status取代is_eof
     while(1){
     while(1){
         p = read_p();
         p = read_p();
         if(p == EOF){  // 遇到EOF[先不break]
         if(p == EOF){  // 遇到EOF[先不break]

+ 1 - 1
paser/paser.c

@@ -17,7 +17,7 @@ int parser(char *file_address){
     atexit(*do_exit);
     atexit(*do_exit);
     setup(file_address);
     setup(file_address);
     safe_get_token(&paser_status, global_token_node);
     safe_get_token(&paser_status, global_token_node);
-    polynomial(&paser_status, global_token_node);
+    command_list(&paser_status, global_token_node);
     return 0;
     return 0;
 }
 }
 
 

+ 92 - 15
paser/syntax.c

@@ -5,9 +5,90 @@
 void factor(int *status, token_node *list);
 void factor(int *status, token_node *list);
 void number(int *status, token_node *list);
 void number(int *status, token_node *list);
 void polynomial(int *status, token_node *list);
 void polynomial(int *status, token_node *list);
+void command(int *status, token_node *list);
 
 
 void paser_error(char *text);
 void paser_error(char *text);
 
 
+/*
+command_list : command
+             | command_list command
+*/
+void command_list(int *status, token_node *list){  // 多项式
+    fprintf(status_log, "[info][grammar]  mode status: polynomial\n", text);
+    token left, right, new_token;
+
+    left = pop_node(list);  // 先弹出一个token   检查token的类型:区分是模式1,还是模式2/3
+    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;
+            add_node(list, new_token);  // 压入节点[弹出3个压入1个]
+            return command_list(status, list);  // 回调自己
+        }
+        else{  // 递归跳出[EOF_token]
+            fprintf(debug, "[info][grammar]  (command_list)out\n");
+            back_one_token(list, left);  // 理论上不back也可以
+            return;
+        }
+    }
+    else if(left.type == EOF_token){  // 递归跳出的条件
+        fprintf(debug, "[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);
+
+        new_token.type = NON_command_list;
+        add_node(list, new_token);
+        return command_list(status, list);  // 回调自己
+    }
+}
+
+/*
+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;
+
+    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){
+        fprintf(status_log, "[info][grammar]  (command)back <ENTER>\n");
+    }
+    else if(left.type == EOF_token){
+        fprintf(status_log, "[info][grammar]  (command)back <EOF>\n");
+        back_one_token(list, left);
+        goto return_back;
+    }
+    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);
+        }
+
+        statement *tmp = find_statement_list(0, statement_base);
+        append_statement(tmp, new_token.data.statement_value);
+    }
+    add_node(list, new_token);
+
+    return_back: 
+    return;  // 回调自己
+}
+
 /*
 /*
 polynomial : factor
 polynomial : factor
            | polynomial ADD factor
            | polynomial ADD factor
@@ -19,7 +100,7 @@ void polynomial(int *status, token_node *list){  // 多项式
 
 
     left = pop_node(list);  // 先弹出一个token   检查token的类型:区分是模式1,还是模式2/3
     left = pop_node(list);  // 先弹出一个token   检查token的类型:区分是模式1,还是模式2/3
     if(left.type == NON_polynomial){  // 模式2/3
     if(left.type == NON_polynomial){  // 模式2/3
-        fprintf(status_log, "[info][grammar]  (factor)reduce right\n");
+        fprintf(status_log, "[info][grammar]  (polynomial)reduce right\n");
         get_pop_token(status, list, symbol);
         get_pop_token(status, list, symbol);
         if(symbol.type == ADD_PASER || symbol.type == SUB_PASER){  // 模式2/3
         if(symbol.type == ADD_PASER || symbol.type == SUB_PASER){  // 模式2/3
             get_right_token(status, list, factor, right);  // 回调右边
             get_right_token(status, list, factor, right);  // 回调右边
@@ -44,10 +125,6 @@ void polynomial(int *status, token_node *list){  // 多项式
         }
         }
         else{  // 递归跳出
         else{  // 递归跳出
             fprintf(debug, "[info][grammar]  (polynomial)out\n");
             fprintf(debug, "[info][grammar]  (polynomial)out\n");
-
-            statement *tmp = find_statement_list(0, statement_base);
-            append_statement(tmp, left.data.statement_value);
-
             back_one_token(list, left);
             back_one_token(list, left);
             back_again(list, symbol);
             back_again(list, symbol);
             return;
             return;
@@ -161,16 +238,16 @@ void number(int *status, token_node *list){  // 数字归约
 
 
         fprintf(status_log, "[info][grammar]  (number)get double number: %f\n", new_token.data.d_number);
         fprintf(status_log, "[info][grammar]  (number)get double number: %f\n", new_token.data.d_number);
     }
     }
-    // else if(gett.type == LB_PASER){  // 模式3
-    //     fprintf(status_log, "[info][grammar]  (number)get LB\n");
-    //     get_right_token(status, list, polynomial, new_token);
-    //     new_token.type = NON_dou;
-    //     token rb;
-    //     get_pop_token(status, list ,rb);
-    //     if(rb.type != RB_PASER){  // 匹配失败
-    //         paser_error("Don't get ')'");
-    //     }
-    // }
+    else if(gett.type == LB_PASER){  // 模式3
+        fprintf(status_log, "[info][grammar]  (number)get LB\n");
+        get_right_token(status, list, polynomial, new_token);
+        new_token.type = NON_base_value;
+        token rb;
+        get_pop_token(status, list ,rb);
+        if(rb.type != RB_PASER){  // 匹配失败
+            paser_error("Don't get ')'");
+        }
+    }
     else{  // 不是期望值
     else{  // 不是期望值
         fprintf(status_log, "[info][grammar]  (number)back one token\n");
         fprintf(status_log, "[info][grammar]  (number)back one token\n");
         back_one_token(list, gett);
         back_one_token(list, gett);

+ 3 - 0
paser/token.h

@@ -68,6 +68,8 @@ typedef enum token_type
     NON_base_value = -4,
     NON_base_value = -4,
     NON_factor = -6,
     NON_factor = -6,
     NON_polynomial = -7,
     NON_polynomial = -7,
+    NON_command = -8,
+    NON_command_list = -9,
 } token_type;
 } token_type;
 
 
 typedef union token_data
 typedef union token_data
@@ -91,6 +93,7 @@ typedef struct token
         statement_value,
         statement_value,
         if_list_base,
         if_list_base,
         parameter_list,
         parameter_list,
+        empty,
     } data_type;  // data的数据类型
     } data_type;  // data的数据类型
     token_data data;
     token_data data;
 } token;
 } token;

+ 219 - 8
status.log

@@ -1,8 +1,34 @@
-[debug][grammar]  get token type : 0; data type : 0
+[debug][grammar]  get token type : 8; data type : 0
 [debug][grammar]  add a token[seek : 0, index : 0, size : 1]
 [debug][grammar]  add a token[seek : 0, index : 0, size : 1]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [info][grammar]  mode status: polynomial
 [info][grammar]  mode status: polynomial
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [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 : 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]  (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)
+[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[info][grammar]  mode status: factor
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (factor)back one token to (number)
+[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[info][grammar]  mode status: number
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (number)get LB
+[debug][grammar]  get token type : 0; data type : 0
+[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
+[debug][grammar]  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]  (polynomial)back one token to (factor)
 [debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  after add a token[seek : 1, index : 1]
@@ -23,33 +49,106 @@
 [info][grammar]  mode status: factor
 [info][grammar]  mode status: factor
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (factor)reduce right
 [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 : 2]
 [debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [debug][grammar]  pop a token[seek : 0, index : 0]
-[debug][grammar]  get token type : 0; data type : 0
+[info][grammar]  (factor)out
 [debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  add a token[seek : 0, index : 0, size : 2]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  after add a token[seek : 1, index : 1]
+[debug][grammar]  add a token[seek : 1, index : 1, size : 2]
+[debug][grammar]  after add a token[seek : 2, index : 2]
+[debug][grammar]  back a token[seek : 2, index : 2]
+[debug][grammar]  pop a token[seek : 0, index : 1]
+[debug][grammar]  add a token[seek : 0, index : 1, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 2]
+[info][grammar]  mode status: polynomial
+[debug][grammar]  pop a token[seek : 0, index : 1]
+[info][grammar]  (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: 2
+[info][grammar]  (number)add one token
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[info][grammar]  mode status: factor
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (factor)reduce right
+[debug][grammar]  get token type : 9; data type : 0
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (factor)out
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[debug][grammar]  add a token[seek : 1, index : 1, size : 3]
+[debug][grammar]  after add a token[seek : 2, index : 2]
+[debug][grammar]  back a token[seek : 2, index : 2]
+[debug][grammar]  pop a token[seek : 0, index : 1]
+[debug][grammar]  add a token[seek : 0, index : 1, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 2]
+[info][grammar]  mode status: polynomial
+[debug][grammar]  pop a token[seek : 0, index : 1]
+[info][grammar]  (polynomial)reduce right
+[debug][grammar]  get token seek += 1 : 0, index : 1
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[debug][grammar]  add a token[seek : 1, index : 1, size : 3]
+[debug][grammar]  after add a token[seek : 2, index : 2]
+[debug][grammar]  back a token[seek : 2, index : 2]
+[debug][grammar]  pop a token[seek : 0, index : 1]
+[debug][grammar]  get token seek += 1 : 0, index : 1
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (number)add one token
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[info][grammar]  mode status: factor
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[info][grammar]  (factor)reduce right
+[debug][grammar]  get token type : 6; data type : 0
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[debug][grammar]  get token type : 0; data type : 0
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 1]
 [info][grammar]  mode status: number
 [info][grammar]  mode status: number
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (number)get int number: 3
 [info][grammar]  (number)get int number: 3
 [info][grammar]  (number)add one token
 [info][grammar]  (number)add one token
-[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [debug][grammar]  pop a token[seek : 0, index : 0]
-[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [info][grammar]  mode status: factor
 [info][grammar]  mode status: factor
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (factor)reduce right
 [info][grammar]  (factor)reduce right
 [debug][grammar]  get token type : 2; data type : 0
 [debug][grammar]  get token type : 2; data type : 0
-[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (factor)out
 [info][grammar]  (factor)out
-[debug][grammar]  add a token[seek : 0, index : 0, size : 2]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
 [debug][grammar]  after add a token[seek : 1, index : 1]
 [debug][grammar]  after add a token[seek : 1, index : 1]
-[debug][grammar]  add a token[seek : 1, index : 1, size : 2]
+[debug][grammar]  add a token[seek : 1, index : 1, size : 3]
 [debug][grammar]  after add a token[seek : 2, index : 2]
 [debug][grammar]  after add a token[seek : 2, index : 2]
 [debug][grammar]  back 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]  pop a token[seek : 0, index : 1]
@@ -57,7 +156,109 @@
 [debug][grammar]  after add a token[seek : 1, index : 2]
 [debug][grammar]  after add a token[seek : 1, index : 2]
 [info][grammar]  mode status: polynomial
 [info][grammar]  mode status: polynomial
 [debug][grammar]  pop a token[seek : 0, index : 1]
 [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]  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]
+[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: 2
+[info][grammar]  (number)add one token
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[debug][grammar]  pop a token[seek : 0, index : 0]
+[debug][grammar]  add a token[seek : 0, index : 0, size : 3]
+[debug][grammar]  after add a token[seek : 1, index : 1]
+[info][grammar]  mode status: factor
+[debug][grammar]  pop a token[seek : 0, index : 0]
 [info][grammar]  (factor)reduce right
 [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]  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]  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]
+[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]  get token seek += 1 : 0, index : 1
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [debug][grammar]  pop a token[seek : 0, index : 0]
 [debug][grammar]  add a token[seek : 0, index : 0, size : 3]
 [debug][grammar]  add a token[seek : 0, index : 0, size : 3]
@@ -65,3 +266,13 @@
 [debug][grammar]  add a token[seek : 1, index : 1, size : 3]
 [debug][grammar]  add a token[seek : 1, index : 1, size : 3]
 [debug][grammar]  after add a token[seek : 2, index : 2]
 [debug][grammar]  after add a token[seek : 2, index : 2]
 [debug][grammar]  back 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]
+[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]