第3章 文法和语法(lly)3
编译原理教程 第3章 语法分析

记号。注意“ ”与“ →”不同,“ →”是产生式中
的定义记号。直接推导是对文法符号串αAβ中的非终结 符 A 用相应的产生式 A→δ 的右部 δ 来替换,从而得到
αδβ。我们给出推导的说明如下:
(1) 如果 α1 可直接推出 α2 , α2 可直接推出 α3 ,…, αn-1 可直
接 推 出 αn , 即 存 在 一 个 自 α1 至 αn 的 推 导 序 列 : α1α2α3…αn(n>0) ,则我们称 α1 可推导出 αn ,记
文法开始符号是一个特殊的非终结符,它代表文法所定
义的语言中我们最终感兴趣的语法实体,即语言的目 标,而其它语法实体只是构造语言目标的中间变量;
如表达式文法的语言目标是表达式,而程序语言的目
标通常为程序。 产生式(也称产生规则或规则)是定义语法实体的一种书写 规则。一个语法实体的相关规则可能不止一个。例如, 有: P→α1 P→α2 P→αn
(3)S 为一文法开始符,是一个特殊的非终结符号, 即S∈VN;
(4)ξ是产生式的非空有限集,其中每个产生式(或称规则)
是一序偶(α,β),通常写作 α→β或α::=β 读作“α是β”或“α定义为β”。在此,α为产生式的左部, 而β为产生式的右部,α、β是由终结符和非终结符组成
的符号串, α∈(VT∪VN)+ 且至少有一个非终结符,而
我们可以从E出发进行一系列的推导,如表达式i+i*i的 推导如下: EE+EE+E*E E+E*iE+i*ii+i*i
M→B∣MD /*仅两位数字(无中间位)│多于两位数字*/
A→1∣3∣5∣7∣9 B→1∣2∣3∣4∣5∣6∣7∣8∣9 D→0∣B
3.文法产生的语言
第3章 语法分析

第3章 语法分析
2.1型文法与1型语言(对应线性界限自动机, 自然语言)
文法G的每一个产生式α→β,均在0型文法 的基础上增加了字符长度上满足∣α∣≤∣β∣的 限制,则称文法G为1型文法或上下文有关文法, 记为CSG。 1型文法相应的语言称为1型语言或上下文有 关语言,它的识别系统是线性界限自动机。
计算机科学与技术学院 5
第3章 语法分析
有了规则以后,可以按照如下方式用它们 去推导或产生句子: 符号⇒称为 <句子> ⇒ <主语> <谓语> “推导”, ⇒ <代词> <谓语> 它的含义是, ⇒ 我<谓语> 使用一条规 ⇒ 我<动词> <直接宾语> 则,代替⇒ 左端的某个 ⇒我是 <直接宾语> 符号,产生⇒ ⇒我是 <名词> 右端的符号 串。 ⇒我是大学生
计算机科学与技术学院 18
第3章 语法分析
用S表示“字母数字串”类,由于T是一字 母或数字,ST也是字母数字串。 则有: S→T∣ST
其中,产生式S→T∣ST是一种左递归形 式,由它可以产生一串T。 用I表示“标识符”类,它或者是一单个 字母,或者为一字母后跟字母数字串。 则有: I→L∣LS
计算机科学与技术学院 19
计算机科学与技术学院 28
第3章 语法分析
1. 0型文法与0型语言(对应图灵机)
如果文法G的每一个产生式具有下列形式: α→β 其中,α V* VN V* , β V* , V=VT∪VN 。 0型文法又叫短语文法,记为PSG。0型文 法相应的语言称为0型语言或称递归可枚举集, 它的识别系统是图灵(Turing)机。
编译原理第3章文法和语言

