在 LL(1) 解析 table 中有多个条目的真正含义是什么?
What is the real meaning of having multiple entries in the LL(1) parse table?
对于语法:
S->aABb
A->a/epsilon
B->b/epsilon
此语法不是 LL(1)
但此语法是无歧义的,因此即使在 table 中有多个条目后,此语法也是无歧义的。那么,当语法是 Unambiguous 时,在 table 中有多个条目的直观含义是什么。
当解析器访问列M[B, b]
时,它有2个选择B->b
和B-> epsilon
。这种性质不是不确定的,但这种语法在现实中是明确的,所以如何解决这种冲突,尽管我们在解析 table 中有多个条目,但语法仍然是明确的。
这意味着语法不是 LL(1),您要么需要使用另一种解析算法,要么在可能的情况下将语法重写为 LL(1)(在这种情况下,这只意味着切换 b
和 S
规则中的 B
。
对于语法:
S->aABb
A->a/epsilon
B->b/epsilon
此语法不是 LL(1)
但此语法是无歧义的,因此即使在 table 中有多个条目后,此语法也是无歧义的。那么,当语法是 Unambiguous 时,在 table 中有多个条目的直观含义是什么。
当解析器访问列M[B, b]
时,它有2个选择B->b
和B-> epsilon
。这种性质不是不确定的,但这种语法在现实中是明确的,所以如何解决这种冲突,尽管我们在解析 table 中有多个条目,但语法仍然是明确的。
这意味着语法不是 LL(1),您要么需要使用另一种解析算法,要么在可能的情况下将语法重写为 LL(1)(在这种情况下,这只意味着切换 b
和 S
规则中的 B
。