使用 parse table 跟踪输入字符串的解析
Trace of parse for input string using parse table
我们的教授从来没有抽空在 class 中教我们这个 material,现在我们有关于它的作业。 Google 似乎在引导我朝着正确的方向前进,但我想确保我做对了(当然)。
我们得到了以下语法,并要求我们根据它进行解析 table:
1. S -> ABe
2. A -> dB
3. A -> aS
4. A -> c
5. B -> AS
6. B -> b
我的解析table:
_| a | b | c | d | e | #
S|ABe| |ABe|ABe| |
A|aS | | c |dB | |
B|AS | b |AS |AS | |
现在我们得到指示:
"Using your parse table, give a trace of the parse for the input
string dbbe. Give the unused input string, stack, and output
(sequence of rule numbers) at the beginning of each iteration."
在我的互联网搜索中,我找到了这个例子:
来源:http://what-when-how.com/compiler-writing/top-down-parsing-compiler-writing-part-1/
看起来好像您遍历了语法中给出的每种可能性,直到与字符串匹配。
这是我想出的:
这个怎么样?我理解对吗?我只是通过参考语法来做到这一点;不是我的解析 table..我如何使用我的解析 table 进行跟踪?
我仍然不确定这意味着什么:
Give the unused input string, stack, and output (sequence of rule
numbers) at the beginning of each iteration
这是他正在寻找的要点(不包括输出;他不关心那个):
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
我们的教授从来没有抽空在 class 中教我们这个 material,现在我们有关于它的作业。 Google 似乎在引导我朝着正确的方向前进,但我想确保我做对了(当然)。
我们得到了以下语法,并要求我们根据它进行解析 table:
1. S -> ABe
2. A -> dB
3. A -> aS
4. A -> c
5. B -> AS
6. B -> b
我的解析table:
_| a | b | c | d | e | #
S|ABe| |ABe|ABe| |
A|aS | | c |dB | |
B|AS | b |AS |AS | |
现在我们得到指示:
"Using your parse table, give a trace of the parse for the input string dbbe. Give the unused input string, stack, and output (sequence of rule numbers) at the beginning of each iteration."
在我的互联网搜索中,我找到了这个例子:
来源:http://what-when-how.com/compiler-writing/top-down-parsing-compiler-writing-part-1/
看起来好像您遍历了语法中给出的每种可能性,直到与字符串匹配。
这是我想出的:
这个怎么样?我理解对吗?我只是通过参考语法来做到这一点;不是我的解析 table..我如何使用我的解析 table 进行跟踪?
我仍然不确定这意味着什么:
Give the unused input string, stack, and output (sequence of rule numbers) at the beginning of each iteration
这是他正在寻找的要点(不包括输出;他不关心那个):
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