编译原理(第二版)第3章 文法和语法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 从*中除去ε得到的集合记为+ 。 Σ+称为Σ的正 闭包。
Σ* = Σ0 ∪ Σ1 ∪ Σ2 … ∪ Σn …
Σ+ = Σ1 ∪ Σ2 … ∪ Σn … Σ* = Σ0 ∪ Σ+ Σ+ = ΣΣ* = Σ*Σ Σ+ = Σ* -{ε} 例:设Σ={0,1},则 Σ* ={ε, 0, 1, 00, 01, 10, 11, 000, 001, 010,…} 例:设Σ ={a,b},则 Σ *={ε ,a,b,aa,ab,ba,bb,aaa,aab,…} Σ +={a,b,aa,ab,ba,bb,aaa,aab,…}
10<循环语句> ::= <while语句> | <for 语句>
11<while语句> ::= while (<条件>)<语句块> 12<for 语句> ::= for (<赋值语句> ; <条件> ; <算术 表达式>)<语句块> 13<条件> ::= <算术表达式><关系运算符><算术表达式>
A→SbA
A→SS S→a A→ba
14<关系运算符> ::= >|>=|<|<=|==|!=
15<算术表达式> ::= <算术表达式>+<项>|<算术表达式> - <项>|<项>
3、推导的定义
1)直接推导“” α→β是文法G的产生式,γ,δ∈V*,若将α→β作用于 v=γαδ得到 w=γβδ,则记作 vw,读作v(应用规则 α→β)直接产生w(w是v的直接推导或w直接归约到v)
例如: 汉语的字母表中包括汉字、数字及标点符号等。 C语言的字母表是由字母、数字、若干专用符号及IF、 FOR之类的保留字组成。
• 符号串:由字母表中的符号组成的任何有穷序列 称为该字母表上的符号串。
形式定义: 1.空符号串ε(没有符号的符号串)是上的符号串 2.若x是上的符号串,a是的元素,则xa是上的符号 串 3.y是上的符号串,当且仅当它可以由1和2导出。
四、文法和语言的形式定义
1、文法的形式定义 1)规则(重写规则、产生式或生成式):是 一个有序对(α,β)。记为α→β或 α∷=β,其中α∈V+,β∈V* 。 • α称为规则的左部(或生成式的左部)。 • β称为规则的右部(或生成式的右部)。
2)文法G[S]:文法为四元组(VN,VT,P,S)
VN :非终结符集 VT :终结符集 P:产生式(规则)集合
例如: Σ={a,b} ε,a,b,aa,ab,aabba,…,都是上的符号串 注意: 符号串中的符号排列是有顺序的。 常用大写字母表示符号串,如 x=aaca
如果 z = xy 是一符号串,那么: 1、x 是 z 的头,y 是 z 的尾;
2、如果 x 非空,那么 y 是固有尾;如果 y 非空,那么 x 是固有头。 例:
第3章
•
文法和语言
教学要求:本章是编译原理课程的理论基 础,要求理解文法、语言、规范推导、规 范归约和短语、简单短语、句柄的基本概 念;掌握语言的求解方法、文法的二义性 的判断方法及句型的分析方法。
•
教学重点:上下文无关文法,语言定义
一、语言
• 语言是由句子组成的集合,是由一组记号 所构成的集合。 汉语--所有符合汉语语法的句子的全体 英语--所有符合英语语法的句子的全体 程序设计语言--所有该语言的程序的全体
•
Mini_C 介 绍
Mini_C语言是在C语言的基础上定义的一种语言(C语言的子 集),它的文法定义如下:
1 <程序> ::= MAIN()<语句块> 2 <语句块> ::= {<变量声明列表><语句串>} | {语句串} 3 <变量声明列表> ::= <变量声明列表><变量声明>|<变量声明> 4 <变量声明> ::= <变量类型><ID>;
S:开始符号(识别符号)
VN、VT 和 P 是非空有穷集。S 至少在一条规则 中作为左部出现。 VN∩VT=φ, S∈VN V=VN∪VT,称为文法G的字母表(字汇表)
• 例3.1 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号
}的文法。
分析:n≧1,所以必须用递归规则。a和b的 个数 一样多,但c的个数不同,所以将生成 含 a,b的部分与生成含e的部分分开,A生成 ab,B生成e. G[Z]:Z→AB
A→aAb|ab
B→eB|ε
4)文法的等价
• 若L(G1)=L(G2),则称文法G1和G2是等价的。
如文法G1[A]:A→0R 与 G2[S]:S→0S1 等价
• 例:2型(上下文无关)文法 文法G[S]: S→aB|bA Leabharlann Baidu→a|aS|bAA B→b|bS|aBB 文法G[S]: S→0A|1B|0 A→0A|1B|0S B→1B|1|0
• 例:定义标识符的3型(正规)文法 文法G[I]: I → lT I→ l T → lT T → dT T→ l T→ d
〈主语〉〈谓语〉 〈代词〉〈谓语〉 我〈谓语〉 我〈动词〉〈直接宾语〉 我是〈直接宾语〉 我是〈名词〉 我是大学生
三、符号和符号串
任何一种语言可看成是某个符号集上定义的,按 一定规则构成的一切基本符号串组成的集合。
• 字母表:元素的非空有穷集合。(符号集) • 符号:字母表中的元素。
2)句子
* –x仅由终结符号组成(即S x,且x∈VT*),
则称x是G[S]的句子。 例:G: S→0S1, S→01 S 0S1 00S11 000S111 00001111
3)语言
由文法G产生的所有句子组成的集合叫做文法 G所成描述的语言,记为L(G)。 L(G)={x|S * x,其中S为文法的开始符号,且x ∈VT*}
5、符号串集合
若集合A中一切元素都是某字母表上的符号串, 则称A为字母表上的符号串集合。 • 两个符号串集合A和B的乘积定义为 AB=xy|xA且yB
若集合A=a,b B=c,d
则 AB=ac,ad,bc,bd {ε}A=A{ε}=A(∵εx=xε=x) • 使用*表示上的所有有穷长的串(包括ε)的集合。 Σ*称为Σ的闭包。
例:G:S→0S1,S→01
直接推导: 0S10011(v=0S1,w=0011,使用规则S→01,γ=0,δ=1) S0S1(v=S,w=0S1,使用规则S→0S1,γ=ε,δ=ε)
0S100S11(v=0S1,w=00S11,使用规则S→0S1,γ=0,δ=1)
2)长度为n的推导(有限次推导) 若存在v =w0 w1 ... wn=w, (n>0), 则称v推导出w(或w归约到v). 记作 v + w。 3)若有v + w,或v=w, 则记为v * w
六
上下文无关文法及其语法树
• 上下文无关文法有足够的能力描述现今程序设计语言的 语法结构。
– 算术表达式 – 语句
• • • • 赋值语句 条件语句 循环语句 ……
1、语法树与推导
• 用于描述上下文无关文法的句型推导的直观方法
例: G[S]: S→aAS
句型aabbaa的语法树(推导树)
S a S a A b b S A a a
A→01
R→A1
S→01
五 文法的类型
(1)0型文法(短语文法):对任一产生式α →β ,都有 α ∈(VN∪VT)+, β ∈(VN∪VT)* (2)1型文法(上下文有关文法): 对任一产生式α →β ,都有|β |≥|α |, 仅仅 S→ε 除 外。即α 1Aα 2→α 1β α 2(A在VN中,其他在V*中, β ≠ε ) (3)2型文法(上下文无关文法):
设 z = abc, 那么 z 的头是: ε ,a ,ab , abc(除 abc 外都是固有头) z 的尾是: ε ,c ,bc , abc(除 abc 外都是固有尾)
4、符号串的运算
符号串的长度:符号串中符号的个数.符号串s的长度 记为|s|。 ε的长度为0 符号串的连接:符号串x、y的连接,是把y的符号写在 x的符号之后得到的符号串xy 例 x=ST,y=abu 则 xy=STabu
|x|=2,|y|=3,|xy|=5
εx = xε= x
方幂:符号串x自身连接n次得到的符号串 xx…xx(n个x)定义为 xn x0=ε , x1=x, x2=xx, x3=xxx x=AB, 则 x0=ε , x1=AB, x2=ABAB, x3=ABABAB 对于 n>0, xn = xxn-1 = xn-1x
5 <变量类型> ::= int | char | real
6 <语句串> ::= <语句>;|<语句串><语句>; 7 <语句> ::= <赋值语句> | <条件语句> | <循环语句>
8 <赋值语句> ::= <ID>=<算术表达式>
9 <条件语句> ::= if (<条件>)<语句块> | if (<条件>) <语句块>else<语句块>
• 习惯上只将产生式写出。并有如下约定: –第一条产生式的左部是开始符号 –用尖括号括起的是非终结符,否则为终结 符。或者大写字母表示非终结符,小写字 母表示终结符 –G可写成G[S],其中S是开始符号
• 例3.1 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号 • 可写成: G:S→0S1 S→01 • 或写成: G[S]:S→0S1 S→01
例3.2 文法G=(VN,VT,P,S) VN ={标识符,字母,数字} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9} S=<标识符>
对任一产生式α →β ,都有α ∈VN , β ∈(VN∪VT)*
即A→β (A在VN中,β 在V*中,) (4)3型文法(正规文法):任一产生式α →β 的形式都 为A→aB或A→a,其中A∈VN ,B∈VN ,a∈VT
• 例:1型(上下文有关)文法
文法G[S]: S→aSBE S→aBE EB→BE aB→ab bB→bb bE→be eE→ee
二、文法
一种语言描述工具,用来定义句子的结构, 用有限的规则把语言的全部句子描述出来, 是以有穷的集合刻划无穷的集合的工具。
〈句子〉::=〈主语〉〈谓语〉 〈主语〉::=〈代词〉|〈名词〉 〈代词〉::= 你 | 我 | 他 〈名词〉::= 王明 | 大学生 | 工人 | 英语 〈谓语〉::=〈动词〉〈直接宾语〉
例:G: S→0S1, S→01 0S100S11000S11100001111 * 也记作 0S1 00001111 + 即 0S1 00001111
4、文法的句型、句子的定义 1)句型
– 设G[S]是一文法,如果符号串x是从识别符号推 导出来的,即S * x,则称x是文法G[S]的句型。
例:G: S→0S1, S→01
L(G)={0n1n|n≥1} 注:产生式中含有递归式,产生的句子是无穷的
• 例3.3
文法G[S]: (1)S→dAB (2)A→aA (3)A→a (4)B→Bb (5)B→ε
L(G)=? G生成的每个串都在L(G)中 L(G)中的每个串确实能被G生成
例:构造生成语言L={
〈动词〉::= 是 | 学习
〈直接宾语〉::=〈代词〉|〈名词〉
“我是大学生”是否是该语言的句子?
〈句子〉::=〈主语〉〈谓语〉 〈主语〉::=〈代词〉|〈名词〉 〈代词〉::= 你 | 我 | 他 〈名词〉::= 王明 | 大学生 | 工人 | 英语 〈谓语〉::=〈动词〉〈直接宾语〉 〈动词〉::= 是 | 学习 〈直接宾语〉::=〈代词〉|〈名词〉 〈句子〉
文法和语言
– 0型文法产生的语言称为0型语言 – 1型文法或上下文有关文法( CSG )产生的语言称为1型语言或上 下文有关语言(CSL) – 2型文法或上下文无关文法( CFG )产生的语言称为2型语言或上 下文无关语言( CFL ) – 3型文法或正则(正规)文法( RG )产生的语言称为3型语言或 正则(正规)语言( RL )