第3章文法和语言第1题文法G=({A,B,S},{a,b,c},P,S)其中P为:S→Ac|aBA→abB→bc写出L(G[S])的全部元素。
答案:L(G[S])={abc}第2题文法G[N]为:N→D|NDD→0|1|2|3|4|5|6|7|8|9G[N]的语言是什么?答案:G[N]的语言是V+。
V={0,1,2,3,4,5,6,7,8,9}N=>ND=>NDD....=>NDDDD...D=>D......D或者:允许0开头的非负整数?第3题为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。
答案:G[S]:S->S+D|S-D|DD->0|1|2|3|4|5|6|7|8|9第4题已知文法G[Z]:Z→aZb|ab写出L(G[Z])的全部元素。
答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=>aaa..ab...bbbL(G[Z])={anbn|n>=1}第5题写一文法,使其语言是偶正整数的集合。
要求:(1)允许0打头;(2)不允许0打头。
答案:(1)允许0开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|0第6题已知文法G:<表达式>::=<项>|<表达式>+<项> <项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。
(5)i+(i+i)(6)i+i*i答案:(5)<表达式>=><表达式>+<项>=><表达式>+<因子>=><表达式>+(<表达式>)=><表达式>+(<表达式>+<项>)=><表达式>+(<表达式>+<因子>)=><表达式>+(<表达式>+i)=><表达式>+(<项>+i)=><表达式>+(<因子>+i)=><表达式>+(i+i)=><项>+(i+i)=><因子>+(i+i)=>i+(i+i)(6)<表达式>=><表达式>+<项>=><表达式>+<项>*<因子>=><表达式>+<项>*i=><表达式>+<因子>*i=><表达式>+i*i=><项>+i*i=><因子>+i*i=>i+i*i<表达式><表达式>+<项><因子><表达式><表达式>+<项><因子>i<项><因子>i<项><因子>i()<表达式><表达式>+<项><项>*<因子><因子>i<项><因子>ii第7题证明下述文法G[〈表达式〉]是二义的。
编译原理 第三章 语法分析

α1=>α2=>...=>αn,则称此过程为零步或多步推导,记为:
α1=*>αn,其中α1=αn的情况为零步推导。
若α1≠αn,即推导过程中至少使用一次产生式,则称此过
程为至少一步推导,记为:α1=+>αn。
■
定义3.2强调了两点: α,有α=*>α,即推导具有自反性;
若α=*>β,β=*>γ,则α=*>γ,即推导具有传递性。
5. 静态语义错误:如类型不一致、参数不匹配等
6. a,b:integer; x:array[1..10] of integer;
7. x:=a+b;
8. 动态语义错误(逻辑错误):如死循环、变量为零时作除数等
9. while (t) { ...};
a:=a/b;
精品文档
4
3.1.2 语法错误的处理原则(续1)
棵树。
(1) 根由开始符号所标记;
(2) 每个叶子由一个终结符、非终结符、或ε标记;
(3) 每个内部结点由一个非终结符标记;
(4) 若A是某内部节点的标记,且X1,X2,...,Xn是该节点
从左到右所有孩子的标记,则A→X1X2...Xn是一个产生式。若
A→ε,则标记为A的结点可以仅有一个标记为ε的孩子。
精品文档
8
3.2.1 CFG的定义与表示(续1) 例3.2 简单算术表达式的上下文无关文法可表示如下:
N = {E} T = {+,*,(,),-,id} S = E P: E → E + E (1) E → E * E (2) E →(E) (3) (G3.1) E → -E (4) E → id (5)
精品文档
【考研计算机专业课】天津大学 编译原理讲义 第三章文法和语言

