第4课 第3章_文法和语言_二义性&规则实践
- 格式:ppt
- 大小:141.50 KB
- 文档页数:10
编译原理试卷及答案东北大学秦皇岛分校课程名称:编译原理试卷: (B )答案考试形式:闭卷授课专业:计算机科学与技术考试日期:年月日试卷:共 2 页题号一二三四总分得分阅卷人一、填空题(每空2分,共30分)1、编译程序的整个过程可以从逻辑上划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等几个阶段,另外还有两个重要的工作是理和出错处理。
表格管2、规范规约中的可归约串是句柄,算符优先分析中的可归约串是最左素短语。
3、语法分析方法主要可分为自顶向下和自底向上两大类。
4、LR (0)文法的项目集中不会出现移进-归约冲突和归约-归约冲突。
5、数据空间的动态存储分配方式可分为栈式和堆式两种。
6、编译程序是指能将源语言程序翻译成目标语言程序的程序。
7、确定有穷自动机DFA 是NFA 的一个特例。
8、表达式(a+b)*c 的逆波兰表示为 ab+c* 。
二、选择题(每题2分,共20分)1、LR 语法分析栈中存放的状态是识别 B 的DFA 状态。
A 、前缀B 、可归前缀C 、项目D 、句柄 2、 D 不可能是目标代码。
A 、汇编指令代码B 、可重定位指令代码C 、绝对机器指令代码D 、中间代码 3、一个控制流程图就是具有 C 的有向图A 、唯一入口结点B 、唯一出口结点C 、唯一首结点D 、唯一尾结点 4、设有文法G[S]:S →b|bBB →bS ,则该文法所描述的语言是C 。
A 、L (G )={b i |i ≥0}B 、L (G )={b 2i |i ≥0}C 、L (G )={b 2i+1|i ≥0}D 、L (G )={b 2i+1|i ≥1}5、把汇编语言程序翻译成机器可执行的目标程序的工作是由 B 完成的。
A 、编译器B 、汇编器C 、解释器D 、预处理器 6、在目标代码生成阶段,符号表用于 D 。
A 、目标代码生成B 、语义检查C 、语法检查D 、预处理器地址分配07、规范归约是指 B 。
第一章编译程序是一种程序,它把高级语言编写的源程序翻译成与之在逻辑上等价的机器语言或汇编语言的目标程序。
一个高级语言程序的执行通常分为两个阶段,即编译阶段和运行阶段。
如果编译生成的目标程序是汇编语言形式,那么在编译与运行阶段之间还要添加一个汇编阶段。
解释程序也是一种翻译程序,它将源程序作为输入,一条语句地读入并解释执行。
解释程序与编译程序的主要区别是:编译程序是将源程序翻译成目标程序后再执行该目标程序,而解释程序则是逐条读出源程序中的语句并解释执行,即在解释程序的执行过程中并不源程序产生目标程序。
编译过程可以划分成五个阶段:词法分析阶段、语法分词法分析器析阶段、语义分析和中间代码生成阶段、优化阶段和目单词符号标代码生成阶段。
词法分析的任务是对构成源程序的字语法分析器表出符串进行扫描和分解,根据语言的词法规则识别出一个语法单位个具有独立意义的单词;语法分析的任务是在词法分析格错语义分析与的基础上,根据语言的语法规则(文法规则)从单词符中间代码生成器管处号串中识别出各种语法单位并进行语法检查;语义分析四元式理和中间代码生成阶段的任务是首先对每种语法单位进行理优化静态语义检查,然后分析其含义,并用另一种语言形式四元式来描述这种语义即生成中间代码;优化的任务是对前阶目标代码生成器段产生的中间代码进行等价变换或改造,以期获得更为目标程序高效(节省时间和空间)的目标代码;目标代码生成阶段的任务是把中间代码(或经优化处、理之后)变换成特编译程序结构示意图定机器上的机器语言程序或汇编语言程序,实现最终的翻译工作。
自编译:用某种高级语言书写自己的编译程序。
交叉编译:指用A机器上的编译程序来产生可在B机器上运行的目标代码。
自展:首先确定一个非常简单的核心语言L0,然后用机器语言或汇编语言书写出它的编译程序T0:再把语言L0扩充到L1,此时有L0L1,并用L0编写L1的编译程序T1(即自编译)。
移植:指A机器上的某种高级语言的编译程序稍加改动后能够在B机器上运行。
第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[〈表达式〉]是二义的。
编译原理(第二版)第3章文法和语法编译原理(第二版)第3章文法和语法课件第3章文法和语言教学要求:本章是编译原理课程的理论基础,要求理解文法、语言、规范推导、规范归约和短语、简单短语、句柄的基本概念;掌握语言的求解方法、文法的二义性的判断方法及句型的分析方法。
教学重点:上下文无关文法,语言定义编译原理(第二版)第3章文法和语法课件一、语言语言是由句子组成的集合,是由一组记号所构成的集合。
汉语--所有符合汉语语法的句子的全体英语--所有符合英语语法的句子的全体程序设计语言--所有该语言的程序的全体编译原理(第二版)第3章文法和语法课件二、文法一种语言描述工具,用来定义句子的结构,用有限的规则把语言的全部句子描述出来,是以有穷的集合刻划无穷的集合的工具。
〈句子〉::=〈主语〉〈谓语〉〈主语〉::=〈代词〉|〈名词〉〈代词〉::= 你| 我| 他〈名词〉::= 王明| 大学生| 工人| 英语〈谓语〉::=〈动词〉〈直接宾语〉〈动词〉::= 是| 学习〈直接宾语〉::=〈代词〉|〈名词〉“我是大学生”是否是该语言的句子?编译原理(第二版)第3章文法和语法课件〈句子〉::=〈主语〉〈谓语〉〈主语〉::=〈代词〉|〈名词〉〈代词〉::= 你| 我| 他〈名词〉::= 王明| 大学生| 工人| 英语〈谓语〉::=〈动词〉〈直接宾语〉〈动词〉::= 是| 学习〈直接宾语〉::=〈代词〉|〈名词〉〈句子〉〈主语〉〈谓语〉〈代词〉〈谓语〉我〈谓语〉我〈动词〉〈直接宾语〉我是〈直接宾语〉我是〈名词〉我是大学生编译原理(第二版)第3章文法和语法课件三、符号和符号串任何一种语言可看成是某个符号集上定义的,按一定规则构成的一切基本符号串组成的集合。
字母表:元素的非空有穷集合。
(符号集) 符号:字母表中的元素。
例如:汉语的字母表中包括汉字、数字及标点符号等。
C语言的字母表是由字母、数字、若干专用符号及IF、FOR之类的保留字组成。
《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第2题一个典型的编译程序通常由哪些部分组成各部分的主要功能是什么并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。
第3章文法和语言。
第1讲讲授内容:文法的直观概念,符号和符号串,文法和语言的形式定义,文法的类型,上下文无关文法及其语法树。
本讲重点:推导过程和语法树的对应,句型与语法树的对应。
讲授方法:由于学生没有接触过文法的概念,所以首先举一个汉语文法的例子作为引导,使学生对文法有一个感性的认识,然后引出文法的形式定义。
作业:P44 1,4,6,8,11,12,133.1 文法的直观概念一种语言可以用一组规则来定义。
以自然语言为例,可以用一组规则定义句子。
如“我是大学生”。
汉语的句子由主语,谓语组成,谓语由动词和直接宾语组成。
我们可以用下列规则定义句子。
《句子》→《主语》《谓语》《主语》→《代词》|《名词》《代词》→我|你|他《名词》→王明|大学生|工人|英语《谓语》→《动词》|《直接宾语》《动词》→是|大学生《直接宾语》→《代词》|《名词》这就是一个文法。
每一行称作一个产生式(或规则)。
其中:《》:《》之内的符号为非终结符。
例如,《句子》,《主语》等,而我,王明等则是终结符。
→:定义为|:或者这三个符号称为元语言符号,用类描述文法符号之间的关系,其它符号为文法符号。
有了以上的文法,我们可以推导出若干个句子。
以→为界,产生式的左边称作产生式的左部,右边称作右部。
第一行的左部称为文法的开始符号。
例《句子》=> 《主》《谓》=> 《代》《谓》=> 我《谓》=> 我《动》《直宾》=> 我是《直宾》=> 我是大学生显然,还可以产生若干个句子,我们用有限的规则不仅严格地定义了句子的结构,还描述出该语言的全部句子。
这就是CHOMSKY建立形式语言的基本思想。
3.2符号,符号串字母表:元素的非空集合。
符号串:右字母表中的符号组成的任意有穷序列。
设字母表∑={0,1},则 01,001,011,00000111,等都是符号串。
A ={a,b,c},则a,aa,aabbbc,等都是符号串。
第三章文法和语言课后习题参考答案1. L(G)={abc}2. L(G[N])是无符号整数。
3.G3: E→D+E | D-E | DD→0|1|2|3|4|5|6|7|8|94. L(G[Z])={a n b n | n>0}5. 写一文法,使其语言是偶正整数的集合要求:(1)允许0打头(2)不允许0打头解:(1)G[S]=({S,P,D,N},{0,1,2,…,9},P,S)P:S→PD|DP->NP|ND→0|2|4|6|8N->0|1|2|3|4|5|6|7|8|9(2)G[S]=({S,P,R,D,N,Q },{0,1,2,…,9},P,S)P:S→PD|P0|DP->NR|NR->QR|QD→2|4|6|8N->1|2|3|4|5|6|7|8|9Q->0|1|2|3|4|5|6|7|8|96. 已知文法G:<表达式>::=<项>|<表达式>+<项>|<表达式>-<项><项>::=<因子>|<项>*<因子>|<项>/<因子><因子>::=(<表达式>)|i。
试给出下述表达式的推导及语法树。
(1)i; (2)(i) (3)i*i;(4)i*i+i; (5)i+(i+i);(6)i+i*i。
解:(1)<表达式>=><项>=><因子>=>i(2)<表达式>=><项>=><因子>=>(<表达式>)=>(<项>)=>(<因子>)=>(i)(3)<表达式>=><项>=><项>*<因子>=><因子>*<因子>=>i*i(4)<表达式>=><表达式>+<项>=><项>+<项>=><项>*<因子>+<项>=><因子>*<因子>+<因子>=>i*i+i=w(5)<表达式>=><表达式>+<项>=><项>+<项>=><因子>+<因子>=>i+(<表达式>)=> i+(<表达式>+<项>)=>i+(<项>+<项>)=> i+(<因子>+<因子>)=>i+(i+i)(6)<表达式>=><表达式>+<项>=><项>+<项>=><因子>+<项>=>i+<项>=>i+<项>*<因子>=> i+<因子>*<因子>=> i+i*i语法树见下图:7. 为句子i+i*i 构造两棵语法树,从而证明下述文法G[<表达式>]是二义的。