使用解析表对输入字符串进行解析跟踪

时间:2016-01-25 09:39:17

标签: parsing tree grammar parse-tree

我们的教授从来没有在课堂上教我们这些材料,现在我们就可以做好功课了。谷歌似乎正在引领我走向正确的方向,但我想确保我做对了(当然)。

我们得到了以下语法,并要求根据它制作一个解析表:

1.  S -> ABe
2.  A -> dB
3.  A -> aS
4.  A -> c
5.  B -> AS
6.  B -> b

我的解析表:

_| a | b | c | d | e | #
S|ABe|   |ABe|ABe|   |
A|aS |   | c |dB |   |
B|AS | b |AS |AS |   |

现在我们得到了指示:

  

“使用您的解析表,为输入提供解析的跟踪   string dbbe。给出未使用的输入字符串,堆栈和输出   (每个迭代开始时的规则编号序列。“

在我的网络搜索中,我找到了这个例子: http://XXX_XXX_008-PC:10080/

来源:enter image description here

看起来好像你经历了语法中给出的每种可能性,直到你与字符串匹配。

以下是我提出的建议:

http://what-when-how.com/compiler-writing/top-down-parsing-compiler-writing-part-1/

这是怎么回事?我明白了吗?我只是通过参考语法来做到这一点;不是我的解析表。我怎么用我的解析表来追踪?

我仍然不确定这意味着什么:

  

给出未使用的输入字符串,堆栈和输出(规则序列   数字)在每次迭代开始时

1 个答案:

答案 0 :(得分:1)

这是他所寻找的要点(不包括输出;他不关心那个):

Stack:     Input String:
S#         dbbe#          <- S->ABe
ABe#       dbbe#          <- A->db
dbBe#      dbbe#          <- Pop off matching 'd' at beginning of stack and string
bBe#       bbe#           <- Pop off the matching 'b's...
Be#        be#            <- B->b
be#        be#            <- Pop off 'b's...
e#         e#             <- Pop off 'e's...
#          #              <- Reaching this point on both the stack and input means the input was valid