我们的教授从来没有在课堂上教我们这些材料,现在我们就可以做好功课了。谷歌似乎正在引领我走向正确的方向,但我想确保我做对了(当然)。
我们得到了以下语法,并要求根据它制作一个解析表:
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/
看起来好像你经历了语法中给出的每种可能性,直到你与字符串匹配。
以下是我提出的建议:
http://what-when-how.com/compiler-writing/top-down-parsing-compiler-writing-part-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