1

鉴于此语法:

S → S 1 S 2

S 1 → a | ε

S 2 → ab | ε

因此,我们有

FIRST(S 1 ) = { a, ε }

跟随(S 1 ) = { 一 }

这是否意味着在解析表中,我将在 S 1的行和 1 的列中有多个定义a

4

1 回答 1

1

对,那是正确的。(但是,请注意您的 FOLLOW 集是错误的;它还包含输入结束标记 $)。这里的问题是,如果解析器看到一个a,它无法判断那是否是因为它想要使用推导

S → S 1 S 2 → a S 2

或者推导

S → S 1 S 2 → S 2 → ab

要解决此问题,您可以注意您的语法仅生成字符串 { a, ab, aab }。因此,您可以为直接生成这三个字符串的语言语法构建一个 LL(1):

S → aY

Y → ε | aZ

Z → ε | b

希望这可以帮助!

于 2013-05-01T18:45:36.227 回答