编译原理资料汇总
- 格式:doc
- 大小:93.50 KB
- 文档页数:12
编译原理知识点总结编译原理是计算机科学中的一个重要领域,它研究的是将高级程序语言转化为可执行目标代码的原理和方法。
在软件开发过程中,编译器起着至关重要的作用,因此了解编译原理的知识点对于理解和优化程序的性能至关重要。
1. 词法分析:词法分析是编译器的第一步,它将源代码划分为一个个的词法单元,如关键字、标识符、运算符等。
词法分析器通过正则表达式和有限自动机来实现,可以有效地将源代码转化为词法单元流。
2. 语法分析:语法分析是编译器的第二步,它通过语法规则将词法单元流转化为抽象语法树(AST)。
语法分析器使用上下文无关文法来描述语言的语法结构,并通过LL(1)分析、LR(1)分析等算法来构建抽象语法树。
3. 语义分析:语义分析是编译器的第三步,它对抽象语法树进行语义检查和类型推断。
语义分析器会检查变量的作用域、类型是否匹配等语义错误,并生成中间代码或目标代码。
4. 中间代码生成:中间代码生成是编译器的一项重要任务,它将抽象语法树转化为中间表示形式,如三地址码、四地址码等。
中间代码是一种抽象的低级语言,便于后续的优化和目标代码生成。
5. 代码优化:代码优化是编译器的关键环节,它通过对中间代码进行分析和优化,提高程序的执行效率和资源利用率。
常见的代码优化技术包括常量折叠、循环优化、函数内联等。
6. 目标代码生成:目标代码生成是编译器的最后一步,它将中间代码转化为目标机器代码。
目标代码生成器根据目标机器的特性和指令集,生成可执行的目标代码。
7. 符号表管理:符号表是编译器中用于管理变量、函数等符号信息的数据结构。
符号表包含了符号的名称、类型、作用域等信息,编译器在词法分析、语法分析和语义分析阶段使用符号表进行符号的查找和管理。
8. 错误处理:错误处理是编译器中一个重要的组成部分,它负责检测和报告源代码中的错误。
编译器需要能够准确地定位错误的位置,并给出有意义的错误信息,帮助程序员快速定位和修复错误。
编译原理涉及的知识点非常广泛,上述仅是其中的一部分。
编译原理概念总结编译原理是计算机科学中的一个重要领域,研究如何将高级语言程序翻译成计算机能理解和执行的目标代码。
它涉及到词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等各个阶段。
编译原理的核心目标是实现高效可靠地将高级语言程序转换为等价的机器代码,并能在目标机器上正确运行。
编译器是实现这一目标的关键工具,它将高级语言程序的源代码作为输入,经过多个阶段的处理,最终生成可执行的目标代码。
在编译原理中,词法分析是第一个阶段,它将源代码分解为若干个词法单元,如标识符、关键字、运算符等。
词法分析器通过使用正则表达式和有限自动机等方法,辨别不同的词法单元,为后续的语法分析提供输入。
语法分析是编译过程的第二个阶段,它将词法单元组织成按照语法规则形成的语法结构。
语法分析器使用上下文无关文法描述语言的语法规则,并通过构建语法树或语法分析表等数据结构来表示和分析各种语法结构。
语义分析是编译过程的第三个阶段,它对语法结构进行语义检查和解释,确保程序在语义上是正确的。
语义分析器会对数据类型、作用域、类型转换等进行检查,并生成中间代码以供后续的代码生成和优化。
中间代码生成是编译过程的第四个阶段,它将源代码转换为与机器无关的中间代码表示形式。
中间代码是一种类似于汇编语言的抽象表示形式,它包含了源代码的各种高级结构,如条件语句、循环语句等,但与具体的机器架构无关。
代码优化是编译过程的第五个阶段,它通过对中间代码进行重写和重组,以提高程序的执行效率。
代码优化器会检测和消除冗余的计算、减少内存访问次数、提前计算常量表达式等,从而减少程序的执行时间和空间开销。
目标代码生成是编译过程的最后一个阶段,它将中间代码转换为目标机器能够执行的机器代码。
目标代码生成器会将中间代码中的各种高级结构转换为机器指令,并进行寄存器分配、指令选择和指令调度等操作,以生成最终的目标代码。
除了以上的主要阶段,编译原理还涉及到其他一些重要的概念和技术,如语法制导翻译、动态内存分配、符号表管理、异常处理等。
编译原理要点整理//红色字体标注的是重点中的重点,大题的归宿第一章引论1.翻译器,编译器的定义2.编译器工作步骤和流程3.编译器前端后端的概念,理解为什么要有前端后端4.“遍”的概念第二章词法分析1.词法分析器的定义2.词法分析器所要完成的任务3.记号,模式,词法单元概念区分4.串的运算(和,连接,指数,闭包,正闭包)5.正规定义6.转换图(注意开始状态和结束状态以及需要将指针回退的状态)7.不确定的有限自动机(NFA)定义8.确定的有限自动机(DFA)定义9.从正规式到NFA(明确通过正规式如何构造连接运算,和运算,闭包运算的NFA)10.此方法产生的NFA的性质11.从NFA到DFA(子集构造法)12.DFA的化简(合并不可区别状态)13.从语言描述直接到DFA14.了解Lex学完本章:能语言描述改写成正规定义,能将正规定义转化为语言描述,给出一个正规式,能转换成相应的NFA,DFA并化简。
第三章语法分析1.上下文无关文法定义2.区分句子和句型3.最左推导&& 最右推导4.分析树5.文法二义性6.消除左递归&& 提左因子7.了解语言鸟瞰(0型文法:短语文法;1型文法:上下文有关文法;2型文法:上下文无关文法;3型文法:正规式)8.FIRST集合&& FOLLOW集合定义及计算方法9.LL(1)文法定义10.了解自上而下的递归下降的预测分析11.自上而下非递归的预测分析(详细明确预测分析器接受某一输入串时的具体过程,明确栈如何变化,输入输出如何变化)12.预测分析表的构造13.句柄的概念14.自下而上的分析方法:用栈实现移近-归约分析(详细明确预测分析器接受某一输入串时的具体过程,明确栈如何变化,输入输出如何变化)15.LR文法和LR分析算法16.构造SLR分析表(从文法构造识别活前缀的DFA(LR(0)项目集规范族),从DFA构造SLR分析表)17.构造规范的LR分析表(从文法构造识别活前缀的DFA(LR(1)项目集规范族),从DFA构造规范的LR分析表)18.构造LALR分析表(从文法构造识别活前缀的DFA(合并同心的LR(1)项目集),从DFA构造规范的LR分析表)(合并同心项目集可能会引起归约-归约冲突,不会引起新的移进-归约冲突)学完本章:能计算FIRST集合和FOLLOW集合;给定一个文法,能判断是否是LL(1)文法,并为其构造分析表;能构造LR(1)文法的三种预测分析表;明确移近归约分析中的每一个步骤,明确栈如何变化。
编译原理编译原理编译器是什么?知识树基本过程词法分析语言正则语言正则定义如何让计算机识别用正则表达式定义的语言NFA 非确定有限自动机DFA 确定有限自动机正则表达式转 NFA直接用 NFA 识别语言直接从正则表达式转 DFA最小化 DFA 的算法语法分析语法的形式化:上下文无关文法推导推导 derivation字符串符号文法语法分析树文法的二义性文法二义性的消除消除左递归消除直接的左递归消除间接的左递归计算 first() 集合计算 follow(A) 集合LL(1) 文法的分析表自底向上的文法分析SLR 文法LR(0) 项扩充文法自动机的过程Closure of Item SetsSLR 分析表的构建(重点)LR(1) 文法构造 LR(1) 分析表缺点LALR 文法语法制导定义基本思想举例语法制导定义继承属性翻译模式再次举例:中缀转后缀扩展文法扩展语法树通过自顶向下的分析来实现先序遍历实现先序遍历Evaluation Order and Dependency Graphs 显式的语法分析树S-属性制导定义L-属性制导定义需要满足三条规则:语义分析和中间代码生成Introduction3 地址代码1. 类型和声明举例来说明翻译过程2. 赋值和表达式类型检查3. 布尔表达式和流控制流控制的语法制导定义布尔表达式的语法制导定义运行时环境内存管理stack 和活动记录活动树活动记录(帧)进程内通信堆管理多线程垃圾回收代码生成指令选择寄存器分配和赋值指令调度抽象目标状态机指令集基本块流图生存期和后续使用信息简单代码生成器代码优化窥孔优化局部优化控制流分析和循环优化消除共同子表达式✔编译器是什么?编译器是一个程序,主要是用来把源程序转换成另外一种计算机语言的程序。
语言编译的全过程:✔知识树编译原理正则语言识别 T oken上下文无关文法CFG 构建语法分析树语法制导翻译生成中间代码代码优化代码生成编译原理是一种语言处理器,它完成了很多工作。
复习汇总一、第一章概述1.文法与自动机的等价1)0型文法—图灵机2)1型文法—线性有界非确定图灵机3)2型文法—非确定下推自动机4)3型文法—有限状态自动机2.编译技术的应用1)语法制导的结构化编辑器2)程序格式化工具3)软件测试工具4)程序理解工具5)高级语言的翻译工具6)等等3.从面向机器的语言到面向人类的语言(结合第二章第9小点理解)1)面向机器的语言:机器指令,汇编语言2)面向人类的语言:通用程序设计语言,数据查询语言,形式化描述语言(正规式,产生式)等等。
4.各语言的分类(结合第二章第9小点理解)1)过程式语言,面向对象语言:通用程序设计语言。
2)函数语言:面向特点领域的,递归特性。
例如LISP语言3)说明性,非算法式语言:LEX/YACC,SQL。
4)脚本式语言:Shell语言5.语言之间的转换(李静PPT41)1)高级语言之间的转换一般称为预处理或转换。
2)高级语言翻译成汇编语言或机器语言称之为编译。
3)把汇编语言翻译成机器语言称之为汇编。
4)将一个汇编语言程序汇编为可在另一台机器上运行的机器指令称之为交叉汇编。
5)把机器语言翻译成汇编语言称之为反汇编。
6)把汇编语言翻译成高级语言称之为反编译。
6.编译器和解释器1)编译器●源程序的翻译和翻译后的程序的运行是两个不同的阶段。
◆编译阶段:用户输入源程序,经过编译器的处理,生成目标程序。
◆目标程序的运行阶段:根据要求输入数据,得出结果。
2)解释器(凡是可以采用编译器的地方均可以采用解释器)●解释器把翻译和运行结合到一起,编译一段源程序,紧接着就执行它。
这种方式称为解释。
7.解释器的优点(对比与编译器)1)具有较好的动态特性。
2)具有较好的移植特性。
8.解释器的缺点(对比于编译器)1)相比于编译器需花费大量的时间。
2)占用更多的内存空间。
9.编译器的工作阶段(结合第二章6小点红色部分理解)1)源程序->词法分析器->语法分析器->语义分析器->中间代码生成器->代码优化器->目标代码生成器->目标代码2)工作过程中的每个阶段均采用了符号表管理器,出错处理器。
编译原理知识点总结在计算机科学领域中,编译原理是一个重要的研究方向。
它涵盖了从源代码到可执行代码的整个过程,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等多个环节。
本文将简要总结编译原理的一些关键知识点。
1. 词法分析:词法分析是编译过程的第一步,它负责将源代码分割成一个个单词或记号。
在词法分析中,需要定义合法的单词或记号的规则,这些规则通常使用正则表达式或有限自动机来表示。
词法分析器还可以去除空格、注释等无关元素,并将分割后的单词传递给下一步的语法分析。
2. 语法分析:语法分析是编译过程的第二步,它负责根据语法规则检查源代码的结构是否符合语法规范。
常用的语法表示方法有文法、语言、语法分析树等。
语法分析器可以通过递归下降、LL(1)分析、LR分析等方法来实现。
语法分析的主要目标是生成抽象语法树,为后续的语义分析做准备。
3. 语义分析:语义分析是编译过程的第三步,它负责检查源代码的语义是否合法,并对其进行解释或翻译。
语义分析的主要任务包括类型检查、作用域分析、绑定检查等。
在语义分析过程中,常用的方法有符号表、语义规则等。
语义分析器可以检测到潜在的语义错误,并生成中间代码或直接对源代码进行转换。
4. 中间代码生成:中间代码生成是编译过程的第四步,它负责将源代码转换成高级语言或低级语言的中间表示形式。
中间代码是介于源代码和目标代码之间的一种抽象表示,可以方便地进行代码优化和目标代码生成。
常见的中间代码表示方法有三地址码、四元式、虚拟机指令等。
5. 代码优化:代码优化是编译过程的一个重要环节,它可以在不改变程序功能的前提下,提高程序执行效率和资源利用率。
代码优化的目标通常包括减少代码体积、提高程序运行速度、减少存储器的使用等。
常见的代码优化技术有常量折叠、复写传播、循环优化等。
6. 目标代码生成:目标代码生成是编译过程的最后一步,它负责将中间代码转换成可执行的目标代码。
目标代码可以是机器语言、汇编语言或其他类似的形式。
编译原理知识点总结编译原理知识点总结编译原理是大学计算机专业的必修科目,也是计算机的基础知识,学好编译原理,有助于更好的进行编程的操作,下面是编译原理知识点总结,一起来看看吧!编译原理知识点总结一编译器简单讲,编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。
一个现代编译器的主要工作流程:源代码(source code) → 预处理器(preprocessor) → 编译器(compiler) → 汇编程序 (assembler) → 目标代码(object code) → 链接器(Linker) → 可执行程序(executables)二工作原理编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。
然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。
也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。
典型的编译器输出是由包含入口点的名字和地址,以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。
一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序三编译器的发展史(1) 20世纪50年代IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。
但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。
与此同时,Noam Chomsky开始了他对自然语言结构的研究。
他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。
Chomsky的`研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。
正如现在所称的Chomsky架构(Chomsky Hierarchy),它包括了文法的四个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特殊情况。
第一章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.句柄.:一个句型的最左直接短语。
第一章1.翻译,是指在计算机中放置一个能由计算机直接执行的翻译程序,它以某一种程序设计语言(源语言)所编写的程序(源程序)作为翻译或加工的对象,当计算机翻译程序时,就将它翻译为与之等价的另一种语言(目标语言)的程序(目标程序)。
2.编译程序与运行系统合称为编译系统。
3.源程序的编译(或汇编)和目标程序的执行不一定在同一种计算机上完成。
当源程序由另一种计算机进行编译(或汇编)时,我们将此种编译(或汇编)称为交叉编译(或汇编)。
4.解释程序也以源程序作为它的输入,它与编译程序的主要区别是在解释程序的执行过程中不产生目标程序,而是解释执行源程序本身。
5.编译程序的主要功能是把用高级语言编写的源程序翻译为等价的目标程序。
6.编译程序的8个组成部分:(1)词法分析程序(也称扫描器)(2)语法分析程序(3)语义分析程序(4)中间代码分析程序(5)代码优化程序(6)目标代码生成程序(7)错误检查和处理程序(8)信息表格的管理程序7.编译程序的逻辑结构:(八个组成部分间的控制流程和信息流程)源程序->(1)词法分析程序->(2)语法分析程序->(3)语义分析程序->(4)中间代码生成->(5)代码优化程序->(6)目标代码生成->目标代码和以上1 2 3 4 5 6 相关联的还有(7)错误检查和处理程序和(8)信息表管理程序。
8.用形如(Class,V alue)的序偶(二元式)作为一个单词的内部表示。
Class表示单词的类别,Value是单词的值。
9.语法分析程序以词法分析程序所输出的用内部编码格式表示的单词序列作为输入,其任务是分析源程序的结构,判别他是否为相应程序设计语言中的一个合法程序。
10.前后文无关文法CFG11.常见的中间代码形式:逆波兰表示、三元式、四元式、树形结构12.目标代码生成程序以语义分析(或优化处理)所产生的中间代码作为输入,其功能是根据前面各阶段对源程序进行分析和加工所得到的有关信息,将中间代码翻译为机器语言或汇编语言形式的目标程序。
13.编译程序的前端:(1)(2)(3)(4)分析部分编译程序所完成的处理工作只依赖源程序,而与运行目标程序的计算机无关。
14. 编译程序的后端:(5)(6) 综合部分只依赖于目标语言15. 抽象语法树 AST第二章1. 把用一组数学符号和规则来描述语言的方式称为形式描述,而把所用的数学符号和规则称为形式语言。
2. 字母表:由若干元素所组成的有限非空集合,其中每一元素称为符号,又称字母表为符号集。
3. 符号串:用字母表中的符号所组成的任何有限序列称为符号串。
4. 把符号串中所含符号的个数称为符号串的长度。
不包含任何符号的符号串称为空符号串。
5. 符号串的前缀、后缀设x 是一个符号串,把从x 的尾部删去若干个(≥0)符号之后所余下的部分称为x 的前缀。
设x 是一个符号串,把从x 的头部删去若干个(≥0)符号之后所余下的部分称为x 的后缀。
X=abc ,则ε、a 、ab 、abc 都是x 的前缀;则ε、c 、bc 、abc 都是x 的后缀。
若x 的前缀(后缀)不是x 本身,则将其称为x 的真前缀(真后缀)。
6. 符号串的子串从一个符号串中删去它的一个前缀和一个后缀之后余下的部分称为该符号串的子串。
x 的任何前缀和后缀都是x 的子串,但子串不一定是x 的前缀或后缀。
ε既是前缀、又是后缀、也是子串。
7. 一个符号串x 与其自身的n-1次连接称为此符号串的n 次方幂。
记作x n定义ε=x 08.字母表A的正闭包A+就是由A中字母所构成的一切符号串的集合,而自反传递闭包A*仅比A+多包含一个空符号串ε9.一个文法G[S]可表示成形如(V N,V T,P,S)的四元式,其中V N,V T,P,均为非空有限集,分别称为终结符号集,终结符号集和产生式集。
S∈V N,是文法的开始符号。
把出现在产生式左部和右部的一切符号组成的集合称为符号集,记做V。
10.如果一个文法中至少含有一个递归的非终结符号,则将此文法称为递归文法。
11.如果一个语言是无限的,则定义此语言的文法必然是递归的。
12.前后文无关文法等价问题是不可判定的,即不存在一种算法,它能判别任意两个前后文无关文法是否等价。
13.把左部变量为A的产生式称为A-产生式14.句型分析,是指构造一种算法,用以判断所给的符号串是否为某一文法的句型。
15.句型分析的方法:自顶向下的分析自底向上的分析16.对于一给定的文法来说,从其开始符号到某一句型,或从一个句型到另一句型的推导序列可能不唯一。
17.把能由最左推导推出的句型称为左句型。
18.把能由最右推导推出的句型称为右句型。
19.最右推导称为规范推导,右句型称为规范句型。
20.最右推导的逆过程是最左规约。
21.最左推导的逆过程是最右规约。
22.最左规约称为规范规约。
23.对于一个给定的语法树而言,它仅对应于唯一的最左推导和最右推导。
24.前后文无关文法是否具有二义性是不可判定的。
25.前后文无关语言的先天二义性也是不可判定的。
26.一个句型的最左直接短语(即规范分析中,最先被规约的子串)称之为此句型的句柄。
27.对于无二义性的文法,它的任何句型都只有唯一的语法树,因而它的任何规范句型都只有唯一的句柄,而且对于某些无二义性的文法,由于其中不含有左部不同而右部相同的产生式,故能确保句柄规约的唯一性。
28.LL分析要求文法无左递归性。
29.算符优先分析要求文法不含有ε-产生式。
30.LR分析要求文法无二义性。
31.如果一个产生式的左部或右部含有无用符号,则此产生式称为无用产生式。
32.形如A->A的产生式,即使A是一个有用的符号,此类产生式也是不必要的。
因而一开始就可以将这样的产生式删去。
33.将不含形如A->A的产生式和不含无用符号及无用产生式的文法称为已化简的文法。
34.ε-产生式,是指右部为一空符号串ε的产生式。
35.0型文法又称短语结构文法(PSG)。
由0型文法所描述或定义的语言称之为0型语言。
36. 1型文法又称前后文有关文法(CSG )。
相应的语言称为1型语言或前后文有关语言。
37. 2型文法又称前后文无关文法(CFG )。
由2型文法所定义的语言称之为2型语言或前后文无关语言。
38. 把左线型文法和右线性文法统称为3型文法或正规文法。
由3型文法描述的语言称为3型语言或正规语言。
39. 四类文法在描述语法的能力上是从0型文法开始依次减弱的。
L L L L 3210⊃⊃⊃40. BNF 表示法等价于前后文无关文法。
凡是能用BNF 定义的语言都是前后文无关语言。
第三章1. 词法分析和语法分析两个阶段的划分,仅仅是对整个编译程序的逻辑功能而言,而不一定指的是编译程序的执行流程。
2. 词法分析主要任务:(1) 读源程序,产生单词符号。
(2) 滤掉空格,跳过注释、换行符。
(3) 追踪换行标志,复制出错源程序。
(4) 宏展开。
3. 利用状态转换图对符号串进行识别的方法是一个自顶向下的分析算法。
4. 一个确定的有限自动机(DFA)实际上是相应的状态转换图的一种形式描述,或者说,是状态转移矩阵的另一种表示。
5. 非确定的有限自动机(NFA )6. 正规文法和有限自动机在描述同一语言类的意义下是相互等价的。
7. 如果我们把每类单词均视为一种语言,那么每一类单词都可用一个正规式来描述,而每一类单词中的全体单词也就组成了相应的正规集。
第四章1. 对于表达式,常采用算符优先分析法;对于语言的其他的部分,则采用递归下降分析法。
2. 语法分析的方法,就产生语法树的方向而言,可以分为自顶向下和自底向上。
3. 采用自顶向下的语法分析,必须首先消除文法的左递归性(包括一切直接左递归和一般的左递归)。
4. LL (1)文法:相应的语法分析将自左至右的顺序扫视输入符号串,并按最左推导的方式来进行。
“1”表示分析过程中,每做一次推导,只要向前查看一个输入符号便能决定所选用的产生式,而且这种选择是准确无误的。
5.递归下降法是指对文法的每一非终结符号,都根据相应产生式各候选式的结构,为其编写一个子程序,用来识别该非终结符号所表示的语法范畴。
6.预测分析法是一种比递归子程序法更为有效的自顶向下语法分析方法。
此种方法的分析器由一张预测分析表、一个控制程序和一个分析栈组成。
7.能由某一LL(1)文法产生的语言称为LL(1)语言。
8.LL(1)文法的主要结论:(1)任何LL(1)文法都是无二义性的。
(2)左递归文法必然不是LL(1)文法。
(3)存在一种算法,它能判断任意的文法是否为LL(1)文法。
(4)存在一种算法,它能判定任意两个LL(1)文法是否产生相同的语言。
(5)不存在这样的算法,它能判定任意的前后文无关语言是否为LL(1)语言。
(6)非LL(1)语言(即不能由任何LL(1)文法产生的前后文无关语言)是存在的。
9.自顶向下的语法分析:(1)LL(1)文法(2)递归下降分析法(3)预测分析法10.自底向上的语法分析:(1)简单优先分析法(2)算符优先分析法(3)LR分析法包括LR(0) SLR(1) LR(1) LALR(1)11.移进-规约分析过程采取的动作:(1)移进(2)规约(3)接收(4)报错12.如果G是一算符文法,则G的任何产生式的右部,都不会出现两非终结符相邻的情况。
13.在算符优先分析中,每次规约的符号串,是当前句型的最左素短语。
14.算符优先分析结论:(1)按算符优先关系所确定的应被规约的子串恰好是当前句型的最左素短语。
(2)尽管算符优先分析也属于自底向上语法分析的范畴,但却不是严格从左至右的规范分析,每步所得的句型自然也不是一个规范句型。
(3)由于算符优先分析法中每一句型的最左素短语是唯一的,因此,若不顾及用非终结符来标记的那些节点上的名字,那么每一句子的树架子是唯一的。
15.不带回溯的自顶向下分析要求文法不存在左递归性,并且每一产生式的各候选式的终结首符集两两不相交。
16.算符优先分析方法要求文法的各终结符号序偶间至多只有一种优先关系。
17.LR(k)文法的研究证明:(1)每一LR(k)文法都是无二义性文法。
(2)一个由LR(k)文法所产生的语言也可由某一LR(1)文法产生。
18.LR(0) SLR(1) LR(1) LALR(1) 分析器的比较:(1)LR(0)分析器的分析能力最低,但它是构造其余三种LR分析器的基础。
(2)SLR是“简单LR”分析的缩写,是为了解决构造LR(0)分析器所出现的问题而形成的一种方法。
分析能力比LR(0)分析器稍强。
(3)LR(1)分析器的分析能力是四种LR分析器的最强的。
LALR(1)分析器的能力介于SLR(1)和LR(1)之间。
分析表的规模比LR(1)分析表要小得多。