1

我们的教授从来没有在课堂上教过我们这些材料,现在我们有家庭作业。谷歌似乎在引导我朝着正确的方向前进,但我想确保我做对了(当然)。

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

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 |   |

现在我们被指示:

“使用您的解析表,给出输入字符串 dbbe 的解析跟踪。在每次迭代开始时给出未使用的输入字符串、堆栈和输出(规则编号序列)。”

在我的互联网搜索中,我找到了这个例子: 在此处输入图像描述

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

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

这是我想出的:

在此处输入图像描述

这个怎么样?我理解对了吗?我只通过引用语法来做到这一点;不是我的解析表..我将如何使用我的解析表进行跟踪?

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

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

4

1 回答 1

2

这是他正在寻找的要点(不包括输出;他不在乎那个):

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
于 2016-01-26T08:54:04.943 回答