Pascal的for语句与C语言的for语句存在较大差别。标准Pascal的for仅作为计数循环使用,所以其语义限制较多。例如,标准Pascal的for语句仅允许使用简单变量作为循环变量,不允许将数组元素或记录字段作为循环变量。其次,标准Pascal的for语句的步长只能取1或一1。这些差异是Pascal初学者值得注意的。
for语句的标准文法如下:
【文法5-5】
这里,先解释一下for语句的特点:
(1)在标准for结构中有两个表达式,通常将前者称为“循环初始表达式”,而将后者称为“循环终止表达式”,这两个表达式的计算结果类型必须是有序类型。(www.daowen.com)
(2)标准Pascal规定for结构有两种形式:即for-to-do、for-downto-do。两种形式的差别就在于其步长不同,前者的步长为1,而后者的步长为一1。
(3)标准Pascal规定for语句的循环变量不得在循环体内改变其值。不过,在Neo Pascal中,并没有作这一限制。
下面,再来看看for语句的翻译方案及其与语义子程序的联系。根据for语句的语义,可以得到如表5-9所示的翻译方案:
表5-9 for语句的翻译方案
翻译方案中“_T”表示一个由编译器分配的临时变量。在翻译for语句时,同样需要注意循环的入口、出口分支的标号。例如,翻译方案中的“_Ll”就是入口分支的标号,而“_LO”就是出口分支的标号。另外,读者应该注意for语句的入口分支标号的位置,根据标准Pascal的语义,入口标号只能置于循环初始表达式计算及循环变量赋初值之后。在翻译方案中,“_L2”是continue语句的目标标号。对于continue语句而言,for语句的处理与while、repeat语句的处理是不同的。在处理for语句时,必须将continue的目标标号置于循环变量修改之前,否则与continue语句通用语义不符。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。