第二章
2.1词法语法分析基本概念
字母表的乘积:笛卡尔积
字母表的n次幂:长度为n的符号串构成的集合(注意空串ε)
字母表的正闭包:长度整数的符号串构成的集合
字母表的克林闭包:正闭包+空==任意符号串(长度可为0)构成的闭包
串是字母表中符号的一个有穷序列
串上的运算
串的连接:xy(空串是连接运算的单位元,对任何串都有εs=sε=s)
x = yz y是x的前缀,z是x的后缀
串的幂运算:将n个串连接起来
2.2文法的定义
语法成分:<>,反之为语言基本符号
语言的基本符号:未用尖括号括起来的
文法的形式化定义:
G = (VT,VN,P,S)
VT:终结符集合(token),文法所定义的语言的基本符号
VN:非终结符(语法变量),用来表示语法成分的符号
VT∩VN = Φ VT与VN不相交
VT∪VN:文法符号集
第一个框列为字母表中排在前面的 第二个列字母表中排在后面的
P:产生式集合:产生式描述了将终结符和非终结符组成串的方法。
产生式的一般形式:a->b
- a定义为b, a∈(VT∪VN)+,且至少包含VN中一个元素,称为左部;
- b∈(VT∪VN)*,称为右部
S:开始符号,最大的文法成分
不引起歧义前提下可以只写产生式
产生式的简写:
2.3语言的定义
推导:(生成语言)自上向下
直接推导:用产生式的右部直接替换产生式的左部
总结:
名称 | 符号 | 含义 |
直接推导 | => | 1步 |
推导 | =>+ | 大于等于1步 |
广义推导 | =>* | 大于等于0步 |
归约:(识别语言)就是反向,自底向上
思考:
有了文法,如何判定某一词串是否为该语言的句子?
两种方法:
-
- 句子的推导(从生成语言的角度)
- 句子的归约(从识别语言的角度)
句型和句子
句型:属于文法符号集的闭包的符号串。
句子:仅包含终结符号的句型。
语言:
语言上的运算
2.4文法的分类
Chomsky文法分类体系
- 0型文法
- 1型文法
- 上下文有关文法不包含空产生式。
- 2型文法
- 3型文法
四种文法之间的关系:
2.5CFG的分析树
基本定义:
分析树是推导的图形化表示。
二义性文法:一个文法可以为某个句子生成多棵分析树。
满足,肯定没有二义性。
不满足,也未必就是有二义性d