L(G)={anbncn|n≥1}
2型文法也称上下文无关文法,用于描述多数 现今程序设计语言的语法结构。
例,文法G =({S},{a,b},P,S) P定义为: S→aSb|ab L(G)={anbn|n≥1}
3型文法也称正则文法,由其产生的语言叫做 正规语言,即正规集。
例,文法G =({S},{0,1},P,S) P定义为: S→0S|1S|0|1 L(G)=(0|1)*
例,文法G的产生式为: E→T|E+T T→F|T*F F→(E)|i E E+T E+F E+i3 T+i3 T*F+i3 T*i2+i3 F*i2*,i3 ,i1*i2 ,i1*i2+ i3都是句型i1*i2+i3的短语。
i1 ,i2,i3 均为直接短语。
i1是句柄。
i2+i3是否句型i1*i2+i3的短语?
+ 不是,尽管有E i2+i3,但不存在从E到i1*E的推导。
3.1.2 文法的Chomsky分类
0型文法(短语结构文法):
设文法G=(VN,VT,P,S) ,其产生式形式为: α →β α ∈V*VNV* ,β ∈V*
如果对 0 型文法分别加上以下的第 i 条限制,则我们 就得到 i 型文法。 1.G的任何产生式α →β 均满足|α |<|β |,S→ε除外;
1. 文法是描述语言的语法结构的形式规则(即 语法规则)。
文法是一个四元组: G[S]=(VN,VT,P,S) VN为非终极符集合; VT为终极符集合; VN∩VT =Ф ; 一般令V= VN∪VT ,V中的符号称为文法符号; P为产生式集合; P中的每个产生式写为: α →β ;α ∈V*VNV*, β ∈V* S为开始符号。
编译原理文法和语言

<谓语>::=<动词><直接宾语>
<动词>::=是|学习
<直接宾语>::=<代词>|<名词>
§3.2 文法和语言的形式定义
一、文法的直观理解
3.由产生式推导句子 推导方法:从一个要识别的符号开始推导,
即用相应产生式的右部来替代产生式的左部, 每次仅用一条产生式去进行推导。
例:给定一组语法规则,考察一个句子: “我是大学生”的推导过程。
§3.2 文法和语言的形式定义
三、推导和归约
1.直接推导/直接归约
如α→β是文法G的产生式,γ和δ∈V*, 若有 v,w满足:v=γαδ,w= γβδ, 其中 则称v直接推导到 w,也称w直接归约到v,记作 v w
例2:文法G[S]: S→0S1, S→01 若v=S,w=0S1, 有直接推导S0S1
§3.2 文法和语言的形式定义
四 、句型、句子和语言
3. 语言
文法G生成的语言记为L(G),它是文法G 的一切句子的集合:
L(G)={x|S * x,且x ∈VT*}
例:G[S]: S→0S1, S→01 S 0S1 00S11 0n-1S1n-1 0n1n L(G)={0n1n|n≥1}
§3.2 文法和语言的形式定义
<谓语>
<代词> 我
<动词> 是
<直接宾语> <代词>
大学生
§3.2 文法和语言的形式定义
二、文法的形式定义
其中: ① 非终结符号:出现在
定义: 文法G[S]定义为一个四元产能组生推,式出的符左号部或或符右号部串,,且
VN :G[非S]终=(结V符N,号V集T,P,S)用分②来。终表结示 符语号言:的不语出法现成在
编译原理第三章文法和语言

2020/9/28
14
字母表:是元素的非空有穷集合,把字 母表中的元素称为符号,因此字母表也 称符号集。例,{a,b,c,+,﹒}就是 含有5个元素的一个字母表。一般用∑和 V来表示
符号:是语言当中最基本的不可再分的 单位
2020/9/28
15
符号串:字母表中的符号所组成的任何 有穷序列。例,V={a,b,c}是一个字母 表,则a,b,c,aa,ab,bc,abc等等都 是V上的符号串
符号串的连接:设和是符号串,它们 的连接是把的符号写在的符号之后得 到的符号串。例,若=NPU, =1108,则 =NPU1108, =1108NPU
2020/9/28
18
符号串的方幂:设是符号串,把自身 连接n次得到符号串,即=…, 称为符号串的方幂,写作=n。
符号串集合:若集合A中的一切元素都是 某字母表上的符号串,则称A为字母表上 的符号串集合。
词法
– 单词符号
语言中具有独立意义的最基本结构
– 词法规则
词法规则规定了字母表中哪些字符串是单词符号 单词符号一般包括:常数、标识符、基本字、算
符、界限符等
– 我们用正规式和有限自动机理论来描述词法 结构和进行词法分析
语法
– 单词符号 – 语法单位
表达式、子句、语句、函数、过程、程序
2020/9/28
26
3.3 文法和语言的形式定义
前面已经对规则(或产生式)的概念进 行了非形式化的说明,我们已经对其有了 一个直观的了解。下面将对其进行形式化 说明,并在此基础上抽象地定义文法和语 言。
2020/9/28
27
定义3.1
文法G定义为四元组(VN,VT,P,S)
– VN :非终结符集 – VT :终结符集 – P:产生式(规则)集合 – S:开始符号(或识别符号)
编译原理教程-课后习题答案第三章语法分析

