这是一个模棱两可的语法吗?

时间:2013-11-13 15:19:05

标签: compiler-construction grammar context-free-grammar ambiguity

我试图找出以下语法是否含糊不清或明确:

  

stmt - > IF expr THEN stmt | matchedStmt

     

matchedStmt - > IF expr THEN matchedStmt ELSE stmt |其他

它实现了if-then-else结构。

exprother被视为终端符号,因为我们在此问题中并不关心它们。

我一直在尝试找到一个包含多个解析树的字符串,但我不能。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

这个语法含糊不清,虽然它朝着正确的方向前进:)

这是一个含糊不清的地方:

IF c1 THEN IF c2 THEN s2 ELSE IF c3 THEN s3 ELSE s4

由于IF c2 THEN s2 ELSE IF c3 THEN s3可以简化为:

IF c2 THEN matchedStmt ELSE stmt

matchedStmt。因此ELSE s4属于IF c3还是IF c1是不明确的。


您需要matchedStmt完全匹配ELSE的两面,如下所示:

stmt -> matchedStmt | unmatchedStmt

matchedStmt -> IF expr THEN matchedStmt ELSE matchedStmt
            |  other

unmatchedStmt -> IF expr THEN stmt
              |  IF expr THEN matchedStmt ELSE unmatchedStmt