根据正式的Pascal EBNF定义(第69-75页),我看到Pascal只支持3种基本类型:Integer、Real和String。
在 C 中,任何与
0
不同的值都可以解释为 true
文字。 Pascal 不像 C 那样工作。当 Pascal 没有布尔类型时如何处理条件表达式?
Pascal 标准明确定义了布尔类型的语法和语义。
引用您链接到的文档:
6.4.2.2 所需的简单类型
应存在以下类型:
…
c. 布尔类型。所需的类型标识符Boolean应表示布尔类型。布尔类型应为序数类型。这些值应是由所需常量标识符false和true表示的真值枚举,使得false是true的前身。 (第16页)
值 true 和 false 对应于 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页)
变量声明= 标识符列表“:”类型。
类型定义为:
类型= 简单型|结构化类型|指针类型 |类型标识符 .
并且
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.
尝试自己运行此代码,您会发现实际上有一个布尔类型,并且它的工作方式与您所期望的完全一样。