编译器构造重叠第一组

Compiler Construction Overlapping First Sets

我正在尝试创建一个编译器并计算了第一组,但 运行 遇到了以下问题。

LHS -> Var
LHS -> Field

其中 Var 和 Field 是具有重叠第一组的非终结符,因此使语法不明确。我想知道有没有办法解决这个问题

“不明确”意味着有两个或更多可能的解析。你的语法可能不是这种情况。重叠的 FIRST 集表示 top-down 解析器无法猜测正确的解析。这并不意味着没有。 bottom-up 解析器可能就可以正常工作。

如果您坚持too-down解析,您将需要修改语法。有标准的启发式方法,但不能保证一定有效,而且可能根本不可能。通常,您会发现 left-factoring 就足够了。您可能还需要 消除 left-recursion。您可以在教科书(如果有的话)、维基百科和整个互联网上找到这两种算法。 (当然,并非所有您在 Internet 上找到的算法都是正确的,bug-free 和 well-explained。)