c. 最左推导和最右推导必定相同
d. 可能存在两个不同的最左推导,但它们对应的语法树 相同
第三章 语法分析
(3) 采用自上而下分析,必须 。
a. 消除左递归
b. 消除右递归
c. 消除回溯
d. 提取公共左因子
(4) 设a、b、c是文法的终结符,且满足优先关系 ab和bc,则 。
a. 必有ac
b. 必有ca
第三章 语法分析 表3-1 预测分析表
A A′ B B′
能否不画出语法树,而直接由定义(即在句型中)寻 找满足某个产生式的候选式这样一个最左子串(即句柄) 呢?例如,对句型aAaBcbbdcc,我们可以由左至右扫描 找到第一个子串AaB,它恰好是满足A→AaB右部的子串; 与树(a)对照,AaB的确是该句型的句柄。是否这一方法 始终正确呢?我们继续检查句型aAcbBdcc,由左至右找 到第一个子串c,这是满足A→C右部的子串,但由树(b) 可知,c不是该句型的句柄。由此可知,画出对应句型 的语法树然后寻找最左直接短语是确定句柄的好方法。
c. 必有ba
d. a~c都不一定成立
第三章 语法分析
(5) 在规范归约中,用 来刻画可归约串。
a. 直接短语
b. 句柄
c. 最左素短语 d. 素短语
(6) 若a为终结符,则A→α ·aβ 为 项目。
a. 归约
b. 移进
c. 接受
d. 待约
(7) 若项目集Ik含有A→α · ,则在状态k时,仅 当 面 临 的 输 入 符 号 a∈FOLLOW(A) 时 , 才 采 取
第三章 语法分析
因此,文法G[S]为二义文法(对句子abbb也可画出 两棵不同语法树)。
3.4 已知文法G[S]为S→SaS|ε ,试证明文法G[S] 为二义文法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、文法 文法:仅仅涉及语言句子的结构描述。 以自然语言为例(用 EBNF 描述一种语言:)
〈句子〉::= 〈主语〉〈谓语〉 〈主语〉::= 〈代词〉|〈名词〉 〈代词〉::= 你 | 我 | 他 〈名词〉::= 王明 | 大学生 | 工人 | 英语 〈谓语〉::= 〈动词〉〈直接宾语〉 〈动词〉::= 是 | 学习 〈直接宾语〉::= 〈代词〉|〈名词〉
思考: 文法的句型与句子的关系? 文法G能得到哪些句子?
19
5、语言的定义:由文法G生成的语言记为L(G),它是 文法G的一切句子的集合: 即L(G)={x|S * x,其 中S为文法的开始符号,且x ∈VT*} 例:G: S→0S1, S→01 L(G)={0n1n|n≥1}
思考:文法G1[A]:A→0R A→01 R→A1的语言?
0S10011 (v=0S1,w=0011,使用规则S→01,γ =0,δ =1) S 0S1 (v=S,w=0S1,使用规则S→0S1,γ =ε,δ = ε ) 0S100S11 (v=0S1,w=00S11,使用规则?)
16
例 文法G=(VN,VT,P,S) VN ={标识符,字母,数字} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符> 思考:指出下面直接推导所使用的规则 ? ① <标识符> <标识符><字母> ② <标识符> <字母> <数字> <字母> <字母> <数字> ③ abc <数字> abc5
15
或写成: G[S]:S→0S1 S→01
3、推导的定义 直接推导“” α →β 是文法G产生式,γ ,δ ∈V*,若v,w满足: v=γ α δ , w = γ βδ , 则说:v(应用规则α →β )直接产生w 或说:w是v的直接推导 或说:w直接归约到v 记作 v w
例:G: S→0S1, S→01 的直接推导:
补讲:终端符与非终端符 思考:“我是大学生”是否是该语言的句子?
4
语法规则
(文法)
① ② ③ ④ ⑤ ⑥ ⑦
〈句子〉::= 〈主语〉〈谓语〉 〈主语〉::= 〈代词〉|〈名词〉 〈代词〉::= 你 | 我 | 他 〈名词〉::= 王明 | 大学生 | 工人 | 英语 〈谓语〉::= 〈动词〉〈直接宾语〉 〈动词〉::= 是 | 学习 〈直接宾语〉::= 〈代词〉|〈名词〉
18
+ 即 0S1 00001111
4、文法的句型、句子的定义 句型:设G[S]是一文法,如果符号串x是从识别符号 * 推导出来的,即 S x,则称x是文法G[S]的句型。 句子:x仅由终结符号组成(即S * x,且x∈VT*), 则称x是G[S]的句子。 例:G: S→0S1, S→01 S 0S1 00S11 000S11100001111
17
+ 和 *
若存在v =w0 w1 ... wn=w, (n>0) 则称v推导出(产生)w(推导长度为n), 或称w归约到v. 记作 v + w + * 若有v w,或v=w,则记为v w
例:G: S→0S1, S→01
0S1 00S11 000S111 00001111 * 也记作 0S1 00001111 + 和 * 的区别? 思考:
〈句子〉 〈主语〉〈谓语〉 〈代词〉〈谓语〉 我〈谓语〉 我〈动词〉〈直接宾语〉 我是〈直接宾语〉 我是〈名词〉 我是大学生 思考: ① “”的含义? ② “我大学生是” 与“大学生是王明”是句
5
3、程序设计语言与文法关系: 一个程序设计语言是一个记号系统,如自然语言一样, 由语句组成,完整的定义应包含语法与语义两个方面。 语法规定了语句形成的规则,(哪些符号序列是合法的, 而与其含义无关);语义不仅要限定语法规则(静态), 而且要表明程序要做什么(动态)。 文法是阐述语法规则的工具,是形式语言理论基础。
注意: ① 符号串中的符号排列是有顺序的. ② 可以用字母表示符号串,如 x=aaca
8
2)串的头与尾 如果 z = xy 是一符号串,那么: x 是 z 的头,y 是 z 的尾; 如果 x 非空,那么 y 是固有尾;如果 y 非空, 那么 x 是固有头。 例:设 z = abc, 那么 z 的头是: ε ,a ,ab , abc(固有头呢?) z 的尾是: ε ,c ,bc , abc(固有尾呢?) 3)串的几种表示法(x,z是符号串,t是符号): z = x… x 是符号串 z 的头 z = …x… x 在符号串z 中某处出现 z = t… 符号 t 是 符号串 z 的第一个符号
例3.1 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号
13
例3.2 文法G=(VN,VT,P,S) VN ={标识符,字母,数字} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符> 思考: C语言的标识符(变量命名)如何用文法定义?
6、文法的等价:若L(G1)=L(G2),则称文法G1 和G2是等价的。 课堂作业:P44 2
20
Байду номын сангаас
3.4 文法的类型
Chomsky将文法分四类(对产生式施加不同限制 ): 1. 0型文法(短语文法):对任一产生式α →β , 都有α ∈(VN∪VT)+且至少含一个非终结符, β ∈(VN∪VT)* 2. 1型文法(上下文有关文法):对任一产生式 α →β ,都有|β |≥|α |, 仅仅 A→ε 除外。 3. 2型文法(上下文无关文法) :对任一产生式 α →β ,都有α ∈VN , β ∈(VN∪VT)* 4. 3型文法(正规文法):任一产生式α →β 的形 式都为
2
研究程序设计语言及研究的三个方面: 每个程序构成的规律(语法 Syntax) 每个程序的含义(语义 Semantics) 每个程序和使用者的关系(语用 Pragmatics)
语言三个方面定义: 语法 -- 表示构成语言句子的各个记号之间的组合规 律 语义 -- 表示按照各种表示方法所表示的各个记号的 特定含义。(各个记号和记号所表示的对象之间的 关系) 语用 --表示在各个记号所出现的行为中,它们的来 源、使用和影响。
9
3、符号串的运算 1)符号串的长度:符号串中符号的个数.符号串s的 长度记为|s|。 ε 的长度为0 2)连接:符号串x、y的连接,是把y的符号写在x的符 号之后得到的符号串xy 例: x=ST,y=abu 则 xy=STabu |x|=2,|y|=3,|xy|=5 ε x = xε = x 3)方幂:符号串x自身连接n次得到的符号串 xx…xx(n个x)定义为 x n x0=ε, x1=x, x2=xx, x3=xxx x=AB, 则 x0=ε, x1=AB, x2=ABAB, x3=ABABAB 对于 n>0, x n = xxn-1 = xn-1x 4)符号串集合:若集合A中一切元素都是某字母表 上的符号串,则称A为字母表上的符号串集合。
10
5)两个符号串集合A和B的乘积定义为 AB =xy|xA且yB 若 集合A=a,b B = c,d 则 AB =ac,ad,bc,bd {ε}A = A {ε}= A (εx = xε= x) 6)使用 * 表示上的所有有穷长的串(包括ε)的集合。 Σ*称为Σ的闭包。 7)从*中除去ε得到的集合记为+ 。 Σ+称为Σ的正闭包。 Σ* = Σ 0 ∪ Σ1 ∪ Σ2 … ∪ Σn … Σ+ = Σ 1 ∪ Σ2 … ∪ Σn … Σ* = Σ 0 ∪ Σ+ Σ+ = ΣΣ* = Σ* Σ Σ+ = Σ* -{ε} 例:设Σ ={a,b},则 Σ *={ε ,a,b,aa,ab,ba,bb,aaa,aab,…} Σ +={a,b,aa,ab,ba,bb,aaa,aab,…}
为语言的语法描述寻求工具 工具要对程序设计语言给出精确无二义的语法描述。 (严谨、简洁、易读) 形式工具--形式语言抽象地定义为一个数学系统。“形 式”是指这样的事实:语言的所有规则只以什麽符号串 能出现的方式来陈述。
6
3.2 符号和符号串
1、符号 字母表:元素的非空有穷集合。(符号集)
符号:字母表中的元素。
第 3章
文法和语言
考查重点 1. 基本概念 : 文法;推导/归约;句型;句子; 语言;文法的二义性;文法递归;语法树; 短语;直接短语;句柄;正规文法;上下文 无关文法。 2. 基本方法 构造句型的推导/归约,规范推导/规范归约 画出指定句型的语法树 判别文法的二义性 给出句型的短语、直接短语、句柄。 文法与语言的互求(较简单)
11
3.3 文法和语言的形式定义
1、规则(重写规则、产生式或生成式): 是形如α →β 或α ∷=β 的(α ,β )有序对,其 中α 是某字母表V的正闭包V+中的一个符号,β 是 V*中的一个符号。(α ∈V+,β ∈V* why?) α 称为规则的左部(或生成式的左部)。 β 称为规则的右部(或生成式的右部)。 例: