首页
学习
活动
专区
圈层
工具
发布

BNF歧义
EN

Stack Overflow用户
提问于 2020-05-26 07:00:16
回答 1查看 137关注 0票数 0

“编译构造”一书给出了Algol 60最初定义的一个例子。它们含有模棱两可之处。

至少找到两种不同的结构

代码语言:javascript
复制
IF a THEN b ELSE c=d

有一部分的定义

代码语言:javascript
复制
unconditional Statement = basicStatement | forStatement | compoundStatement | ... .
ifStatement = "IF" BooleanExpression "THEN" unconditionalStatement.
conditionalStatement = ifStatement | ifStatement "ELSE" statement.

statement = unconditionalStatement | conditionalStatement. 

因此,既然:

代码语言:javascript
复制
A "else" B, and A => "if" a "then" b

我们得到:

代码语言:javascript
复制
if a then b else B

看起来,Bc=d

含糊不清在哪里?如何找到两种不同的结构?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-26 15:25:28

IF a THEN b ELSE c=d不是一种声明。它是某种形式的表达式;它是什么类型取决于b的类型。(这个语句将是IF a THEN b ELSE c:=d.回忆,在Algol中,:=是赋值,=是相等比较,==是语法错误。)

如果b是布尔表达式,那么它是一个布尔条件表达式,其替代方法是bc=d;在本例中,cd必须具有算术类型,因为语法不允许将布尔值与=进行比较。

但是,如果b是算术的,那么它是比较IF a THEN b ELSE cd (同样,cd必须有算术类型)。

至少,这是我对语法的解读。它不完全是模棱两可的,但BNF不足以解析解析,因为该语言不是上下文无关的。选择正确的解析需要b的先前声明,这只能通过上下文敏感的语法来实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62016350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档