2

我正在尝试使用用于扫描仪的 Flex 和一个名为 PGen 的特殊工具来定义语法来编写一个简单的编译器。

现在,我正在尝试解决悬而未决的明确语法问题。我已经搜索过了。

这是一个带有悬空 else 问题的语法:

S → if E then S
  | if E then S else S
  | OTHER

这是解决此问题的语法(通过Berkeley 的幻灯片):

S → MIF            /* all then are matched */
  | UIF            /* some then are unmatched */
MIF → if E then MIF else MIF
    | OTHER
UIF → if E then S
    | if E then MIF else UIF

但是这个语法仍然不是 LL1 并且仍然是模棱两可的。

当我试图解决这种歧义并将其设为 LL1 时,我再次面临悬而未决的 else 问题。

谁能帮我找到一个明确的 LL1 嵌套 if 语法?

在 Stack Overflow 上的问答中读到此语法不能成为 LL1。但我无法意识到如何解决这种歧义。

4

0 回答 0