编译原理_复习重难点
(完整)编译原理复习整理(重点含答案),推荐文档
1、给出下面语言的相应文法。
L1={a n b n c i|n≥1,i≥0}从n,i的不同取值来把L1分成两部分:前半部分是anbn:A→aAb|ab后半部分是ci:B→Bc|ε所以整个文法G1[S]可以写为:G1(S):S→AB ;A→aAb|ab ;B→cB|ε3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。
(要求:先将正规式转化为NFA,再将NFA确定化,最小化)4、对下面的文法G:E →TE’ E’→+E|ε T →FT’ T’→T|εF →PF’ F’ →*F’|ε P →(E)|a|b|∧(1)证明这个文法是LL(1)的。
(2)构造它的预测分析表。
(1)FIRST(E)={(,a,b,^}FIRST(E')={+,ε}FIRST(T)={(,a,b,^}FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^}FIRST(F')={*,ε}FIRST(P)={(,a,b,^}FOLLOW(E)={#,)}FOLLOW(E')={#,)}FOLLOW(T)={+,),#}FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#}FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式:'→+'→'→'→E E T T F F P E a b ||*|()|^||εεεFIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ FIRST(*F')∩FIRST(ε)={*}∩{ε}=φFIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ FIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ 所以,该文法式LL(1)文法. (3)+ * ( ) a b ^ # EE TE →'E TE →' E TE →' E TE →'E' '→+E E'→E ε'→E εTT F T →' T F T →' T F T →' T F T →' T' '→T ε'→T T '→T ε '→T T '→T T '→T T '→T εFF P F →'F P F →' F P F →' F P F →'F' '→F ε '→'F F * '→F ε '→F ε '→F ε '→F ε '→F ε '→F εPP E →() P a → P b → P →^5、考虑文法: S →AS|b A →SA|a (1)列出这个文法的所有LR(0) 项目。
编译原理第三版期末复习
期末复习总结《编译原理》第一章:绪论一、填空问题①由于计算机只能认识机器语言,所以需要翻译程序将高级语言翻译成计算机可以识别的机器语言。
②编译程序的工作过程一般主要划分为词法分析,语法分析,中间代码生成,代码优化,目标代码生成等几个基本阶段,同时还会伴有表格管理和出错处理。
③如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两个阶段:编译阶段和运行阶段。
如果编译程序生成的目标程序是汇编语言的程序,则源程序的执行分为三个阶段:编译阶段,汇编阶段和运行阶段。
1-02.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序 ,则其翻译程序称为编译程序.1-03.编译方式与解释方式的根本区别在于是否生成目标代码 .1-05.对编译程序而言,输入数据是源程序,输出结果是目标程序 .1-10.一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括(1)c.其中, (2)b 和代码优化部分不是每个编译程序都必需的. 词法分析器用于识别 (3)c ,语法分析器则可以发现源程序中的 (4)d .(1) a.模拟执行器 b.解释器 c.表格处理和出错处理 d.符号执行器(2) a.语法分析 b.中间代码生成 c.词法分析 d.目标代码生成(3) a.字符串 b.语句 c.单词 d.标识符(4) a.语义错误 b.语法和语义错误 c.错误并校正 d.语法错误1-11.程序语言的语言处理程序是一种 (1)a . (2)b 是两类程序语言处理程序,他们的主要区别在于 (3)d .(1) a.系统软件 b.应用软件 c.实时系统 d.分布式系统(2) a.高级语言程序和低级语言程序 b.解释程序和编译程序c.编译程序和操作系统d.系统程序和应用程序(3) a.单用户与多用户的差别 b.对用户程序的查错能力c.机器执行效率d.是否生成目标代码1-12.汇编程序是将 a 翻译成 b ,编译程序是将 c 翻译成 d .a.汇编语言程序b.机器语言程序c.高级语言程序d. a 或者 be. a 或者 cf. b 或者 c1-13.下面关于解释程序的描述正确的是 b .(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的a. (1)(2)b. (1)c. (1)(2)(3)d.(2)(3)1-14.高级语言的语言处理程序分为解释程序和编译程序两种.编译程序有五个阶段,而解释程序通常缺少 (1)e 和 (1)b .其中, (1)e 的目的是使最后阶段产生的目标代码更为高效.与编译系统相比,解释系统 (2)d .解释程序处理语言时,大多数采用的是 (3)b 方法.(1): a. 中间代码生成 b.目标代码生成 c.词法分析 d.语法分析 e.代码优化(2): a.比较简单,可移植性好,执行速度快b.比较复杂,可移植性好,执行速度快c.比较简单,可移植性差,执行速度慢d.比较简单,可移植性好,执行速度慢(3): a.源程序命令被逐个直接解释执行 b.先将源程序转化为之间代码,再解释执行c.先将源程序解释转化为目标程序,在执行d.以上方法都可以1-15.用高级语言编写的程序经编译后产生的程序叫 b .用不同语言编写的程序产生 a 后,可用 g 连接在一起生成机器可执行的程序.在机器中真正执行的是 e .a. 源程序b. 目标程序c. 函数d. 过程e. 机器指令代码f. 模块g. 连接程序h.程序库1-16.要在某一台机器上为某种语言构造一个编译程序,必须掌握下述三方面的内容: c , d , f .a. 汇编语言b. 高级语言c. 源语言d. 目标语言e. 程序设计方法f. 编译方法g. 测试方法h. 机器语言1-17.由于受到具体机器主存容量的限制,编译程序几个不同阶段的工作往往被组合成(1)d ,诸阶段的工作往往是 (2)d 进行的.(1) a. 过程 b. 程序 c. 批量 d.遍(2) a. 顺序 b. 并行 c. 成批 d.穿插1-18.编译程序与具体的机器 a , 与具体的语言 a .a. 有关b.无关1-19.使用解释程序时,在程序未执行完的情况下, a 重新执行已执行过的部分.a. 也能b.不可能1-20.编译过程中,语法分析器的任务就是 b .(1) 分析单词是怎样构成的(2)分析单词串是如何构成语句和说明的(3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构a. (2)(3)b. (2)(3)(4)c. (1)(2)(3)d.(1)(2)(3)(4)1-21.编译程序是一种常用的 b 软件.a. 应用b. 系统1-22.编写一个计算机高级语言的源程序后,到正式上机运行之前,一般要经过 b 这几步.(1) 编辑 (2) 编译 (3) 连接 (4) 运行a. (1)(2)(3)(4)b. (1)(2)(3)c. (1)(3)d.(1)(4)1-23.编译程序必须完成的工作有 a .(1) 词法分析 (2) 语法分析 (3) 语义分析(4) 代码生成 (5) 之间代码生成 (6) 代码优化a. (1)(2)(3)(4)b. (1)(2)(3)(4)(5)c. (1)(2)(3)(4)(5)(6)d. (1)(2)(3)(4)(6)e. (1)(2)(3)(5)(6)1-24.“用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行”这种说法a .a. 不正确b.正确1-25.把汇编语言程序翻译成机器可执行的目标程序的工作是由 b 完成的.a. 编译器b. 汇编器c. 解释器d. 预处理器1-26.编译程序生成的目标程序 b 是机器语言的程序.a. 一定b. 不一定1-27.编译程序生成的目标程序 b 是可执行的程序.a. 一定b. 不一定1-28.编译程序是一种 B 。
编译原理复习重点含答案
编译原理复习重点含答案编译原理复习重点编译原理是计算机科学中的一门重要课程,它研究的是如何将高级语言程序转化为机器语言的过程。
在编译原理的学习中,我们需要掌握一些重要的概念和技术,以便能够理解和应用编译器的工作原理。
本文将重点介绍编译原理的几个重要主题,并提供相应的答案供参考。
一、词法分析词法分析是编译器的第一个阶段,它的任务是将输入的字符序列划分为一个个有意义的词素(token)。
词法分析器通常使用有限自动机(DFA)来实现,其工作原理是将输入字符序列逐个读入,并根据事先定义好的词法规则进行匹配和识别。
常见的词法单元包括关键字、标识符、常量、运算符等。
常见的词法规则包括:1. 关键字:例如if、while、for等。
2. 标识符:由字母、数字和下划线组成,且以字母或下划线开头。
3. 常量:包括整数常量、浮点数常量、字符常量和字符串常量等。
4. 运算符:例如加法运算符+、减法运算符-等。
5. 分隔符:例如逗号、分号等。
词法分析的结果是一个个词法单元,每个词法单元包含一个词素和对应的词法单元类型。
例如,对于输入程序"int a = 10;",词法分析的结果可能是[("int", "关键字"), ("a", "标识符"), ("=", "运算符"), ("10", "整数常量"), (";", "分隔符")]。
二、语法分析语法分析是编译器的第二个阶段,它的任务是将词法分析器输出的词法单元序列转化为抽象语法树(AST)。
语法分析器通常使用上下文无关文法(CFG)来描述语言的语法结构,并使用递归下降、LL(1)分析、LR分析等算法进行分析。
常见的语法规则包括:1. 表达式:例如算术表达式、布尔表达式等。
编译原理期末总结复习
编译原理期末总结复习(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如公文写作、报告体会、演讲致辞、党团资料、合同协议、条据文书、诗词歌赋、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, this shop provides you with various types of classic sample essays, such as official document writing, report experience, speeches, party and group materials, contracts and agreements, articles and documents, poems and songs, teaching materials, essay collections, other sample essays, etc. Learn about the different formats and writing styles of sample essays, so stay tuned!编译原理期末总结复习编译原理期末总结复习(精选3篇)编译原理期末总结复习篇1一、简答题1.什么是编译程序?答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。
编译原理考试重点整理
第一章1.编译程序:能够把某一种语言程序转换成另一种语言程序,而后者与前者在逻辑上是等价的一种程序。
通常是从高级语言转换成为低级语言。
2.解释程序:它以该语言写的源程序作为输入,但是不产生目标代码,而是边解释边执行源程序本身。
3.诊断编译程序:专门用于帮助程序开发和调试的编译程序。
4.优化编译程序:着重于提高目标代码效率的编译程序。
5.宿主机:运行编译程序的计算机。
6.目标机:运行编译程序所产生目标代码的计算机。
7.交叉编译程序:一个程序产生不同于宿主机的机器代码的程序。
8.可变目标编译程序:如果不需要重新编译程序中与机器无关的部分就能改变目标机,则该编译程序就叫做可变目标编译程序。
PS:世界上第一个编译程序——FORTRAN编译程序——20世纪50年代9.编译过程●第一阶段:词法分析——词法分析器1)任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),标示符,常熟,算符和界符。
2)单词符号是语言的基本组成成分,是人们理解和编程的基本要素。
3)描述词法规则的有效工具是:正规式和有限自动机●第二阶段:语法分析——(词法)分析器1)任务:在词法分析的基础上,根据语言的语法规则,把单词符号分解成各类语法单位,如“短语”、“子句”、“句子”、“程序段”和“程序”等。
通过语法分析,确定整个输入串是否构成语法上正确的“程序”。
2)语法分析所依据的是语言的语法规则。
通常是上下文无关文法描述、3)词法分析是一种线性分析,而语法分析是一种层次结构分析。
●第三阶段:语义分析和中间代码产生——语义分析器1)任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。
2)对每种语法范畴进行静态语义检查—>进行中间代码的翻译。
3)语义分析所依据的是语言的语义规则,通常使用属性文法描述语义规则。
4)中间代码:一种含义明确、便于处理的记号系统,它通常独立于具体的硬件。
编译原理期末复习考点
一:简述中间代码的优点、//在生成中间代码时,可以不考虑机器的特性,使得编制生成的中间代码的编译程序变得较为简单;由于中间代码生成形式与具体机器无关,方便移植;在中间代码上更便于做优化处理。
二:什么是语义错误在语法分析中,严格按照文法来检查语句的语法是否正确,而有些语句单看语法结构没有错误,但和该语句所处的上下文联系考虑就有错误。
三:在处理过程调用和返回时,主要涉及哪些问题//实现程序过程中过程调用和返回的控制逻辑;处理实在参数和形式参数之间的数据传递问题。
四:块程序语言对变量有哪些规定//变量的作用域是定义它的块程序;同一块内的变量不能重名,但不同块以及嵌套块之间的变量可以重名;因而某变量的声明可与嵌套块的内层变量同名,使用时局部变量优先。
五:简述语义分析的主要内容借助符号表记录的信息;常见的语义分析动作有对表达式中的操作数进行类型一致性检查;分析由语法分析所识别出来的语句的意义并作用相应的语义处理,来实现语义分析动作;六:生成目标代码通常应考虑哪些问题//如何使生成的目标代码较短;//如何充分利用寄存器,以减少内存访问的次数;//如何充分利用指仅系统的特点七:一个文法要进行不带回溯的自顶向下分析,需要满足的条件是什么//文法不含左递归;对文法的任一非终结符号,若其规则右部有多想选择,那么各选项推出的终结符号串的首符号集合要两两不相交。
八:何为优化,所涉及的范围优化:对程序进行各种等价变换;使得从变换后的程序出发,能产生更有效的目标代码;三种级别:局部优化;循环优化;全局优化;//词法分析器的输出结果是单词的种别编码和自身值;//解释程序处理语言时,大多数采用的是先将源程序解释转化为目标程序,再执行。
//编译程序是一种解释程序;//文法G所描述的语言时由文法的开始符号推出的所有的终结符号。
//自底向上分析包括移进,规约,接受,错误四部分。
//词法分析;语法分析;语义分析;代码优化;目标代码生成;错误处理;符号表管理。
重要专题梳理山东省考研计算机学科复习资料编译原理难点解析
重要专题梳理山东省考研计算机学科复习资料编译原理难点解析重要专题梳理—山东省考研计算机学科复习资料编译原理难点解析编译原理作为计算机学科中的重要专题,不仅在山东省考研中占据较大的比重,也是计算机相关专业的核心知识。
本文将针对编译原理的难点进行解析,帮助考生更好地复习备考。
一、词法分析词法分析是编译过程中的第一步,其目的是将源程序拆分成一个个的单词记号,为后续的语法分析提供基础数据。
在复习过程中,考生需要重点关注以下几个难点。
1. 正则表达式与有限自动机的转换正则表达式与有限自动机之间的转换是词法分析中的核心内容。
在复习中,考生需要了解正则表达式的基本语法,明确NFA(非确定有限自动机)与DFA(确定有限自动机)之间的转换方法。
2. 最长匹配原则最长匹配原则在词法分析中起着至关重要的作用。
面临多个正则表达式同时匹配的情况时,考生需要掌握最长匹配原则的应用,使得词法分析具有准确性和效率性。
3. 错误恢复在词法分析过程中,遇到错误是难以避免的。
考生需要了解错误恢复的策略,比如如何跳过错误的字符,恢复到正确的分析位置等。
二、语法分析语法分析是编译过程中的核心环节,其主要任务是根据词法分析得到的单词记号序列,构建语法树,进行语法分析与语义分析。
以下是语法分析中的重要难点。
1. 自顶向下分析自顶向下分析通常采用的是预测分析法,即根据产生式和输入的单词记号,预测推导出目标语言的语法结构。
在复习中,考生需要熟练掌握预测分析法,并能够应用到具体问题中。
2. 文法的消除左递归消除左递归是解决文法产生式中可能出现的左递归问题,为构建语法树提供准确简洁的规则。
考生在复习中,需要了解文法消除左递归的基本方法,并且能够针对具体的产生式进行消除操作。
3. LL(1)文法与FIRST/FOLLOW集合LL(1)文法是一种重要的上下文无关文法,能够适用于自顶向下的语法分析方法。
在复习过程中,考生需要掌握LL(1)文法的基本特点,并理解FIRST集合和FOLLOW集合的作用及求解方法。
《编译原理》重点知识总结
《编译原理》知识点总结目录第一章引论第二章高级语言及其语法描述第三章语法分析——自上而下分析第四章属性文法和语法制导翻译第五章语义分析和中间代码产生第六章优化第一章引论一.编译程序(compiler):把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序二.编译程序的工作的五个阶段:词法分析、语法分析、中间代码产生、优化、目标代码产生1.词法分析任务: 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号。
依循的原则:构词规则描述工具:有限自动机FOR I := 1 TO 100 DO保留字标识符等符整常数保留字整常数保留字2.语法分析任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。
依循的原则:语法规则述工具:上下文无关文法3.语义分析与中间代码产生任务:对各类不同语法范畴按语言的语义进行初步翻译。
(变量是否定义、类型是否正确等)依循的原则:语义规则中间代码:三元式,四元式,逆波兰记号,树形结构等。
是一种独立于具体硬件的记号系统。
例:将Z:=X + 0.618 * Y 翻译成四元式为(1) * 0.618 Y T1(2) + X T1 T2(3) := T2 _ Z4. 优化任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码。
依循的原则:程序的等价变换规则FOR K:=1 TO 100 DOBEGINM := I + 10 * K;N := J + 10 * K;END4.目标代码产生任务: 把中间代码变换成特定机器上的目标代码。
依赖于硬件系统结构和机器指令的含义目标代码三种形式:a)绝对指令代码: 可直接运行b)可重新定位指令代码: 需要连接装配c)汇编指令代码: 需要进行汇编第二章高级语言及其语法描述2.1.1语法词法规则:单词符号的形成规则。
a)单词符号是语言中具有独立意义的最基本结构。
编译原理-复习重难点
第一章从本质上来说,程序设计语言是按一定规则排列的符号集合,而编译程序就是把这些符号集合变成机器指令的转换器,编译程序又称为编译器。
程序设计语言【高级语言,低级语言(机器语言和汇编语言)】编译过程:词法分析,语法分析,中间代码生成,优化,目标代码产生。
三元式定义为如下形式:(op, a1, a2)其中op为操作码或运算符,a1和a2为操作数或运算分量。
编译 : 将高级语言程序翻译成另一种语言的等价程序。
解释:翻译一句执行一句,边翻译边执行,直到程序结束。
与编译的区别:不生成等价的目标代码程序。
优点:解释方式便于程序的调试。
(编译方式只需翻译一次,且目标程序的执行速度快)(1)词法分析主要任务:从左到右扫描源程序,逐一读入构成源程序的字符流,识别出其中的一个个单词,识别出的单词称单词符号,也简称符号。
单词是高级语言程序中有实际意义的最小语法单位。
(2)语法分析任务“组词成句”,根据单词分析出组成源程序的各类语法单位,并指出其中的语法错误。
语法单位——由源程序的单词构成(如表达式、语句、……乃至整个程序。
)语法单位的构成规则——语法规则。
一个语言的词法规则和语法规则定义了一个程序的形式结构。
语法单位的表示——语法树(3)语义分析和中间代码生成任务:分析出语法单位具体的动作意义,进行初步翻译,生成与源程序等价的中间代码程序。
语义: 定义一个程序所表示的意义,用语义规则描述。
中间代码:指令应结构简单、含义明确,易于实现源程序——中间代码——目标代码三者之间的转换。
中间代码常用形式:逆波兰式、三元式、四元式等。
四元式:(运算符,对象1,对象2,结果)例:z=x+a%3*y(1)( % a 3 t1 )(2)( * t1 y t2 )(3) (3)( + x t2 t3 )(4)( = t3 _ z )(4)代码优化任务:对中间代码进行等价的加工变换,以便生成更有效更节省时间和空间的目标代码。
例:z=x+a%3*y 的四元式序列:(1)% a 3 t1 )(2)( * t1 y t2 )(3)( + x t2 z )(5)目标代码生成任务:将中间代码程序变换成目标代码程序。
编译原理期末考试复习整理(详细列出考试重点+重点例题)
编译原理期末考试复习整理(详细列出考试重点+重点例题)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March目录第一章 (3)词法分析: (3)语义法分析 (3)中间代码 (3)第二章 (3)1.根据语言写出文法 (4)2.根据文法写语,描述其特点(必考大题2-3类型) (4)3.文法的规范推导、语法树、短语、句柄(必考大题,2-7,2-11) (6)第三章 (11)1.给出一个正规文法 (左线性、右线性方法),写出其状态转换图(必考) (11)1.1右线性文法写出状态转换图 (必考) (11)1.2状态转换图写出右线性文法G (12)1.3左线性文法写出状态转换图 (必考) (13)2.非确定自动机的确定化 (14)第四章 (15)第五章 (15)属性文法与属性翻译文法 (15)逆波兰式(大题) (16)四元式(大题) (16)第一章词法分析:分析源程序的结构,判断它是否是相应程序设计语言的合法程序语义法分析的任务是根据语言的语义规则对语法分析得到的语法结构进行静态的语义检查(确定类型、类型与运算合法性检查、识别含义等),并且转换成另一种内部形式(语义树)表示出来或者直接用目标语言表示出来。
中间代码是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是便于优化、移值;三是容易将它翻译成目标代码第二章文法G定义为四元组(V N,V→,P,S )其中V N为非终结符号(或语法实体,或变量)集;V→为终结符号集;P为产生式(也称规则)的集合; V N,V→和P是非空有穷集。
S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。
V N和V→不含公共的元素,即V N ∩V→ = φ,通常用V 表示V N∪ V→,V称为文法G的字母表或字汇表。
编译原理复习
编译原理复习《编译原理》第⼀章:绪论1.翻译器:把⼀种语⾔变换到另外⼀种语⾔的软件。
这两种语⾔分别称为源语⾔和⽬标语⾔。
2.编译器:⼀种翻译器,它的⽬标语⾔⽐源语⾔低级。
3.典型的编译器可以划分成6个逻辑阶段:词法分析,语法分析,语义分析,中间代码⽣成,代码优化,代码⽣成。
4.按照对⽬标机器的依赖性,把编译过程分成前端(依赖于源语⾔,独⽴于⽬标机器)和后端(依赖于⽬标机器,独⽴于源语⾔,只与中间语⾔有关(从中间代码⽣成⽬标代码))。
5.前端包括:词法分析,语法分析,语义分析,中间代码⽣成。
6.后端包括:代码优化,代码⽣成。
7.解释器:不同于编译器的另⼀类语⾔处理器,直接执⾏源程序所指定的运算。
解释器的执⾏效率⽐编译器低,因为解释器⽆法解开循环。
8.遍:编译的⼏个阶段常⽤⼀遍(pass)扫描实现,⼀遍扫描包括读⼀个输⼊⽂件和写⼀个输出⽂件。
《编译原理》第⼆章:词法分析⼀些概念:1.词法单元:⼜称单词,是编程语⾔中合法的字符串。
2.词法记号:满⾜某种规则的词法单元,采⽤同⼀种记法——词法记号。
该规则称为模式。
3.模式:描述词法单元与词法记号对应关系的规则。
是描述源程序中某个记号的词法单元集合的规则。
4.字母表:符号的有限集合,例:∑={0,1}串:符号的有穷序列,例:0110,ε语⾔:字母表上的⼀个串集{ε,0,00,000,…},{ε},?正规式(运算符的优先级:*>连接运算>|)N F A是这样⼀个数学模型,包括1)状态集合S2)输⼊字母表∑3)转换函数m o v e:S?(∑?{ε})→P(S)4)唯⼀的初态s∈S5)终态集合F?SD F A是这样⼀个数学模型,包括1)状态集合S2)输⼊字母表∑3)转换函数m o v e:S?∑→S4)唯⼀的初态s∈S5)终态集合F?S第三章语法分析3.1 上下⽂⽆关⽂法上下⽂⽆关⽂法是四元组(V T , V N, S , P )1) V T: 终结符集合(⾮空有限集合,记号名是其同义词)2) V N: ⾮终结符集合(⾮空有限集合)3) S : 开始符号4) P : 产⽣式集合,产⽣式形式 : A →α上下⽂⽆关⽂法没有强制的顺序关系。
编译原理复习重点 中原工学院
第一章1.翻译程序:把一种语言程序(源语言程序)转换成另一种语言程序(目标语言程序)。
2.编译程序:高级语言翻译成低级语言。
3.解释程序:用该语言写的源程序作为输入,不产生目标程序,边解释边执行程序本身。
4.编译过程阶段:词法分析,语法分析,语义分析与中间代码产生,优化,目标代码生成。
5.五阶段模块:词法分析,语法分析,语义分析与中间代码产生,优化,目标代码生成,表格管理,出错处理。
6.编译前端:与源语言有关,如词法分析,语法分析,语义分析与中间代码产生,与机器无关的优化。
7.编译后端:与目标机有关的优化,目标代码产生。
8.编译程序生成:汇编语言和机器语言;高级语言书写;移植方法;编译程序自动产生;自编译方式。
9.词法分析;输入源程序,进行技法分析,输出单词符号。
10.语法分析:对单词符号串进行词法分析,识别出各类语法单位,最终判断输入串是否构成语法上正确的程序。
11.语义分析与中间代码产生:按照语义规则对词法分析器规约出的语法单位进行语义分析并翻译成一定形式的中间代码。
12.优化:对中间代码进行优化处理。
13.目标代码生成:把中间代码翻译成目标程序。
第二章1.词法规则:单词符号的形成规则。
2.语义规则:使用它可以定义一个程序的意义。
3.语法规则:定义了如何从单词符号形成更大的结构。
5.空字:不包含任何符号的序列。
6.空集:不含任何元素。
7.闭包:Σ上的一切符号串(包括ε)组成的集合用*表示。
Σ*称为Σ的闭包。
8.上下文文法组成部分:VN为非终结符号(或语法实体,或变量)集;VT为终结符号集;P为产生式(也称规则)的集合;S称作开始符号(识别符号)。
9.句型:有文法G,若S=》x,则称x是文法G的句型。
10.句子:有文法G,若S=》x,且x∈VT*,则称x是文法G的句子。
11.语言:文法G所产生的句子的全体是一个语言。
12.推导中心思想:从文法的开始符号出发,反复使用产生式,对非终结符施行替换和展开。
编译原理复习
编译原理复习《编译原理》复习README来源⽹络&书本&PPT整理截取了⽼师课上讲解or布置的题⽬⼀些题⽬懒得贴答案了,写了些注意事项第1 章引论运⾏编译程序的计算机:宿主机运⾏编译程序所产⽣的⽬标代码的计算机:⽬标机第1 题解释下列术语:(1)编译程序:如果源语⾔为⾼级语⾔,⽬标语⾔为某台计算机上的汇编语⾔或机器语⾔,则此翻译程序称为编译程序。
(2)源程序:源语⾔编写的程序称为源程序。
(3)⽬标程序:⽬标语⾔书写的程序称为⽬标程序。
(4)编译程序的前端:它由这样⼀些阶段组成:这些阶段的⼯作主要依赖于源语⾔⽽与⽬标机⽆关。
通常前端包括词法分析、语法分析、语义分析和中间代码⽣成这些阶段,某些优化⼯作也可在前端做,也包括与前端每个阶段相关的出错处理⼯作和符号表管理等⼯作。
(5)后端:指那些依赖于⽬标机⽽⼀般不依赖源语⾔,只与中间代码有关的那些阶段,即⽬标代码⽣成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语⾔程序从头到尾扫视并完成规定任务的过程。
第2 题⼀个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
(区别编译程序的六个阶段)答案:⼀个典型的编译程序通常包含8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码⽣成程序、中间代码优化程序、⽬标代码⽣成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输⼈源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进⾏语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码⽣成程序:按照语义规则,将语法分析程序分析出的语法单位转换成⼀定形式的中间语⾔代码,如三元式或四元式。
中间代码优化程序:为了产⽣⾼质量的⽬标代码,对中间代码进⾏等价变换处理。
编译原理重点
(5)语法分析——自下而上分析
熟练掌握算符优先分析基本方法:算符优先表和算符优先函数,构造技术,熟练掌握LR分析器,LR(0)项目集族和LR(0)分析表的构造,SLR分析表的构造,规范LR分析表的构造。
理解符号表的作用,掌握符号表的组织和使用方法。
(9)运行时存储空间组织
正确理解目标程序运行时存储空间的使用和组织管理方式,理解静态存储分配和动态存储分配基本思想,掌握栈式动态分配中活动纪录和Display表作用,组织,内容及使用。
(10)优化
正确理解代码优化的概念,掌握用DAG表示进行局部优化的方法。
(6)属性文法和语法制导翻译
理解属性文法,重点掌握S-属性文法的自下而上计算,L-属性文法和自顶向下翻译。
(7)语义分析和中间代码产生
重点掌握三种中间语言:后缀式,四元式,三地址代码,掌握各种语句到四元式的翻译方法,包括说明语句,赋值语句,布尔表达式,控制语句,数组引用,过程调用等。
(8)符号表
正规表达式,NFA,DFA,词法分析器设计。
(4)语法分析-自上而下分析
清除左递归,提左因子,递归下降子程序,预测分析表构造,LL(1)方法。
(5)语法分析-自下而上分析
算符优先表构造,符符优先函数构造,LR(0)分析表构造,SLR分析表构造,以及规范LR分析表构造。
(6)属性文法和语法引导翻译
(1)引论
了解编译程序,编译过程,编译程序的结构,编译程序生成,学习构造编译程序。
(2)高级语言及其语法描述
《编译原理》总复习-07级
《编译原理》总复习-07级第一章编译程序的概述(一)内容本章介绍编译程序在计算机科学中的地位和作用,介绍编译技术的发展历史,讲解编译程序、解释程序的基本概念,概述编译过程,介绍编译程序的逻辑结构和编译程序的组织形式等。
(二)本章重点编译(程序),解释(程序),编译程序的逻辑结构。
(三)本章难点编译程序的生成。
(四)本章考点全部基本概念。
编译程序的逻辑结构。
(五)学习指导引论部分主要是解释什么是编译程序以及编译的总体过程。
因此学习时要对以下几个点进行重点学习:翻译、编译、目标语言和源语言这几个概念的理解;编译的总体过程:词法分析,语法分析、语义分析与中间代码的生成、代码优化、目标代码的生成,以及伴随着整个过程的表格管理与出错处理。
第三章文法和语言课外训练(一)内容本章是编译原理课程的理论基础,主要介绍与课程相关的形式语言的基本概念,包括符号串的基本概念和术语、文法和语言的形式定义、推导与归约、句子和句型、语法分析树和二义性文法等定义、文法和语言的Chomsky分类。
(二)本章重点上下文无关文法,推导,句子和句型,文法生成的语言,语法分析树和二义性文法。
(三)本章难点上下文无关文法,语法分析树,文法的分类。
(四)本章考点上下文无关文法的定义。
符号串的推导。
语法分析树的构造。
(五)学习指导要构造编译程序,就要把源语言用某种方式进行定义和描述。
学习高级语言的语法描述是学习编译原理的基础。
上下文无关文法及语法树是本章学习的重点。
语法与语义的概念;程序的在逻辑上的层次结构;文法的定义,文法是一个四元组:终结符号集,非终结符号集,开始符号、产生式集;与文法相关的概念,字符,正则闭包,积(连接),或,空集,产生式,推导,直接推导,句子,句型,语言,最左推导,最右推导(规范推导);学会用文法来描述语言及通过文法能分析该文法所描述的语言;语法树及二义性的概念、能通过画语法树来分析一个文法描述的语言是否具有二义性;上下文无关文法的定义和正规文法的定义,能判断一个语言的文法是哪一类文法。
编译原理期末复习
编译原理期末复习编译原理是计算机科学与技术专业的一门重要基础课程,它研究的是程序设计语言在计算机上的实现方式。
编译原理的学习主要涉及到词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等内容。
针对这些方面,下面将对编译原理的重要内容进行总结和复习。
一、词法分析词法分析是编译过程的第一步,其主要目的是将源程序中的字符序列划分成词法单位。
常用的词法单元有关键字、标识符、常数、运算符、界符等。
词法分析通过有限自动机或正则表达式来实现。
二、语法分析语法分析是将词法分析阶段生成的词法单元流转化为一个抽象语法树。
语法分析的主要工作是根据给定的语法规则,将输入串分析成语法树。
语法分析有两种主要方法:基于文法的自上而下的分析和基于文法的自下而上的分析,常用的算法包括LL(1)、LR(1)、SLR(1)和LALR(1)等。
三、语义分析语义分析是对语法分析的结果进行语义检查和语义动作的计算。
语义分析的主要任务是检查源程序是否符合语义规则,计算符号的类型和值,并生成中间代码。
语义分析常用的方法包括语义制导翻译和符号表的建立。
四、中间代码生成中间代码是指在编译过程中生成的一种可以被多次优化和被不同目标代码生成程序使用的代码。
中间代码生成的目的是将源程序翻译成其中一种中间形式,便于进一步优化和生成目标代码。
中间代码生成的方法有三地址码、四地址码和虚拟机代码等。
五、代码优化代码优化是编译过程中的重要环节,其主要目的是对中间代码进行优化,使得生成的目标代码更加高效和紧凑。
代码优化使用各种数据流分析、指令调度和寄存器分配等技术,常用的优化方法有常量传播、公共子表达式消除、代码移动和死代码消除等。
六、目标代码生成目标代码生成是将中间代码转化为目标机器代码的过程,目标代码生成需要考虑目标机器的特性和限制。
目标代码生成包括指令选择、寻址方式的选择和寄存器分配等步骤。
常用的技术有基于各种寻址方式的代码选择算法、寄存器分配算法和指令调度算法等。
编译原理复习要点
基础知识:(选择、填空、判断,共50')第一章:(14')1.编译程序是现代计算机系统的基本组成部分之一2.一个计算机系统中通常配置多个高级语言的编译程序3.在一个计算机系统中可为某些高级语言配置多个不同性能的编译程序4.编译程序是一种语言翻译程序,其功能是把一种语言编写的程序翻译成另一种语言的等价程序5.被编译的程序称为源程序,编译后的等价程序称为目标程序6.编译程序的任务就是将源语言程序翻译成等价的目标语言程序7.通常将编译过程分为六个阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。
8.词法分析的主要任务是从左至右扫描字符序列,并按照此法规则识别出一个个的单词9.单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。
10.计算机语言中,单词的种类通常有保留字、标识符、数、算符、界符等11.语法分析的主要任务是:按照语言的语法规则,把词法分析所得的单词序列分解成各类语法成分。
12.词法分析和语法分析都是对源程序进行结构分析,但二者是有区别的。
13.语义分析的主要功能是审查源程序有无语义错误,伪代码生成阶段收集类型信息。
14.中间代码生成阶段的主要任务是,把源程序转换成一种中间代码15.中间代码是一种结构简单、含义明确的记号系统16.中间代码可以设计成多种形式,其设计原则有两点:一是容易生成,二是容易转换成目标代码17.代码优化的主要任务是对中间代码进行改造,使生成的目标代码更为高效18.目标代码生成阶段的任务是把中间代码转换成特定机器上的绝对指令代码或者可重定位的指令代码或者汇编指令代码19.在编译过程的每个阶段中都含有出错处理和表格管理的工作20.编译程序的结构可以按功能分为八个模块,即词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序和目标代码生成程序,此外还有与上述每个阶段都有关系的出错处理程序和表格管理程序。
21.按照编译程序的工作主要是与源语言有关还是与目标机有关,编译过程也可前端和后端22.前端的工作主要依赖于源语言而与目标机无关,包括词法分析、语法分析、语义分析、中间代码生成以及每个阶段中的出错处理和表格管理工作,还包括代码优化阶段的部分工作23.后端的工作主要与目标机有关而与源语言无关,主要是代码生成及相关的出错处理和表格管理工作24.编译过程中,对源程序或者中间语言程序从头至尾扫描一次并完成相应工作的过程称为“一遍”或者“一趟”25.解释程序是另一种语言处理程序,其工作特点是边分析边执行,不生成目标代码。
《编译原理》重点知识总结
《编译原理》重点知识总结一、编译器的基本概念1.编译器的定义:编译器是一种将高级语言程序转换为低级语言程序的软件工具。
2.编译器的主要任务:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等。
二、词法分析1. 词法分析的任务:将源程序的字符序列转换为有意义的词法单元(token)序列。
2.词法单元的分类:关键字、标识符、运算符、界限符等。
3.词法分析器的实现方法:有限状态自动机(DFA)、正则表达式、词法规则等。
三、语法分析1.语法分析的任务:根据语法规则,将词法单元序列转换为抽象语法树(AST)。
2.语法分析器的实现方法:上下文无关文法(CFG)、递归下降分析、LL(1)分析器、LR分析器等。
四、语义分析1.语义分析的任务:对抽象语法树进行静态语义检查,确定语法结构的含义和约束。
2.语义分析的主要内容:类型检查、作用域分析、常量折叠、中间代码生成等。
五、中间代码生成1.中间代码的定义:介于源程序和目标代码之间的一种抽象表示形式,可以是三地址代码、四元式、虚拟机代码等。
2.中间代码生成的方法:递归下降、语法制导翻译、语法制导的翻译方案等。
六、代码优化1.代码优化的目的:提高程序的执行效率和资源利用率,减小目标代码的体积。
2.常见的代码优化技术:常量传播、代码移动、循环优化、函数内联等。
七、目标代码生成1.目标代码的定义:能够被底层硬件直接执行的机器指令。
2.目标代码生成的方法:模板匹配、基本块划分、寄存器分配等。
八、词法分析器和语法分析器的生成工具1. Flex:用于生成词法分析器的工具。
2. Bison:用于生成语法分析器的工具。
3. Lex:Flex的前身,用于生成词法分析器。
4. Yacc:Bison的前身,用于生成语法分析器。
九、常用的编程语言1. 静态类型语言:C、C++、Java、C#等。
2. 动态类型语言:Python、JavaScript、Ruby等。
3. 函数式编程语言:Lisp、Haskell、Erlang等。
《编译原理》答疑
《编译原理》应知应会、难点答疑1、编译程序前三个阶段完成的工作是词法分析、语法分析、语义分析和中间代码生成。
2、代码生成阶段的主要任务是把中间代码变换成依赖具体机器的目标代码。
3、扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即单词。
4、通常把编译过程分为分析前端与综合后端两大阶段。
词法、语法和语义分析是对源程序的分析,中间代码生成、代码优化与目标代码的生成则是对源程序的综合。
5、程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即静态存储分配方案和动态存储分配方案。
6、LR(0)分析器:所谓LR(0)分析,是指从左至右扫描和自底向上的语法分析,且在分析的每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再向前查看0个输入符号,就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作(是移进还是按某一产生式进行归约等)。
7、代码优化的目的是节省时间和空间。
8、词法分析:词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则,从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,并转换成统一的内部表示(token),送给语法分析程序。
9、语法树:句子的树结构表示法称为语法树(语法分析树或语法推导树)。
给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的语法树。
10、语言和文法:文法就是语言结构的定义和描述,是有穷非空的产生式集合。
简单的说,文法描述的语言是该文法一切句子的集合。
11、编译程序的工作分为那几个阶段?答:词法分析、语法分析和语义分析是对源程序进行的分析(称为编译程序的前端),而中间代码生成、代码优化和代码生成三个阶段合称为对源程序进行综合(称为编译程序的后端),它们从源程序的中间表示建立起和源程序等价的目标程序。
12、编译程序和高级语言有什么区别?答:汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器语言表示的目标程序(这个过程即编译),才能由计算机执行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章从本质上来说,程序设计语言是按一定规则排列的符号集合,而编译程序就是把这些符号集合变成机器指令的转换器,编译程序又称为编译器。
程序设计语言【高级语言,低级语言(机器语言和汇编语言)】编译过程:词法分析,语法分析,中间代码生成,优化,目标代码产生。
三元式定义为如下形式:(op, a1, a2)其中op为操作码或运算符,a1和a2为操作数或运算分量。
编译: 将高级语言程序翻译成另一种语言的等价程序。
解释:翻译一句执行一句,边翻译边执行,直到程序结束。
与编译的区别:不生成等价的目标代码程序。
优点:解释方式便于程序的调试。
(编译方式只需翻译一次,且目标程序的执行速度快)(1)词法分析主要任务:从左到右扫描源程序,逐一读入构成源程序的字符流,识别出其中的一个个单词,识别出的单词称单词符号,也简称符号。
单词是高级语言程序中有实际意义的最小语法单位。
(2)语法分析任务“组词成句”,根据单词分析出组成源程序的各类语法单位,并指出其中的语法错误。
语法单位——由源程序的单词构成(如表达式、语句、……乃至整个程序。
)语法单位的构成规则——语法规则。
一个语言的词法规则和语法规则定义了一个程序的形式结构。
语法单位的表示——语法树(3)语义分析和中间代码生成任务:分析出语法单位具体的动作意义,进行初步翻译,生成与源程序等价的中间代码程序。
语义: 定义一个程序所表示的意义,用语义规则描述。
中间代码:指令应结构简单、含义明确,易于实现源程序——中间代码——目标代码三者之间的转换。
中间代码常用形式:逆波兰式、三元式、四元式等。
四元式:(运算符,对象1,对象2,结果)例:z=x+a%3*y(1)(% a 3 t1 )(2)(* t1 y t2 )(3) (3)(+ x t2 t3 )(4)(= t3 _ z )(4)代码优化任务:对中间代码进行等价的加工变换,以便生成更有效更节省时间和空间的目标代码。
例:z=x+a%3*y 的四元式序列:(1)% a 3 t1 )(2)(* t1 y t2 )(3)(+ x t2 z )(5)目标代码生成任务:将中间代码程序变换成目标代码程序。
2.按“遍”组合方式“遍”:对源程序或等价的中间语言程序从头到尾扫描,完成规定的任务,并生成新的中间结果或目标程序,称一“遍”。
编译程序的构造与三个方面有关:源语言,目标语言,编译方法。
第二章形式语言与自动机理论基础主要内容:语言和文法、有限自动机、正则表达式。
语言:符号串的集合。
元素——符号串——该语言的一个句子。
字母表——符号串中符号的来源。
【例2-1】Σ={a,b,c,……,z},x =“laugh”,则|x|=5Σ={I,you,he,am,is,are,a,student},y=“I am a student”,空格不计算长度,则|y|=4。
空符号串:无任何符号的串,简称空串,用ε表示,|ε|=0【例2-4】若U = { a,b },V = { c,d }则UV = { ac,ad,bc,bd }闭包:若指定字母表Σ,则Σ*表示Σ上的所有有穷长的串的集合。
Σ* =Σ0∪Σ1∪Σ2∪……∪Σn∪……Σ* 称为集合Σ的闭包。
Σ+ =Σ1∪Σ2∪……∪Σn∪……Σ+ 称为集合Σ的正闭包。
成立的等式:Σ* =Σ0∪Σ+ ,Σ+ =ΣΣ* =Σ*Σ若符号串x 是Σ*的元素,则表示为x∈Σ* ,否则x Σ* 。
【例2-5】Σ={0,1} Σ*={ε,0,1,00,10,11,000,001,100,………}文法的形式定义:1:终结符用VT 表示、2:非终结符用VN 表示、3:规则α→β、4:文法定义:一个文法是一个四元组G(VN ,VT ,S ,P)VN :非终结符集(非空);VT :终结符集(非VN∩VT=Ø ;S :识别符号或开始符号,S ∈VN ,且至少在一条规则中作为左部出现; P : 规则(产生式)的集合。
用V 表示 VN ∪VT ,称G 的字母表或词汇表。
【例2-7】 有一文法G (VN ,VT ,S , P )其中: VN = { S } VT = { 0,1 } 开始符号是 S P = { S →0S1, S →01 }2. 扩展的BNF 表示法(1)“{ }” 表示符号串t 的多次重复,n 为重复的最小次数,m 为重复的最大次数,省略n 、m 表示t 可以重复0到任意多次。
【例2-9】文法规则 S →0S1|01简化为 S →0(S1|1) 或 S →(0S|0)1 或 S →0(S| ε)1(3)“[ ]”:[t]表示符号串t 可选(即可有可无)。
【例2-11】C 语言条件语句的语法图:文法相关概念:定义1:如α→β是文法G (VN ,VT ,S , P )的一条规则, γ、δ∈V * ,若有符号串 v 、w 满足 v =γαδ, w =γβδ 则称v (应用规则α→β)直接产生w ,或称 w 是 v 的直接推导,反过来称 w 直接归约 到 v ,记作 v ⇒ w 。
【例2-13】 对文法G : S →0S1 S →01 有直接推导序列: S ⇒ 0S1⇒ 00S11⇒000111定义2:如果存在直接推导序列:v = w0 ⇒ w1⇒ w2 ⇒……⇒ wn = w 则称v 推导(产生)出w ,推导长度为n ,反过来称w 归约到v ,记作 v ⇒ w 。
如果有 v ⇒ w ,或 v = w ,则记作 v ⇒ w 。
【例2-14】 S ⇒ 0S1 ⇒ 00S11 ⇒ 000111 S 推导出 “ 000111” , 推导长度3 “ 000111” 归约到 S , 表示成 S ⇒ 0001112.句型和句子定义: 文法G (VN ,VT ,S ,P ),若符号串x 可由开始符号S 推导出(S ⇒ x ),则称 x 是 G 的一个句型,若x 仅由终结符组成,则称 x 为G 的一个句子。
3.形式语言定义:文法描述的语言是该文法的所有句子的集合,记作 L(G)。
集合形式表示:L(G) = { α | S ⇒α ∧ α∈VT* }【例2-16】文法G : S →0S1 S →01 描述的语言:L(G)= { 0n 1n | n ≥1 }4.文法的等价性 定义:若有文法G1、G2,它们描述的语言相同,即 L( G1 ) = L( G2 ) 则称两文法 G1 和 G2 等价。
m n t }{【例2-17】有文法G[A]:A→0R A→01 R→A1 描述的语言L(G) = { 0n1n | n≥1 }。
定义:若有文法G1、G2,它们描述的语言相同,即L( G1 ) = L( G2 )则称两文法G1 和G2 等价。
5. 递归规则和递归文法递归规则:形如P→α1Pα2的规则称递归规则。
若α1=ε则称左递归规则;若α2=ε则称右递归规则。
递归文法:含有递归规则的文法称递归文法。
P⇒α1Pα2的递归称间接递归,含间接递归的文法也是递归文法。
文法分类:1、0型文法(无限制文法或短语文法)定义2-7 设G=(VN,VT,P,S),如果它的每个产生式α→β满足α、β∈(VN∪VT)*,且α至少含有一个非终结符,则G是一个0型文法。
结论:0型文法的能力相当于图灵机。
任何0型语言都是递归可枚举的,反之,递归可枚举集也必定是一个0型语言。
2、1型文法(上下文有关文法)定义2-8 设G=(VN,VT,P,S),如果它的每个产生式α→β满足|β|≥|α|(仅S→ε除外),则G是一个1型文法。
另一种描述:文法的产生式形如α1Aα2 →α1βα2 其中A∈VN,α、β∈(VN∪VT)*且β≠ε。
【例2-18】1型文法G[S]:S →xSYZ | xYZ yZ→yzxY→xy ZY→YZyY→yy zZ→zz3、2型文法(上下文无关文法)定义2-9 设G=(VN,VT,P,S),如果它的每个产生式α→β中的α是一个非终结符,则G是一个2型文法或上下文无关文法。
【例2-19】2型文法G[S]:S→E T→P | T﹡P F→i | (E) E→T | E+T P→F | F↑P4、3型文法(正规文法或正则文法)定义2-10 设G=(VN,VT,P,S),如果它的每个产生式均形如A→aB 或A→a 其中A、B∈VN,a∈VT。
【例2-20】3型文法G[S] :S →aA A →aA A →aS →a A →dA A →d消除空产生式定理:对任一文法G1,可构造文法G2,使得L(G1)=L(G2),且G2中无空产生式。
证明:根据G1,构造G2的方法如下:(1) ={A | A}(2) ={A | A +, +}。
(3) 从G1中删除所有空产生式。
(4) 从G1中删除只能导出空串的非终极符。
(5) 对于文法中任意产生式A X1X2…Xi-1XiXi+1…Xna.若Xi VT,不做动作;b.若Xi VN-c.若Xi A X1X2…Xi-1Xi+1…Xn;例:A aBcD B b | D BB | d详见Page18消除不可达产生式定理:对任一文法G1都可以构造文法G2,使得L(G1)=L(G2),且G2中的每个非终极符必出现在它的某个句型中。
证明:根据G1,构造文法G2的方法如下:(1) ={Z | Z是文法的开始符}。
(2) ={B | A xBy G1, B VN, A}(3) 若一个产生式左部非终极符A A为左部的所有产生式。
消除特型产生式注:形如A->B(B为非终极符)的产生式为特型产生式,特型产生式在语法分析中会降低分析速度,因此应该消除。
定理:对任一文法G1,可以构造文法G2,使得L(G1)=L(G2),且在G2中没有特型产生式。
证明:构造无特型产生式的文法G2的方法如下:(1) 对文法G1中任意非终极符A,求集合A={B | A+B, B VN}。
(2) 若B A,且B G中的一个非特型产生式,则补充如下规则A(3) 去掉文法G1中的所有的特型产生式。
(4) 去掉新的文法中的无用产生式。
例:A B | D | aBB C | bC cD B | d消除左递归一个文法含有下列形式的产生式时(1)A Aa |b A VN, a ,(VN VT)*(2) A B| B A| b A,B VN, a ,,(VN VT)* 其中(1)为直接左递归,(2)为间接左递归,因此文法中只要有A+A…,则称文法为左递归的。
文法的化简:文法应没有多余的或有害的规则。
化简:(1) 删除形如A→A的产生式。
(2) 删除不可到达的文法符号及其相应的产生式。
(3) 删除不可终止的非终结符及其相应的产生式。
【例2-21】文法G:S →aS | W | U U → a V →bV | ac W →aW化简后的文法G:S →aS | U U →aW 是不可终止的、V 是不可到达的。