1. 梳理第二章的内容,写一篇理解与总结。
一、定义
语言是一个记号系统,包括语法和语义;文法最主要的成分是规则(产生式),我们可以通过规则进行推导生成语法树。
二、文法G四元组(VN,VT,P,S)
VN为非终结符集
VT为终结符集
P为规则(α→β)的集合
S为识别符或开始符,至少要在一条规则中作为左部出现。
三、文法的类型
文法判别小技巧
四、语法树和二义树
语法树:又称为推导树,用来描述上下文无关的句型推导。
在推导α=>β的过程中,需要遵循最左(右)推导,即都是对α中的最左(最右)非终结符进行替换。最右推导又称为规范推导。
如果一个文法存在某个句子对应两棵不同的语法树,则这个文法是二义的。且二义文法不可判定。
注意:文法二义性≠语言二义性
语言不是二义性 → 存在一个文法不是二义性的;
文法不是二义性 → 无法判定
理解与总结:文法与语言主要学习的是转化文法的规律并根据其转化过程中遵循的准则产生对应的生成树,可以用来检验该准则的唯一性。
2. 尝试写出PL/0 语言的文法。
整数n
文法:<n>::=<integer>
标识符i
文法:<i>::=<id>
表达式e
文法:<e>:=[+|-]<项>{<加减运算符><项>}
<项>::=<因子>{<乘除运算法><因子>}
<加减运算符>::=+|-
条件语句
文法:<条件语句>::=if<条件>then<语句>
赋值语句
文法:<赋值语句>::=<id>:=<表达式>
复合语句
文法:<复合语句>::=begin<语句>{;<语句>} end
函数
文法:<函数>::=function <id>() :
<上述各种组合>
程序
文法:<程序>::=<分程序>.
...