@ZHANGQIANYI2020
编译原理-医学信息工程专业
一、 文法的直观概念
1. 文法的概念
文法是以有穷的集合刻画无穷的集合的一个工具。
2. EBNF举例
<句子>::=<主语><谓语>
<主语>::=<代词>|<名词>
<代词>::=你|我|他
<名词>::=小明|大学生
<谓语>::=<动词><直接宾语>
<动词>::=是|学习
<直接宾语>::=<代词><名词>
“我是大学生”
<句子> => <主语><谓语>
=> <代词><谓语>
=> 我<谓语>
=> 我<动词><直接宾语>
=> 我是<名词>
=> 我是大学生
二、符号和符号串
1. 字母表
字母表是元素的非空集合,字母表中的元素称为符号,因此字母表也称符号集。
2. 符号串
由字母表中的符号组成的任何有穷序列称为符号串。
例如:
字母表∑={0,1}的符号串有0,1,00,11,000,111······
字母表A{a,b,c}的符号串有a,b,c,ab,aaca······
如果某符号串有m个符号,则称其长度为m,表示为|x|=m。
允许空符号串,即不包含任何符号的符号串,用ε表示,其长度为0,即|ε|=0.
3. 符号串的运算
(1)符号串的头尾,固有头和固有尾。
例如:
设z=abc,那么z的头是ε,a,ab,abc,固有头是ε,a,ab;z的尾是ε,c,bc,abc,固有尾是ε,c,bc。
(2)符号串的连接
例如:
设x=ST,y=abu,则他们的连接xy=STabu。
(3)符号串的方幂
例如:
设x=AB,则xº=ε,x¹=AB,x²=ABAB,x³=ABABAB。
(4)符号串的集合
例如:
若A={a,b},B={c,d},则集合AB={ac,ad,bc,bd}。
例如:
字母表Σ={a,b}
闭包Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…}
正闭包Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}
三、文法和语言的形式定义
1. 规则(重写规则、产生式或生成式)
是形如α→β或α∷=β的(α,β)有序对,且α∈V+,β∈V*。
α称为规则的左部(或生成式的左部)。
β称为规则的右部(或生成式的右部)。
例如:
A->a读作“A定义为a”,也就是把它说成是一条关于A的规则(产生式)。
2. 文法的定义
(1)定义1
文法G定义为四元组(VN,VT,P,S)
VN :非终结符集
VT :终结符集
P:产生式(规则)集合
S:识别符或开始符号
VN∩VT= ∅, S∈VN
V=VN∪VT,V称为文法G的文法符号集合。
例如:
有文法G=(VN,VT,P,S)VN={S}, VT={0,1},P={S→0S1, S→01 },S为开始符号
例如:
有文法G=(VN,VT,P,S)
VN={标识符,字母,数字}
VT={a,b,c,…x,y,z,0,1,…,9}
P={<标识符>→<字母>
<标识符>→<标识