在了解了高级语言的定义和一般特性之后,这里将给出一个自定义的类Pascal语言的语法规则说明,它是高级语言Pascal的缩减版本,本书称作L语言。在后续章节逐步讲解编译程序的基本原理、方法和技术的同时,我们将会把L语言编译器的实现过程贯穿其中,从而使读者理论学习与实践应用相融合,以达到充分理解和掌握编译技术的学习目的。
L语言具有一般高级语言的共同特征,同样含有字符集、数据类型、说明语句以及控制语句等多种语法成分,下面分别予以定义。
1.字符集的定义
(1)<字符集>∷=<字母>|<数字>|<单界符>
(2)<字母>∷=a|b|c|……|z|A|B|C|……|Z
(3)<数字>∷=0|1|2|3|4|5|6|7|8|9
(4)<单界符>∷=+|-|*|/|=|<|>|(|)|:|.|;|,|_|
2.单词的定义
(1)<单词>∷=<保留字>|<双界符>|<标识符>|<常数>|<单界符>
(2)<保留字>∷=begin|end|integer|char|bool|real|not|and|or|input|output|program|read|write|for|to|while|do|repeat|until|if|then|else|true|false|var|const
(3)<双界符>∷=/*|*/|<=|>=|<>|:=|"
(4)<标识符>∷=<字母>|<标识符><数字>|<标识符><字母>
(5)<常数>∷=<整数>|<布尔常数>|<字符常数>|<实数>
(6)<整数>∷=<无符号整数>|+<无符号整数>|-<无符号整数>
(7)<无符号整数>∷=<数字>|<无符号整数><数字>
(8)<布尔常数>∷=true|false
(9)<字符常数>∷=除以外的任意字符串
(10)<实数>∷=<小数>|<指数>
(11)<小数>∷=<整数>.<无符号整数>
(12)<指数>∷=<小数>E<整数>|<小数>e<整数>
3.数据类型定义
<类型>∷=integer|bool|char|real
4.表达式定义
(1)<表达式>∷=<算术表达式>|<布尔表达式>
(2)<算术表达式>∷=<算术表达式>±<项>|±<项>|<项>
(3)<项>∷=<项>*<因子>|<项>/<因子>|<因子>
(4)<因子>∷=<算术量>|(<算术表达式>)
(5)<算术量>∷=<标识符>|<整数>|<实数>
(6)<布尔表达式>∷=<布尔表达式>or<布尔项>|<布尔项>
(7)<布尔项>∷=<布尔项>and<布尔因子>|<布尔因子>
(8)<布尔因子>∷=<布尔量>|not<布尔因子>(www.xing528.com)
(9)<布尔量>∷=(<布尔表达式>)|<布尔常数>|<标识符>|(<算术表达式><关系符><算术表达式>)
(10)<关系符>∷=<|>|<>|<=|>=|=
5.语句定义
(1)<说明语句>∷=<常量说明>|<变量说明>
(2)<常量说明>∷=const<常数定义>|ε
(3)<常数定义>∷=标识符=<常数>;<常数定义>|标识符=<常数>;
(4)<变量说明>∷=var<变量定义>|ε
(5)<变量定义>∷=<标识符表>:<类型>;|<标识符表>:<类型>;<变量定义>
(6)<标识符表>∷=<标识符>,<标识符表>|<标识符>
(7)<执行语句>∷=<简单句>|<结构句>
(8)<简单句>∷=<赋值语句>
(9)<赋值语句>∷=<变量>:=<表达式>
(10)<变量>∷=<标识符>
(11)<结构句>∷=<复合句>|<if语句>|<while语句>|<for语句>|<repeat语句>
(12)<复合句>∷=begin<语句表>end
(13)<语句表>∷=<执行语句>;<语句表>|<执行语句>
(14)<if语句>∷=if<布尔表达式>then<执行语句>|if<布尔表达式>then<执行语句>else<执行语句>
(15)<while语句>∷=while<布尔表达式>do<执行语句>
(16)<repeat语句>∷=repeat<执行语句>until<布尔表达式>
(17)<for>∷=for<变量>:=<循环参数>to<循环参数>do<执行语句>
(18)<循环参数>∷=<变量>|<整数>
6.程序定义
(1)<程序>∷=program<标识符>;<分程序>
(2)<分程序>∷=<说明语句><复合句>
7.注意事项
(1)程序语句的书写采用自由格式,即一行可写多个语句,一个语句也可分多行书写。
(2)语句一般以“;”结束,但“end”前的一个语句结尾没有“;”。
(3)注释由/*和*/括起,但/*和*/必须在同一行内。
(4)注释中的字符不做规定,但注释中间不能出现*/,否则其后部分不被认为是注释。
(5)注释不能出现在一个语句的中间,只能出现在两个语句之间或程序的开头和结尾。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。