【发布时间】:2020-05-26 07:00:16
【问题描述】:
“编译器构造”一书给出了 Algol 60 原始定义的示例。它们包含歧义。
找到至少两个不同的结构
IF a THEN b ELSE c=d
有一部分定义
unconditional Statement = basicStatement | forStatement | compoundStatement | ... .
ifStatement = "IF" BooleanExpression "THEN" unconditionalStatement.
conditionalStatement = ifStatement | ifStatement "ELSE" statement.
statement = unconditionalStatement | conditionalStatement.
那么,既然:
A "else" B, and A => "if" a "then" b
我们得到:
if a then b else B
看来,B 是 c=d
歧义在哪里? 如何找到两个不同的结构?
【问题讨论】:
-
您确定引用正确吗?和你一样,我没有看到这里的歧义,但是这个问题让我想起了dangling else 问题。
-
我也是,也许是答案;那么如何在 BNF 中添加括号呢?
-
这里没有“悬空其他”问题。
else存在且必须存在,因为条件表达式需要“else”子句;因此,条件 表达式——与条件语句相反——不会表现出“悬空的 else”歧义。 -
非常感谢您的帮助