编译原理清华大学第3章 文法和语言
清华版编译原理课后答案——第三章参考答案
第三章1、L(G[S])={ abc }2、L(G[N])={ n位整数或空字符串| n>0 }3、G[E]:E—>E+D | E-D | DD—>0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 94、L(G[Z])={ a n b n | n>0 }5、(1) 考虑不包括“0”的情况G[S]:S—>0S | ABC | 2 | 4| 6 | 8A—>1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B—>AB | 0B | εC—>0 | 2 | 4 | 6 | 8考虑包括“0”的情况:G[S]:S—>AB | CB—>AB | CA—>0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9C—>0 | 2 | 4 | 6 | 8(2)方法1:G[S]:S—> ABC | 2 | 4 | 6 | 8A—>1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B—>AB | 0B | εC—>0 | 2 | 4 | 6 | 8方法2:G[S]:S—>AB | CB—> AB | 0B | C | 0A—> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9C—>2 | 4 | 6 | 86、设<表达式>为E,<项>为T,<因子>为F,注:推导过程不能省略,以下均为最左推导(1) E => T => F => i(4) E => E+T => T+T => T*F+T => F*F+T => i*F+T => i*i+T => i*i+F => i*i+i(6) E => E+T => T+T => F+T => i+T => i+T*F => i+F*F => i+i*F => i+i*I7、<表达式><表达式>*<表达式><表达式>+<表达式>i i i<表达式><表达式>+<表达式>i <表达式>*<表达式>i i8、是有二义性的,因为句子abc 有两棵语法树(或称有两个最左推导或有两个最右推导)最左推导1:S => Ac => abc最左推导2:S => aB => abc9、(1)(2) 该文法描述了变量a 和运算符+、*组成的逆波兰表达式10、(1) 该文法描述了各种成对圆括号的语法结构(2) 是有二义性的,因为该文法的句子()()存在两种不同的最左推导:最左推导1:S => S(S)S => (S)S => ()S => ()S(S)S => ()(S)S => ()()S => ()()最左推导2:S => S(S)S => S(S)S(S)S => (S)S(S)S => ()S(S)S => ()(S)S => ()()S => ()()11、(1) 因为从文法的开始符E 出发可推导出E+T*F ,推导过程如下:E => E+T => E+T*F ,所以E+T*F 是句型。
编译原理教程 第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.文法产生的语言
清华大学编译原理第二版课后习答案
Lw.《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第2题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
盛威网()专业的计算机学习网站1《编译原理》课后习题答案第一章目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
编译原理答案(前三章)
编译原理答案(前三章)第 1 章引论第 1 题解释下列术语:答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第 2 题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。
编译原理(清华)第三章文法和语言
例 文法G: S→0S1,S→01 有直接推导: 0S1 00S11 ( S→0S1 ) 00S11 000S111 ( S→0S1 ) 000S111 00001111 ( S→01 ) S 0S1 ( S→0S1 )
推导和归约 若存在v=w0 w1 ... wn=w ,(n>0) 则称v推导出w,或w归约到v,记为v=+>w 若有v =+>w,或v=w,则记作v=*>w
2. 符号串 – 定义:由字母表中的符号组成的任何有穷序列 – 例: 0,00,10是字母表∑={0‚1}上的符号串 a,ab,aaca是Α={a‚b,c}上的符号串 – 在符号串中,符号是有顺序的,顺序不同,代 表不同的符号串,如:ab和ba不同 – 不含任何符号的符号串称为空串,用ε表示 注意:{ε}并不等于空集合{ } – 符号串长度: 符号串中含有符号的个数 如: |abc|=3 | ε|=0
3.3 文法和语言的形式定义
1.文法的定义 2.文法的简化表示法 3.推导与归约 4.句型、句子、语言的定义 5.文法的等价
1.文法的定义
产生式(规则) 产生式是一个有序对(α,β),通常写作 α→β(或α::=β ) 文法定义: 文法G(Grammar)定义为四元组(VN,VT,P,S) VN (Nonternimal):非终结符集 VT (Terminal):终结符集 P (Production): 产生式(规则)集合 S: 开始符号或识别符号
第三章
文法和语言
学习目标: 掌握:自上而下与自下而上的分析方法 理解:文法的形式定义,推导,归约,句 型,句子,语言,上下文无关文法,规范 句型,语法树,短语,直接短语,句柄 了解:文法的类型,文法使用中的限制, 文法的二义性
编译原理(第二版)第3章 文法和语法
〈动词〉::= 是 | 学习
〈直接宾语〉::=〈代词〉|〈名词〉
“我是大学生”是否是该语言的句子?
〈句子〉::=〈主语〉〈谓语〉 〈主语〉::=〈代词〉|〈名词〉 〈代词〉::= 你 | 我 | 他 〈名词〉::= 王明 | 大学生 | 工人 | 英语 〈谓语〉::=〈动词〉〈直接宾语〉 〈动词〉::= 是 | 学习 〈直接宾语〉::=〈代词〉|〈名词〉 〈句子〉
}的文法。
分析: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 等价
设 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
例如: 汉语的字母表中包括汉字、数字及标点符号等。 C语言的字母表是由字母、数字、若干专用符号及IF、 FOR之类的保留字组成。
编译原理课程设计之第三章上下文无关文法及分析
14
无关文法及分析
1. 上下文无关文法(即2型文法)的形式定义:
上下文无关文法是一个四元组(VT , VN , P , S):
① ②
终非结终符 结集 符合 集合VTVN(与VT产的不生左相式部交)
产生式 的右部
③ 产生式或文法规则A→α形成的集合P,
其中A∈VN,α∈(VT∪VN)* 4) 开始符号S,其中S∈VN
25
无关文法及分析
3.2 上下文无关文法的形式定义
1. 上下文无关文法(即2型文法)的形式定义 2. chomsky文法的分类 3. 推导和规约的定义 4. 句型和句子的定义 5. 最左和最右推导 6. 文法定义的语言 7. 递归产生式和递归文法 8. 文法和语言
mcy
编译原理课程设计之第三章上下文
mcy
编译原理课程设计之第三章上下文
1
无关文法及分析
第三章 上下文无关文法及分析
本章的目的是为语言的语法 描述寻求形式工具,要求该 工具对程序设计语言给出精 确无二义的语法描述。
mcy
编译原理课程设计之第三章上下文
2
无关文法及分析
第三章 上下文无关文法及分析
✓3.1 语法分析过程 ▪ 3.2 上下文无关文法的形式定义
下面的2型文法描述了包含加法、减法和乘法的简 单整型算术表达式的语法结构。
文法G[exp]:
exp → exp op exp exp →(exp) exp → number
34-3 是符合该 语法结构的简单 整型算术表达式 (句子)吗?
op → + | - | *
mcy
编译原理课程设计之第三章上下文
令G是一个如上所定义的文法,则G=(VT,VN,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:开始符号(或识别符号)
《编译原理》(清华大学出版社第二版)课后习题答案
PL/0编译程序所产生的目标代码是一种假想栈式计算机的汇编语言,请说明该汇编语言中下列指令各自的功能和所完成的操作。
(1)INT 0 A
(2)OPR 0 0
(3)CAL L A
答案:
PL/0编译程序所产生的目标代码中有3条非常重要的特殊指令,这3条指令在code中的位置和功能以及所完成的操作说明如下:
或者:允许0开头的非负整数?
第3题
为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。
答案:
G[S]:
S->S+D|S-D|D
D->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...bbb
N→D|1|3|5|7|9
D→2|4|6|8
F→N|0
G→D|0
第6题
已知文法G:
<表达式>::=<项>|<表达式>+<项>
<项>::=<因子>|<项>*<因子>
<因子>::=(<表达式>)|i
试给出下述表达式的推导及语法树。
(5)i+(i+i)
(6)i+i*i
答案:
(5) <表达式>
=><表达式>+<项>
n n
L(G[Z])={a b |n>=1}
第5题写一文法,使其语言是偶正整数的集合。要求:
编译原理(清华大学出版社)--文法和语言--上下文无关文法及其语法树
编译原理(清华大学出版社)--文法和语言--上下文无关文法及其语法树例2.6 文法G=({E},{ ,*,i,(,)},P,E),其中P为:•E→i•E→E E•E→E * E•E→(E)这里非终结符E表示一类算术表达式,i 表示程序设计语言中的变量,该文法定义了(描述了)由变量、、*、(和)组成的算术表达式的语法结构即:变量是算术表达式,若E1和E2是算术表达式,则 E1 E2、E1 * E2和(E1)也是算术表达式•描述一种简单赋值语句的产生式为:(赋值语句)→i := E•描述条件语句的文法片段为•<条件语句>→if<条件>then<语句>|•if<条件>then<语句>else<语句>语法树(推导树)给定文法G=(V N,V T,P,S),对于G的任何句型都能构造与之关联的语法树(推导树),这棵树满足以下4个条件•每个结点都有一个标记,此标记是V的一个符号•根的标记是S•若一个结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在V N中•如果结点n的直接子孙从左到右的次序是结点n1,n2,...,n k,其标记分别为A1,A2,...,A k,那么A→A1A2...A k 一定是P中的一个产生式例2.7 G=({S, A}, {a, b}, P, S),其中P为1.S→aAS2.A→SbA3.A→SS4.S→a5.A→ba•上图是G的一棵推导树,标记S的顶点结点是树根,它的直接子孙为a、A和S三个结点,a在A和S的左边,A在S的左边,S→aAS 是一个产生式•同样A结点至少有一个除它自己以外的子孙(A的直接子孙为S,b和A),A肯定是非终结符•该图的推导树是例2.7的文法G的句型 aabbaa 的推导过程,从左到右读出推导树的叶子标记,aabbaa•推导过程可以多种的,•S=>aAS=>aAa=>aSbAa=>aSbbaa=>aabbaa (最右推导)•S=>aAS=>aSbAS=>aabAS=>aabbaS=>aabbaa (最左推导)•S=>aAS=>aSbAS=>aSbAa=>aabAa=>aabbaa如果在推导的任何一步α=>β,其中α、β是句型都是对α中的最左(最右)非终结符进行替换,称这种推导为最左(最右推导)最右推导,被称为规范推导,由规范推导所得的句型称为右句型或规范句型但一个句型不一定只对应唯一的一棵语法树,例2.6的文法G就有两个不同的最左推导推导1:E => E E => E*E E => i*E E => i*i E => i*i i 推导2:E => E*E => i*E => i*E E => i*i E => i*i i如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义的•来源:。
编译原理 第三章 文法和语言
8
3.2 符号和符号串
四. 符号串集合(语言)的运算
设L和M是两个符号串集合,则 1.合并:L∪M={s|s∈L or s∈M} 2.连接:LM={ st|s∈L and t∈M} 3.方幂: L0={ε}, L1=L, L2=LL, ..., Ln=Ln-1L 4. 语言L的闭包,记作L*, L*=∪Li(i>=0) =L0∪L1∪L2∪L3 ∪… 5.语言L的正闭包,记作L+(L+=L L*) L+=∪Li(i >=1) =L1∪L2∪L3∪L4∪…
16
推导的定义
例: <程序><分程序>. (<程序> → <分程序>. ) <分程序>. <变量说明部分> <语句>. (<分程序> → <变量说明部分> <语句>) VAR<标识符>;BEGIN READ(<标识符>)END. VAR A;BEGIN READ(<标识符> ) END. (<标识符> →A) VAR A;BEGIN READ(<标识符> ) END. VAR A;BEGIN READ( A) END. (<标识符> →A)
22
文法G[S]: 例 文法 : (1)S→aSBE ) → (2)S→aBE ) → (3)EB→BE ) → (4)aB→ab ) → (5)bB→bb ) → (6)bE→be ) → (7)eE→ee ) → L(G)={ anbnen | n≥1 } ≥ G生成的每个串都在 生成的每个串都在L(G)中 生成的每个串都在 中 L(G)中的每个串确实能被 生成 中的每个串确实能被G生成 中的每个串确实能被 分析参见课本P37. 分析参见课本P37.
第03章 文法和语言
第 3 章文法和语言第1 题文法G=({A,B,S},{a,b,c},P,S)其中P 为:S→Ac|a A→ab B→bc写出L(G[S])的全部元素。
答案:L(G[S])={abc}第2 题文法G[N]为:N→D|ND D→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])={a b |n>=1}第5 题写一文法,使其语言是偶正整数的集合。
要求:(1) 允许0 打头;(2)不允许0 打头。
答案:(1)允许0 开头的偶正整数集合的文法E→NT|D T→NT|D N→D|1|3|5|7|9 D→0|2|4|6|8(2)不允许0 开头的偶正整数集合的文法E→NT|D T→FT|G N→D|1|3|5|7|9 D→2|4|6|8 F→N|0 G→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 第 7 题证明下述文法 G[〈表达式〉]是二义的。
编译原理第三章
一个句子的表示:羊吃草 <句子> => <主语><谓语> => <名词><谓语> => 羊<谓语> => 羊<动词><直接宾语> => 羊吃<直接宾语> => 羊吃<名词> => 羊吃草 利用上述的规则,可以生成很多句子:“马吃 草”,“他喂马”等,而“羊草吃”不符合上述 规则,不是句子。这些规则称为我们判别句子结 构是否合法的依据,换句话说,这些规则看成是 一种源语言,用来描述汉语。这里仅仅涉及汉语 句子的描述。其中一种描述源语言称为文法。 “草吃羊”也是上述规则生成的一个合法的句子,
第3章 文法和语言 教学要求: 1、掌握:文法的概念,语言的定义, 符号串,文法的形式定义,0型文法, 1型文法,2型文法,3型文法 2、理解:自上而下与自下而上的分析 方法 3、了解:上下文无关文法的ε 规则
预备知识 1、一个程序设计语言是一个记号系统, 其完整定义应包括语法和语义两个方面 2、语法是一组规则,用它可以形成和产 生一个合法的程序,定义什么样的符号 序列是合法的,与符号的含义无关 3、语义是一组规则,定义程序语言的含义 如类型匹配,变量作用域等
编译原理_第1章(清华大学)
语义分析
语义审查(静态语义)
上下文相关性 类型匹配 类型转换
例: Program p(); Var rate:real; procedure initial; … position := initial + /* error */ /* error */ …
rate * 60 /* warning */;
编译程序结构(components) 词法分析程序 语法分析程序 语义分析程序 中间代码生成程序 代码优化程序 目标代码生成程序 符号表管理程序 出错处理程序
词法分析程序
语法分析程序
表 格 管 语义分析程序 中间代码生成程序 出 错 处
理
代码优化程序
功能:层次分析.依据源程序的语法规则把源程序 的单词序列组成语法短语(表示成语法树).
position := initial + rate * 60 ; 规则 <赋值语句>::=<标识符>“:=”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” <表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数>
又如: int arr [2],abc; abc = arr * 10;
… Program p(); Var rate:real; Var initial :real; Var position :real ; … position := initial +
编译原理第三章答案
第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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<主语>::=<冠词><形容词><名词> <冠词> ::=the <形容词>::=big <谓语>::=<动词><宾语> <动词>::=ate <宾语>::=<冠词><名词>
“我是大学生”。是汉语的一个句子 用语法来描述:
〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷=我|你|他 〈名词〉∷=王明|大学生|工人|英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷=是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉
有了一组规则以后,按照如下方式用它们导出句子:开始去找∷= 左端的带有〈句子〉的规则并把它由∷=右端的符号串代替,这个动作表 示成: 〈句子〉 〈主语〉〈谓语〉,然后在得到的串〈主语〉〈谓 语〉中,选取〈主语〉或〈谓语〉,再用相应规则的∷=右端代替之。比 如,选取了〈主语〉,并采用规则〈主语〉∷=〈代词〉, 那么得到:〈主语〉〈谓语〉 〈代词〉〈谓语〉, 重复做下去, 句子:“我是大学生”的全部动作过程是: 〈句子〉 〈主语〉〈谓语〉 〈代词〉〈谓语〉 我〈谓语〉 我〈动词〉〈直接宾语〉 我是〈直接宾语〉 我是〈名词〉 我是大学生 “我是大学生”的构成符合上述规则,而“我大学生是”不符合上 述规则,我们说它不是句子。这些规则成为我们判别句子结构合法与否 的依据,换句话说,这些规则看成是一种元语言,用它描述汉语。这里 仅仅涉及汉语句子的结构描述。其中一种描述元语言称为文法。
=> the big elephant ate the peanut
+ the big elephant ate the peanut 上述推导可写成<句子> =>
说明: (1) 有若干语法成分同时存在时,我们总是从最左的语法成 分进行推导,这称之为最左推导,类似的有最右推导(一般推 导)。 (2) 从一组产生式可推出不同的句子,如以上产生式还可推 出“大象吃象”、“大花生吃象”、“大花生吃花生”等句子, 它们 在语法上都正确,但在语义上都不正确。
3.1 形式语言基础
基本概念: 一、字母表和符号串 1.字母表:符号的非空有限集合 例:={a,b,c} 2.符号:字母表中的元素 例: a,b,c 3.符号串:符号的有穷序列 例:a, aa, ac, abc,.. 特别地,空符号串:无任何符号的符号串(ε ) 符号串的形式定义
有字母表,定义: (1)ε 是上的符号串; (2)若x是上的符号串,且a ,则ax或xa是上的符号串; (3)y是上的符号串,iff(当且仅当)y可由(1)和(2)产生。
3.由产生式推导句子: 有了一组产生式之后,可以按照一定的方式用它们去推导 或产生句子。 推导方法:从一个要开始的符号开始推导,即用相应产生 式的右部来替代产生式的左部,每次仅用一条产生式去进行推导。
<句子> => <主语><谓语> <主语><谓语> => <代词><谓语>
…… ……
这种推导一直进行下去,直到所有带< >的符号都由终结符号 替代为止。
7.符号串的联接:若x、y是定义在Σ是上的符号串,且x= XY,y=YX,则x和y的联接 xy=XYYX也是Σ上的符号串。 注意:一般xy≠yx,而εx=xε=x
8. 符号串集合的乘积运算:令A、B为符号串集合,定 义
AB={ xy |x∈A,y∈B} 例:A={a,b},B={c,d}, AB= ? {ac,ad,bc,bd}
<句子>::=<主语><谓语> 例:给定一组语法规则,考 察一个句子:“我是大学生” <主语>::=<代词>|<名词> <代词> ::=你|我|他 的推导过程。
<名词>::= 王民|大学生|工人|英语 <谓语>::=<动词><直接宾语>
<句子> <主语><谓语>
<动词>::=是|学习 <直接宾语>::=<代词>|<名词>
语法 —— 表示构成语言句子的各个记号之间的组合规律。 语义 —— 表示各个记号的特定含义。(各个记号和记号所表示的对象之间 的关系) 语用 ——表示在各个记号所出现的行为中,它们的来源、使用和影响。 每种语言具有两个可开始的特性,即语言的形式和该形式相关联的意 义。 语言的实例若在语法上是正确的,其相关联的意义可以从两个观点来 看,其一是该句子的创立者所想要表示的意义,另一是接收者所检验到的 意义。这两个意义并非总是一样的,前者称为语言的语义,后者是其语用 意义。幽默、双关语和谜语就是利用这两方面意义间的差异。 如果不考虑语义和语用,即只从语法这一侧面来看语言,这种意义下的 语言称作形式语言。形式语言抽象地定义为一个数学系统。“形式”是指这 样的事实:语言的所有规则只以什麽符号串能出现的方式来陈述。形式语言 理论是对符号串集合的表示法、结构及其特性的研究。是程序设计语言语法 分析研究的基础。
A1 A2 A3
, x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, ……} A*= ? {ε A0 A1 A2 A3
为什么对符号、符号串、符号串集合以及它们的运算感兴趣?
若A为某语言的基本字符集
A={a,b,……z,0,1,……,9, +,-,×,_/, ( , ), =……} B为单词集 B ={begin, end, if, then,else,for,……,<标识符>,<常量>,……} 则B A* 。 语言的句子是定义在B上的符号串。 若令C为句子集合,则C B * , 程序 C
2 熟练使用文法定义程序设计语言的单词和 语法成分。 3 对形式语言的理论有一个初步基础。
【学习指南】
1 什么是文法,什么是文法定义的语言?
2 在乔姆斯基(Chomsky)的文法类型中,为什么特别 关注上下文无关文法? 3 文法的递归性、二义性等性质是什么? 4 句子、句型和语言的定义是什么? 5 推导和归约是什么? 6 什么是语法分析?语法分析方法的分类?
< 代词><谓语>
我<谓语>
我<动词><直接宾语> 我是<直接宾语> 我是<名词> 我是大学生
推导方法:从一个要开始的符号 开始推导,即用相应产生式的 右部来替代产生式的左部,每 次仅用一条产生式去进行推导。
例:有一英语句子:The big elephant ate the peanut.
10.符号串集合的闭包运算:设A是符号串集合,定义 A+ = A1 ∪ A2 ∪ A3 ∪……∪ An ∪…… 称为集合A的正则闭包。 A* = A0 ∪ A1 ∪ A2 ∪ A3 ∪……∪ An ∪…… = A0 ∪ A+ 称为集合A的星闭包。
例:A={x,y} A+=? {x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, ……}
7 如何确定一个输入符号串是否是所给文法的句子?
第3章:文法和语言
3.0 概述 3.1 形式语言基础 3.2 3.3 3.4 3.5 3.6 文法的直观理解 文法和语言的定义 文法的类型 语法树与二义性 句型的分析
3.0 概述
用高级语言编程比用低级语言方便,但要解决两个问题: (1)计算机怎样懂得高级语言程序,这就需要一个翻译程序实现从源程序到目 标程序的转换。 (2)用什么方法来精确定义高级语言,即怎样精确描述高级语言。 要构造一个编译程序,应深刻理解被编译的源语言的结构(即词法和语法) 及其含义(即语义),同时要弄清源语言的语法规则和语义规则是采用什么理 论或什么方法来描述的。 本章目的 为语言的语法描述寻求工具,该工具要对程序设计语言给出精 确无二义的语法描述。(严谨、简洁、易读) 形式工具----形式语言抽象地定义为一个数学系统。 “形式”----:语言的所有规则只以符号串能出现的方式来陈述。
4.符号串集合:由符号串构成的集合。
二、符号串和符号串集合的运算
5.符号串相等:若x、y是集合上的两个符号串,则x=y iff(当且仅当)组成x的每一个符号和组成y的每一个符号 依次相等。 6.符号串的长度:x为符号串,其长度|x|等于组成该符 号串的符号个数。 例: x=STV , |x|=3 特别地, |ε| =0
=> <冠词><形容词><名词><谓语> <名词>::=elephant | peanut
=> the big elephant <动词><宾语>
=> the big elephant ate <宾语> => the big elephant ate <冠词><名词>
=> the big elห้องสมุดไป่ตู้phant ate the <名词>
因为εx=xε=x,所以{ε}A= A{ε} =A
9. 方幂运算:
符号串集合的方幂 有任一符号串集合A,定义 : A0 ={ε}, A1=A, A2=AA, A3=AAA, … An=An-1A=AAn-1 =A A … A n个 其中:n≥0 符号串的方幂 有任一符号串X,定义: X0 = ε X1 = X X2=XX X3=XXX … Xn=XX … X n个