Pascal如何在没有布尔类型的情况下有条件?

MiP*_*MiP -3 grammar pascal ebnf

根据正式的Pascal EBNF定义(pg69-75),我看到Pascal只支持3种原始类型:Integer,Real和String.

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

ric*_*ici 8

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

引用您链接到的文档:

6.4.2.2必需的简单类型

应存在以下类型:

...

C.布尔型.必需的type-identifier 布尔值应表示布尔类型.布尔型应为序数型.值应为由所需常量标识符falsetrue表示的真值的枚举,因此falsetrue的前身. (第16页)

truefalse 对应于EBNF生产:

constant = [ sign ] (constant-identifier | number) | string
Run Code Online (Sandbox Code Playgroud)

哪个可以产生:

constant = constant-identifier
Run Code Online (Sandbox Code Playgroud)

(因为[ sign ]是可选的)

A constant-identifier只是一个identifier.

也:

6.7.2.3布尔运算符

...

 Boolean-expression = expression .
Run Code Online (Sandbox Code Playgroud)

Boolean-expression必须是表示Boolean-type值的表达式. (第49页)

表6(以下页面上)定义了操作数和结果类型的比较操作符(==,<=,>=,<>,<,>in).在所有情况下,结果类型都是"布尔型".

最后:

6.8.3.4 If语句

如果if语句的Boolean-expression产生值true,则应执行if语句的语句.如果Boolean-expression产生值false,则不应执行if语句的语句,并且应执行else-part的语句(如果有的话). (第54页)