Pascal 没有布尔类型怎么可能有条件呢?

问题描述 投票:0回答:2

根据正式的Pascal EBNF定义(第69-75页),我看到Pascal只支持3种基本类型:Integer、Real和String。

在 C 中,任何与

0
不同的值都可以解释为
true
文字。 Pascal 不像 C 那样工作。当 Pascal 没有布尔类型时如何处理条件表达式?

grammar pascal ebnf
2个回答
8
投票

Pascal 标准明确定义了布尔类型的语法和语义。

引用您链接到的文档:

6.4.2.2 所需的简单类型

应存在以下类型:

c. 布尔类型。所需的类型标识符Boolean应表示布尔类型。布尔类型应为序数类型。这些值应是由所需常量标识符falsetrue表示的真值枚举,使得falsetrue的前身。 (第16页)

truefalse 对应于 EBNF 产生式:

constant = [ sign ] (constant-identifier | number) | string

可以产生:

constant = constant-identifier

(因为

[ sign ]
是可选的)

A

constant-identifier
只是一个
identifier

还有:

6.7.2.3 布尔运算符

 Boolean-expression = expression .

布尔表达式是表示布尔类型值的表达式。 (第49页)

表 6(下页)定义了比较运算符(

==
<=
>=
<>
<
>
in
)的操作数和结果类型。在所有情况下,结果类型都是“布尔类型”。

最后:

6.8.3.4 If 语句

如果 if 语句的布尔表达式产生值 true,则应执行 if 语句的语句。如果布尔表达式的结果为“假”,则不执行 if 语句,而执行 else 部分的语句(如果有)。 (第54页)


4
投票

变量声明= 标识符列表“:”类型。

类型定义为:

类型= 简单型|结构化类型|指针类型 |类型标识符 .

并且
type-identifier

只是

identifier
可以是
boolean
,但 EBNF 不会告诉你这一点。您必须查看标准的其余部分。 ISO 7185 定义了 Pascal 的方言,相关章节为 6.4.2.2:

这些值应是由所需常量标识符
false

true
...
 表示的真值枚举

在 Pascal 中,你最终可能会得到这样的代码:

program BooleanDemo(output); var myBool : boolean; n : integer; begin n := 5; myBool := n > 4; if myBool then writeln('myBool is true') else writeln('myBool is false') end.

尝试自己运行此代码,您会发现实际上有一个布尔类型,并且它的工作方式与您所期望的完全一样。

© www.soinside.com 2019 - 2024. All rights reserved.