09级编译原理复习纲要
- 格式:ppt
- 大小:358.50 KB
- 文档页数:30
编译原理复习重点含答案编译原理复习重点编译原理是计算机科学中的一门重要课程,它研究的是如何将高级语言程序转化为机器语言的过程。
在编译原理的学习中,我们需要掌握一些重要的概念和技术,以便能够理解和应用编译器的工作原理。
本文将重点介绍编译原理的几个重要主题,并提供相应的答案供参考。
一、词法分析词法分析是编译器的第一个阶段,它的任务是将输入的字符序列划分为一个个有意义的词素(token)。
词法分析器通常使用有限自动机(DFA)来实现,其工作原理是将输入字符序列逐个读入,并根据事先定义好的词法规则进行匹配和识别。
常见的词法单元包括关键字、标识符、常量、运算符等。
常见的词法规则包括:1. 关键字:例如if、while、for等。
2. 标识符:由字母、数字和下划线组成,且以字母或下划线开头。
3. 常量:包括整数常量、浮点数常量、字符常量和字符串常量等。
4. 运算符:例如加法运算符+、减法运算符-等。
5. 分隔符:例如逗号、分号等。
词法分析的结果是一个个词法单元,每个词法单元包含一个词素和对应的词法单元类型。
例如,对于输入程序"int a = 10;",词法分析的结果可能是[("int", "关键字"), ("a", "标识符"), ("=", "运算符"), ("10", "整数常量"), (";", "分隔符")]。
二、语法分析语法分析是编译器的第二个阶段,它的任务是将词法分析器输出的词法单元序列转化为抽象语法树(AST)。
语法分析器通常使用上下文无关文法(CFG)来描述语言的语法结构,并使用递归下降、LL(1)分析、LR分析等算法进行分析。
常见的语法规则包括:1. 表达式:例如算术表达式、布尔表达式等。
编译原理复习总结⏹题型:填空、选择、简答题、综合题第一章编译器概述复习要点:1、编译程序的总框架,编译程序工作的大致过程。
2、理解一下概念:编译、解释、翻译、编译前端、后端、遍⏹计算机执行用高级语言编写的程序主要有两种途径:解释和编译⏹编译:专指由高级语言转换为低级语言⏹编译和解释的区别:是否产生目标程序⏹编译程序的五个阶段:词法分析、语法分析、语义分析和中间代码生成、优化、目标代码生成⏹此外还包括:表格处理和出错处理第二章词法分析复习要点:1、了解词法分析器的任务2、掌握状态转换图3、正规式:与正规集的转换,判断等价4、有限自动机:NFA确定化、DFA最简化、正规式到DFA的转换⏹词法分析器(扫描器)的任务:从源程序中识别出一个个具有独立含义的最小语法单位。
⏹扫描器的输出格式:二元式序列(单词种别,单词符号的属性值)⏹状态转换图:结点代表状态,用圆圈○表示。
状态之间用箭弧→连结,弧上的标记指明在射出弧的结点状态下可能出现的输入字符初始状态接受状态⏹正规式和有限自动机●正规式和正规集的转换●给出正规式,要求写出相应的NFA、DFA●给出正规集,要求写出相应的NFA、DFA1、正规式和正规集●三种运算:“∣”读为“或”,“∙”读为“连接”“*”读为“闭包”●转换●正规式等价:两个正规式所表示的正规集相同,则称两个正规式等价令Σ是一个有限字母表,则Σ上的正规式及其表示的集合递归定义如下:1. ε和∅都是Σ上正规式,它们表示的正规集为{ε}和∅2. 若a是Σ上的字符,则a是正规式,它表示的正规集为{a}3. 若r和s都是Σ上的正规式,他们表示的正规集记为L(r)和L(s),则(a)r|s是正规式,表示集合L(r)∪L(s),(b)rs是正规式,表示集合L(r)L(s),(c)r*是正规式,表示集合(L(r))*,(d)(r)是正规式,表示的集合仍然是L(r)。
(加括弧改变优先级、结合性)⏹有限自动机1、确定的有限自动机M=(S,Σ,δ,S0,F)其中:1. S —有穷状态集2. Σ—输入字母表3. δ—映射函数(也称状态转换函数) S×Σ→S δ(s,a)=S‟ , S, S‟ ∈S, a∈Σ4. s0 —唯一的初始状态s0 ∈S5. F—终止状态集Z⊆S2、不确定的有限自动机M= (S, Σ,δ,S0, F) 其中:1. S —有限状态集(非终极符集合);2. Σ—输入字母表(终极符集合);3. δ—转换函数S ⨯ (⋃∑{ε}) →P(S),即S ⨯∑*到S的幂集(2S)的一种映射;4. S0 —唯一的初始状态集合(非空)S0∈S5. F—终止状态集合F⊆SDFA是NFA的特例,对于每个NFA M存在一个DFA M”,使L(M)=L(M”)。
《编译原理》知识点总结目录第一章引论第二章高级语言及其语法描述第三章语法分析——自上而下分析第四章属性文法和语法制导翻译第五章语义分析和中间代码产生第六章优化第一章引论一.编译程序(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)单词符号是语言中具有独立意义的最基本结构。
一、概述1. 编译方式与解释方式区别:是否生成目标代码2. 编译程序总框架二、词法分析1.状态转换图的功能:识别(接受)一定的符号串(单词)2.状态转换图的程序实现的思路:为每个状态结点都编写一个子程序3.字母表的概念:一般用∑表示4.闭包的概念:闭包V*中的每个字都是由V中的字经过若干次连接而成的5.正则闭包V+的概念:是V上所有符号串的集合6.∑*定义:表示∑上所有字的全体,空字ε也包括在其中7.∑+空字ε不包含,非ε8.ε,{ },{ε}之间的区别9.ε所对应的正规集为{ε}10.正规式与正规集的定义:知道如何用正规式表示一个正规集11.简述NFA和DFA的定义与区别12.若M的某些结点既是初态结点又是终态结点,或者存在一条从某初态结点到某个终态结点的ε通路,那么空字ε可为M所识别13.正规式与优先自动机的等价性14.定理2.对于∑上的每一个正规式V,存在一个∑上的DFA M,使得L(M)=L(V)15.DFA M的化简的概念和方法:终态和非终态是可区别的,因为终态可以读出空字ε,而非终态不能读出空字ε16.课后作业一个例题17.构造一个DFA,它接受∑={x,y}上所有倒数第二个字符为y的字符串三、语法分析(1)基本定义1.上下文无关文法的定义2.句型、句子的概念3.文法和语言的对应关系,给出文法构造语言,文法G产生的句子的全体是该文法的语言4.语法分析树与二义性:判断文法的二义性方法:如果一个文法含有二义性的句子(对应两棵不同的语法树),则称该文法是二义性文法5.3型文法是正规文法、正则文法、线性文法6.2型文法也称为称为上下文无关文法7.若一个文法是递归的,则由它产生的语言的句子个数是无限的(2)自上而下8. 文法左递归的定义9. 消除文法的左递归的方法:直接左递归10. 消除回溯的方法:提取公共左因子11. 递归下降分析法的概念,应满足什么条件?12. 递归下降法对文法的每个非终结符构造一个相应的子程序13. 预测分析法:给文法构造预测分析表:消除左递归、消除回溯、First集、Follow集。
《编译原理》期末复习资料【题1】(此题中第一个空愉入Q可臥省略,V即①可以眷略渝Ia Ib① 1,2,32,3,42,3,5② 2,3,42,3,4,6,7,82,3,5③ 2,3,52,3,42,,3,5,6,7,8④ 2,3,4,6,7,82,3,4,6,7,82,3,5,7,8⑤ 2,3,5,6,7,82,3,4,7,82,3,5,6,7,8⑥ 2,3,5,7,82,3,4,7,82,3,5,6,7,8⑦ 2,3,4,7,82,3,4,6,7,82,3,5,7,8Ia Ib1232431. ( a|b) * (aa|bb) (a|b) *画出状态转换图。
(1)A={1,2,3} , B={4,5,6,7} Aa={2,4} X(2)A={1,3} , B={2} , C={4,5,6,7} Aa={2} B, Ab={3,5} X(3)A={1} , B={2} , C={3},D={4,5,6,7}(单元素可以不用看,必有,古先看D), Ba={4} D , Bb={3} C, Ca={2} Cb={5} C,则有2. ( a*|b* ) b (ba) *的状态转换图。
Ia lb① 1,2,3,42,43,4,5,6,8②2,42,45,6,8③ 3,4,5,6,8---3,4,5,6,7,8④ 5,6,8---7⑤ 3,4,5,6,7,86,83,4,5,6,7,8⑥76,8---⑦6,8---7la lb1232243—54—657567—7—6abA B CB D CC B DD D D新的状态转换图如下:化简:(用终结状态与非终结状态,然后输出状态一致分一类) (1) A={1,2,6} , B={3,4,5,7} Aa={2} X(2)A={1,2} , B={6} , C={3,4,7} , D={5} Cb={5,6} X(只要有一个不属于任何一个集合,就不行) (3) A={1,2} , B={6} , C={3} , D={4,7} , E={5} Ab={3,4} X(4) A={1} , B={2} , C={6} , D={3} , E={4,7} , F={5}Aa={2} B , Ab={3} D , Ba={2} B , Bb={4}正则表达式: a , a | b, ab,(ab) , (a |b) ,a(a|b) , a | a b,a | ab*Ca={7} E , Db={5}F , Eb={6} C , Fa={7}E , Fb={5} Fab A B D B B E C E --- D --- F E--- C FEFb[注意事项]:[知识要点]:a , a, aa, aaa,a a ;a |b(a或b) a,b ;ab(a禾口b) ab ;ab a | ba | b合}a | ab ab的情2aab开始2ac b开躺终结a终结幵始ab开始终结2{a 和若 ab, abab, ababab a |ba a |b a, b, ab,aab, aaab, aaaab a | b a | ba | a ba,b, aab, aabb, baba个(包括 o{a 和a 后跟若 a | ba aaa |ba, ab, abb, abbb,abbbb,个a (包括0的情形)后跟一个 b 构成的符号串集7Vrvb 构成的符号串集合} 状态转换图(有穷状态自动机)是最左边一个字母一定是 a ,其余字母为a 、b 的任意组合,不包括终结【题2】1•求如下简单算术表达式文法G enr中语法变量的FOLLOW集。
编译原理复习提纲编译原理的复习提纲1.编译原理=形式语言+编译技术2.汇编程序:把汇编语言程序翻译成等价的机器语言程序3.编译程序:把高级语言程序翻译成等价的低级语言程序4.解释执行方式:解释程序,逐个语句地模拟执行翻译执行方式:翻译程序,把程序设计语言程序翻译成等价的目标程序5.计算机程序的编译过程类似,一般分为五个阶段:词法分析、语法分析、语义分析及中间代码生成、代码优化、目标代码生成词法分析的任务:扫描源程序的字符串,识别出的最小的语法单位(标识符或无正负号数等)语法分析是:在词法分析的基础上的,语法分析不考虑语义。
语法分析读入词法分析程序识别出的符号,根据给定的语法规则,识别出各个语法结构。
语义分析的任务是检查程序语义的正确性,解释程序结构的含义,语义分析包括检查变量是否有定义,变量在使用前是否具有值,数值是否溢出等。
语法分析完成之后,编译程序通常就依据语言的语义规则,利用语法制导技术把源程序翻译成某种中间代码。
所谓中间代码是一种定义明确、便于处理、独立于计算机硬件的记号系统,可以认为是一种抽象机的程序代码优化的主要任务是对前一阶段产生的中间代码进行等价变换,以便产生速度快、空间小的目标代码编译的最后一个阶段是目标代码生成,其主要任务是把中间代码翻译成特定的机器指令或汇编程序编译程序结构包括五个基本功能模块和两个辅助模块6.编译划分成前端和后端。
编译前端的工作包括词法分析、语法分析、语义分析。
编译前端只依赖于源程序,独立于目标计算机。
前端进行分析编译后端的工作主要是目标代码的生成和优化后端进行综合。
独立于源程序,完全依赖于目标机器和中间代码。
把编译程序分为前端和后端的优点是:可以优化配置不同的编译程序组合,实现编译重用,保持语言与机器的独立性。
7.编译程序的分类:1.诊断型编译程序(找错)2.优化型编译程序(产生空间小速度快)3.交叉型编译程序(一些设备上的嵌入式应用软件一般是在另外类型的计算机上设计和开发,经过编译、运行、和测试后再经过一次编译产生出在上述设备上可以运行的目标代码这类编译程序称之为交叉型编译程序)4.可变目标型编译程序Lex是通用的词法分析生成器,它的输入是描述单词结构的正规式,输出的就是词法分析程序。
第一章1.编译的5个阶段:词法分析、语法分析、语义分析与中间代码生成、优化、目标代码生成2.翻译程序:能够把某种语言转换成另一种语言的程序,而两者在逻辑上是等价的3.解释程序:以源程序为输入,不产生目标程序,而是边解释边执行源程序本身的程序。
4.诊断编译程序:帮助程序开发和调试的程序。
5.优化编译程序:提高目标代码效率的程序。
6.运行编译程序的是宿主机,运行目标代码的是目标机。
7.交叉编译:编译程序产生不同于宿主机的目标代码。
8.可变编译程序:不需要重写编译程序中与机器无关的部分就能改变目标机。
9.程序语言由语法和语义两方面定义。
10.语句包括:说明性语句、执行性语句11.子程序传参方式:传值、传地址、传名12.空间分配分方式:静态存储分配、动态存储分配13.表格管理:对各种表格进行管理,包括表格的构造、查找、修改、删除、插入等;词法分析14.词法分析:把源程序作为字符串进行扫描,根据单词词法,识别出所有单词,过滤无用符,并检查是否为合法的单词。
15.词法分析的工具:正规式、有限自动机。
16.单词一般分为如下几种:基本字,标识符,常数,算符,界符。
17.词法规则:规定了形成单词的规则;如常数,标识符,基本字,算符等。
18.识别单词符号的方法:超前搜索19.源程序的预处理:过滤无关的符号。
20.状态图由三种结构构成:分支结构、循环结构、终结点21.LEX语言源程序由两部分组成:正规式辅助定义式、识别规则语法分析22.语法分析:根据语言的语法规则,从单词符号串中识别出各种语法单位,进行句子分析,并检查整个输入字串是否为合法的程序。
23.语法=词法规则+语法规则24.语法规则:规定了由单词构造更大语法单位的规则;如表达式,短语,语句,程序等。
25.语法分析方法:自上而下(算符优先)、自下而上(递归下降)26.重要的语法单位:程序,子程序,语句,短语,表达式等27.上下文无关文法组成:终结符号、非终结符号、开始符号、产生式28.句柄.:一个句型的最左直接短语。