编译原理讲义(第二章:文法与语言)南京大学计算机系赵建华文法与语言•文法被用来精确而无歧义地描述语言的句子的构成方式
•文法描述语言的时候不考虑语言的含义
字母表定义:字母表是有穷非空集合
•字母表包含了语言中所允许出现的一切符号
符号串•定义:符号串是由字母表中的符号所组成的有穷序列
•一个语言的句子总是它的字母表的符号串
这个符号串的组成必须是按照文法规则组合而成的
•语法分析的一个重要任务就是:判断一个符号串的组成是否满足某个文法的规定,并且分析出是如何按照规则组成的
关于符号串的概念和操作•运算:–联结(并置):x=123,y=45那么xy=12345–方幂:x的n次方幂即将n个x联结
•子符号串:v是xvy的子符号串
v非空•头,尾:x是xy的头,y是xy的尾
符号串集合•定义:若集合A中的一切元素都是同一个字母表上的集合,那么A被称为该字母表上的符号串集合
•在本课程中,语言被认为是句子的集合
)所以,一个语言就是对应于它的字母表上的一个符号串集合
符号串集合的运算•乘积:AB={xy|xA且yB}•方幂:A的n次方幂就是将n个A相乘
•字母表的闭包与正闭包:–字母表A的闭包是A上的所有符号串(包括空字符串)的集合
–字母表A的正闭包是A上的所有的非空符号串的集合
文法和语言的定义(重写规则)•重写规则:一个重写规则是一个有序对(U,u),通常写作U::=u
其中U是一个符号,称为左部;u是一个符号串称为右部
有时也说这个规则是U的一个规则
•重写规则总是基于某个字汇表的
U和u中的符号必须都在这个字汇表内
这个字汇表中有些符号不能作为左部
•存在更加复杂的规则,但是这样的规则足够描述程序设计语言的文法
文法和语言的定义(重写规则)•例如:–〈标识符〉::=〈字母〉–〈标识符〉::=〈字母〉|〈标识符〉〈字母〉•第二个规则实际使用了BNF的表示方