编译原理总复习
编译原理复习总结
编译原理复习总结⼀、编译器概述1、名词解释1.1解释下列名词源语⾔:被翻译器翻译的语⾔,⽤于书写源程序的语⾔。
⽬标语⾔:被翻译器翻译之后得到的语⾔,⽤于书写⽬标程序的语⾔翻译器:能够完成从⼀种语⾔到另⼀种语⾔的变换的软件编译器:⼀种特殊的翻译器,要求⽬标语⾔⽐源语⾔低级解释器:解释器是不同于编译器的另⼀种语⾔处理器。
解释器不像编译器那样通过翻译来⽣成⽬标程序,⽽是直接执⾏源程序所指定的运算。
2、编译阶段1.2典型的编译器可以划分成⼏个主要的逻辑阶段?各阶段的主要功能是什么?典型的编译器可以划分成七个主要的逻辑阶段,分别是词法分析器、语法分析器、语义分析器、中间代码⽣成器、独⽴于机器的代码优化器、代码⽣成器、依赖于机器的代码优化器。
各阶段的主要功能:(1)词法分析器:词法分析阅读构成源程序的字符流,按编程语⾔的词法规则把它们组成词法记号流。
(2)语法分析器:按编程语⾔的语法规则检查词法分析输出的记号流是否符合这些规则,并依据这些规则所体现出的该语⾔的各种语⾔构造的层次性,⽤各记号的第⼀元建成⼀种树形的中间表⽰,这个中间表⽰⽤抽象语法的⽅式描绘了该记号流的语法情况。
(3)语义分析器:使⽤语法树和符号表中的信息,依据语⾔定义来检查源程序的语义⼀致性,以保证程序各部分能有意义地结合在⼀起。
它还收集类型信息,把它们保存在符号表或语法树中。
(4)中间代码⽣成器:为源程序产⽣更低级的显⽰中间表⽰,可以认为这种中间表⽰是⼀种抽象机的程序。
(5)独⽴于机器的代码优化器:试图改进中间代码,以便产⽣较好的⽬标代码。
通常,较好是指执⾏较快,但也可能是其他⽬标,如⽬标代码较短或⽬标代码执⾏时能耗较低。
(6)代码⽣成器:取源程序的⼀种中间表⽰作为输⼊并把它映射到⼀种⽬标语⾔。
如果⽬标语⾔是机器代码,则需要为源程序所⽤的变量选择寄存器或内存单元,然后把中间指令序列翻译为完成同样任务的机器指令序列。
(7)依赖于机器的代码优化器:试图改进⽬标机器代码,以便产⽣较好的⽬标机器代码。
编译原理复习题有答案
编译原理复习题有答案编译原理复习题及答案一、选择题1. 编译器的主要功能是什么?A. 代码格式化B. 代码优化C. 将源代码转换为机器码D. 错误检测和修复答案:C2. 词法分析阶段的主要任务是什么?A. 语法分析B. 语义分析C. 识别源程序中的词法单元D. 代码生成答案:C3. 下列哪个不是编译原理中的常见数据结构?A. 栈B. 队列C. 哈希表D. 链表答案:D4. 语法分析通常采用哪种方法?A. 递归下降分析B. 动态规划C. 贪心算法D. 深度优先搜索答案:A5. 代码优化的目的是什么?A. 增加程序长度B. 减少程序运行时间C. 提高程序的可读性D. 增加程序的复杂性答案:B二、简答题1. 简述编译过程的主要阶段。
答案:编译过程主要分为四个阶段:词法分析、语法分析、语义分析和代码生成。
词法分析负责将源代码分解成词法单元;语法分析构建语法树,检查源代码的语法结构;语义分析检查程序的语义正确性;代码生成将源代码转换成目标代码或机器码。
2. 什么是自底向上的语法分析方法?答案:自底向上的语法分析方法是一种从叶子节点开始,逐步向上构建语法树的方法。
它通常使用移进-归约分析技术,通过将输入符号与栈顶符号进行匹配,不断地将它们归约成非终结符,直到整个输入被归约为起始符号。
3. 请解释什么是中间代码,并说明其作用。
答案:中间代码是一种介于源代码和目标代码之间的代码形式,通常用于代码优化和目标代码生成。
它具有高级语言的可读性,同时又能表达程序的控制流和数据流信息。
中间代码使得编译器可以在不同的阶段对程序进行优化,提高程序的执行效率。
三、论述题1. 论述编译原理中的错误处理机制。
答案:编译原理中的错误处理机制主要包括错误检测、错误恢复和错误报告。
错误检测是指在编译过程中识别出源代码中的语法或语义错误;错误恢复是指在检测到错误后,编译器采取的措施以继续编译过程,避免因单个错误而中断整个编译;错误报告则是向程序员提供错误信息,帮助其定位和修复错误。
编译原理复习重点含答案
编译原理复习重点含答案编译原理复习重点编译原理是计算机科学中的一门重要课程,它研究的是如何将高级语言程序转化为机器语言的过程。
在编译原理的学习中,我们需要掌握一些重要的概念和技术,以便能够理解和应用编译器的工作原理。
本文将重点介绍编译原理的几个重要主题,并提供相应的答案供参考。
一、词法分析词法分析是编译器的第一个阶段,它的任务是将输入的字符序列划分为一个个有意义的词素(token)。
词法分析器通常使用有限自动机(DFA)来实现,其工作原理是将输入字符序列逐个读入,并根据事先定义好的词法规则进行匹配和识别。
常见的词法单元包括关键字、标识符、常量、运算符等。
常见的词法规则包括:1. 关键字:例如if、while、for等。
2. 标识符:由字母、数字和下划线组成,且以字母或下划线开头。
3. 常量:包括整数常量、浮点数常量、字符常量和字符串常量等。
4. 运算符:例如加法运算符+、减法运算符-等。
5. 分隔符:例如逗号、分号等。
词法分析的结果是一个个词法单元,每个词法单元包含一个词素和对应的词法单元类型。
例如,对于输入程序"int a = 10;",词法分析的结果可能是[("int", "关键字"), ("a", "标识符"), ("=", "运算符"), ("10", "整数常量"), (";", "分隔符")]。
二、语法分析语法分析是编译器的第二个阶段,它的任务是将词法分析器输出的词法单元序列转化为抽象语法树(AST)。
语法分析器通常使用上下文无关文法(CFG)来描述语言的语法结构,并使用递归下降、LL(1)分析、LR分析等算法进行分析。
常见的语法规则包括:1. 表达式:例如算术表达式、布尔表达式等。
编译原理期末总结复习
编译原理期末总结复习编译原理期末总结复习篇一:一、简答题1.什么是编译程序?答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。
将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。
2.请写出文法的形式定义?答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S)–其中Vn表示非终结符号– Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ– S是开始符号,–P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*)3.语法分析阶段的功能是什么?答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:程序、语句、表达式)。
确定整个输入串是否构成语法上正确的程序。
4.局部优化有哪些常用的技术?答:优化技术1—删除公共子表达式优化技术2—复写传播优化技术3—删除无用代码优化技术4—对程序进行代数恒等变换(降低运算强度)优化技术5—代码外提优化技术6—强度削弱优化技术7—删除归纳变量优化技术简介——对程序进行代数恒等变换(代数简化)优化技术简介——对程序进行代数恒等变换(合并已知量)5.编译过程分哪几个阶段?答:逻辑上分五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。
每个阶段把源程序从一种表示变换成另一种表示。
6. 什么是文法?答:文法是描述语言的语法结构的形式规则。
是一种工具,它可用于严格定义句子的结构;用有穷的规则刻划无穷的集合;文法是被用来精确而无歧义地描述语言的句子的构成方式;文法描述语言的时候不考虑语言的含义。
7. 语义分析阶段的功能是什么?答:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码);并对静态语义进行审查。
8.代码优化须遵循哪些原则?答:等价原则:不改变运行结果有效原则:优化后时间更短,占用空间更少合算原则:应用较低的代价取得较好的优化效果9.词法分析阶段的功能是什么?答:逐个读入源程序字符并按照构词规则切分成一系列单词任务:读入源程序,输出单词符号—滤掉空格,跳过注释、换行符—追踪换行标志,指出源程序出错的行列位置—宏展开,……10.什么是符号表?答:符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。
编译原理总复习
中间代码生成的自动生成工具
工具介绍
自动生成工具是一种辅助编译器设计的软件工具,它可以自动生成中间代码,从而简化编 译器的设计和实现过程。
工具分类
根据生成中间代码的方式不同,自动生成工具可以分为解析型和抽象语法树型两类。解析 型工具将源代码直接翻译成中间代码;抽象语法树型工具则将源代码先转换为抽象语法树 ,然后再将抽象语法树转换为中间代码。
Antlr
一个强大的语法分析器生成器,支持多种语言和复杂 的文法规则。
GOLD
一个高效的语法分析器生成器,支持多种目标语言和 优化选项。
04 中间代码生成
中间代码生成的定义与任务
定义
中间代码生成是编译过程的一个阶段,将源代码转化为一种中间表示形式,这种中间表 示形式称为中间代码。
任务
其任务包括控制结构的抽象、语义的消除、代码优化等,以简化后续的代码优化和目标 代码生成阶段。
循环结构的优化
循环展开
将循环体中的代码复制到循环 外部,以减少循环次数。
循环合并
将多个循环合并为一个循环, 以减少循环次数。
循环嵌套
将一个循环嵌套在另一个循环 内部,以减少循环次数。
循环展开与循环合并的优 缺点
循环展开可以减少循环次数, 但会增加代码量;循环合并可 以减少代码量,但会增加循环 次数。在实际应用中,需要根 据具体情况选择合适的优化方 法。
算法优化
根据问题的特点,选择合适的算法,以提高程序 执行效率。
系统资源优化
根据系统资源的特点,合理分配和利用系统资源, 以提高系统运行效率。
循环优化
1 2
循环展开
将循环体中的操作展开,以减少循环次数和减少 循环开销。
循环合并
将多个循环合并为一个循环,以减少循环次数和 减少循环开销。
编译原理总复习
2、解:改写后的文法变为 Z∷=(A) , A∷=a{abb}
过程Z INPUTSYM=’(’ N 错误
Y INPUTSYM=下一个符号
过程A INPUTSYM=’)’ Y INPUTSYM=下一个符号 出口 非终结符号Z的分析程序 N 错误
过程A N INPUTSYM=’a’ Y INPUTSYM=下一个符号 INPUTSYM=’a’ INPUTSYM=下一个符号 Y INPUTSYM=’b’ N 错误
q3b=ε-closure(δ(q3,b))= ε-closure({8})={8} =q6; q4a=ε-closure(δ(q4,a))= ε-closure({2,4})={2,4,6,7,9} =q1; q4b=ε-closure(δ(q4,b))= ε-closure({5,8})={5,6,7,8,9} =q2; q5a=ε-closure(δ(q5,a))=ε-closure({φ})= φ; q5b=ε-closure(δ(q5,b))= ε-closure({8})={8} =q6 q6a=ε-closure(δ(q6,a))= ε-closure({7})= {7,9}=q5; q6b=ε-closure(δ(q6,b))= ε-closure({φ})= φ; 计算到此,不再有新的状态。
8、栈式符号表工作过程。
9、程序运行时存储分配方法有哪 些?动态存储分配包括两种方式 ? 10、代码优化常用的三种方法 ?
二、针对语言构造文法
1、L(G)={奇正整数}; 2、L(G)={anbm|n,m≥1};
1、A::=1|3|5|7|9|NA N::=N0|N1|N2|N3|N4|N5|N6|N7|N8|N9 N::=0|1|2|3|4|5|6|7|8|9
编译原理总复习
DFA和NFA
DFA M=K,,f,S,Z
K为状态的有穷非空集; 为有穷输入字母表; f是转换函数,是在K×Σ* →K上的映射; S∈K是唯一的一个初态; Z K是终止状态集; K为状态的有穷非空集; 为有穷输入字母表; f是转换函数,是在K×Σ* →2K上的映射; SK是初始状态集; Z K为终止状态集.
3. 4.
解释程序和一些软件工具 程序设计语言泛型
1.1 什么是编译程序
编译程序是现代计算机系统的基本组成部分。
1.1 什么是编译程序
编译程序是一个语言翻译程序。
高级语言程序 (源程序)
编译程序
机器(汇编种语言(源语言)书写的程序翻译 成另一种语言(目标语言)的等价程序。 编译程序把高级语言所写的源程序翻译成等价的 机器语言或汇编语言的目标程序。
符号串的头尾,固有头和固有尾 符号串的连接 符号串的方幂 符号串集合的乘积 符号串集合的方幂 符号串集合的闭包
符号串集合——句子的集合
主要目的:将语言形式化表示的基础
知识点二:文法的形式定义
规则的非空有穷集合,通常表示 成四元组 G={VN,VT, P, S } VN是规则中非终结符号的集合。
文法等价 若L(G1)=L(G2),则称文法G1和G2是等价的
知识点四: 文法的类型
通过对产生式施加不同的限制,Chomsky将文 法分为四种类型:
0型文法:对任一产生式α →β ,都有α ∈ (VN∪VT)* 且 至少含有一个非终结符, β ∈(VN∪VT)* 1型文法:对任一产生式α →β ,都有|β |≥|α |, 仅 仅 S→ε 除外 2型文法:对任一产生式α →β ,都有α ∈VN , β ∈(VN∪VT)* 3型文法:任一产生式α →β 的形式都为A→aB或A→a, 其中A∈VN ,B∈VN ,a∈VT *
编译原理全复习(完整版)
1》编译程序的框架图与功能块:(1)画出编译程序的总体结构,并简述各部分的主要功能:七个部分(2)编译程序的结构分为几个阶段,各阶段的任务是什么?答编译程序总框架(1)词法分析器,又称扫描器,输入源程序,进行词法分析,输出单词符号。
(2)语法分析器,简称分析器,对单词符号串进行语法分析(根据语法规则进行推导或规约),识别出各类语法单位,最终判断输入串是否构成语法上正确的“程序”。
(3)语义分析与中间代码产生器,按照语义规则对语法分析器归约出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间代码。
(4)优化器,对中间代码进行优化处理。
(5)目标代码生成器,把中间代码翻译成目标程序。
(6)表格管理,登记源程序的各类信息,编译各阶段的进展状况。
(7)出错管理,把错误信息报告给用户。
编译程序的结构分为五个阶段:(1)词法分析.任务是:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),如基本字,标识符,常熟,算符和界符。
(2)。
语法分析,任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴)。
(3)语义分析与中间代码产生。
任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。
(4)优化。
任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。
(5)目标代码生成。
任务是:把中间代码(或优化出理之后)变换成特定机械上的低级语言代码。
2》.重要概念:a. 编译程序:是指能够把源语言程序转换成逻辑上等价的目标语言程序的一个程序。
b. 单词符号:是语言的基本组成成分,是人们理解和编写程序的基本要素,是语言中具有独立意义的最基本结构,它一般包括:基本字、标识符、常数、运算符和界符等c. 中间代码:是一种含义明确,便于处理的记号系统,它通常独立于具体的硬件。
编译原理复习最终版
编译原理复习最终版第⼀章⼀.单项选择1.将编译程序分成若⼲“遍”,是为了()A.提⾼程序的执⾏效率B.使程序的结构更为清晰C.利⽤有限的机器内存并提⾼机器的执⾏效率D.利⽤有限的机器内存但降低了机器的执⾏效率2.⼀个编译程序在编译时,⼤多数时间花在()上A.出错处理B.词法分析C.⽬标代码⽣成D.表格管理及处理3. 下⾯代码不可能是⽬标代码的是()A. 汇编指令代码B. 可重定位指令代码C. 中间代码D. 绝对指令代码4. 解释程序和翻译程序的根本区别A. 是否⽣成中间代码B. 是否有语义分析阶段C. 是否⽣成⽬标代码D. 是否有语法分析阶段5. 下⾯编译阶段既可以作为编译器的前端,也可以作为编译器的后端的是:()A. 语法分析阶段B. 语义分析阶段C. 中间代码⽣成阶段D. 中间代码优化阶段⼆.多项选择1. ⼀个编译器可能有的阶段为()A. 词法分析B. 语法分析C. 语义分析2. 编译器的各个阶段的⼯作都涉及到()A. 表格处理B. 词法分析C. 语法分析D. 语义分析E. 出错处理3. ⼀般来说,编译器可分为前端和后端,下列编译阶段可被划分为编译的前端的有:()A. 词法分析B. 语法分析C. 语义分析D. 中间代码⽣成E. 中间代码优化三.判断题1.⼀个编译器就是⼀个程序,该程序的输⼊是源程序,输出是与之等价的⽬标程序。
2.编译与解释程序的根本区别是:是否⽣成⽬标代码。
3.解释程序和编译程序的前端是相同的,其实现技术基本上也是相通的。
4.⼀般⽽⾔,中间代码是⼀种独⽴于具体硬件的记号系统。
四.综合题1.请画出编译程序的总体框图。
2.源程序的解释和和编译执⾏的主要区别是什么?第三章⼀.单项选择题1.词法分析器的输出是:()A.单词在符号表中的位置B.单词的⾃⾝值C.单词的⾃⾝值和单词的种类码D.单词的种类码2.词法分析的依据是:()A.语义规则B.构词规则C.语法规则D.等价变换规则3. 两个DFA等价是指:()A. 这两个DFA的状态数相同B. 这两个DFA的状态数和有向弧条数都相等C. 这两个DFA的有向弧条数相等D. 这两个DFA接受的语⾔相同4. 词法分析器的输⼊是:()A. Token序列B. 源程序C. ⽬标程序D. 符号表5.下列符号串不可以由符号集∑={a,b}上的正闭包运算产⽣的是:()A. εB. aD.ab⼆.多项选择1. 令∑={a,b},则∑上的符号串的全体可⽤下⾯的正规式表⽰。
完整版编译原理复习题及答案
编译原理复习题及答案一、选择题1.一个正规语言只能对应( B )A 一个正规文法B 一个最小有限状态自动机2.文法G[A] :A→εA→aB B→Ab B→a是( A )A 正规文法B 二型文法3.下面说法正确的是( A ) A一个SLR(1)文法一定也是LALR (1)文法B一个LR (1)文法一定也是LALR (1)文法4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL (1)文法的( A )A 必要条件B 充分必要条件5.下面说法正确的是( B )A 一个正规式只能对应一个确定的有限状态自动机B 一个正规语言可能对应多个正规文法6.算符优先分析与规范归约相比的优点是( A )A 归约速度快B 对文法限制少7.一个LR (1)文法合并同心集后若不是LALR (1)文法( B )A 则可能存在移进/归约冲突B 则可能存在归约/归约冲突C 则可能存在移进/归约冲突和归约/ 归约冲突8.下面说法正确的是( A )A Lex 是一个词法分析器的生成器B Yacc 是一个语法分析器9.下面说法正确的是( A )A一个正规文法也一定是二型文法B一个二型文法也一定能有一个等价的正规文法10.编译原理是对(C) 。
A 、机器语言的执行B、汇编语言的翻译C、高级语言的翻译D、高级语言程序的解释执行11.(A) 是一种典型的解释型语言。
A .BASICB .CC.FORTRAN D.PASCAL12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B) 完成的。
A. 编译器B. 汇编器C. 解释器D. 预处理器13.用高级语言编写的程序经编译后产生的程序叫(B) A .源程序B .目标程序C.连接程序 D .解释程序14.(C) 不是编译程序的组成部分。
A. 词法分析程序B. 代码生成程序C.设备管理程序D. 语法分析程序15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优目标代码生成等六个部分,还应包括(C)A .模拟执行器B .解释器C.表格处理和出错处理D .符号执行器16.编译程序绝大多数时间花在(D) A .出错处理B.词法分析C.目标代码生成D.表格管理17.源程序是句子的集A. 线性表(B) 可以较好地反映句子的结构。
编译原理复习汇总
复习汇总一、第一章概述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章1、编译程序是一种翻译程序,它将高级语言所写的源程序翻译成等价的机器语言或者汇编语言的目标程序。
2、编译程序是计算机系统中重要的系统软件!3、解释程序与编译程序的主要区别是解释程序在执行过程中不产生目标程序。
4、编译的各个阶段。
答:整个编译过程可以分为5个阶段:词法分析,语法分析,语义分析及中间代码生成,代码优化和目标代码生成。
5、编译程序的结构框图或步骤。
6、遍(趟):是对源程序或源程序的中间结果从头到尾扫描一遍,并作有关加工处理,生成新的中间结果或目标程序的过程。
■第2章1、符号串的基本运算。
2、简单的说文法由产生式组成;产生式中的符号分为两类:终结符号和非终结符号。
3、推导(最左、最右)、句型、句子、短语、句柄4、乔姆斯基层次中:L3 ⊂ L2 ⊂ L1 ⊂ L0■第2章例题已知文法G[E]:E→T|E+T|E-TT→F|T*F|T/FF→(E)|i(1)该文法的开始符号是什么?(2)请给出该文法的终结符号集合VT和非终结符号集合VN。
(3)找出句型T+T*F+i的所有短语、直接(简单)短语、句柄。
■第3章1、词法分析程序的输出是单词符号序列。
2、DFA的三种表示形式——状态转移图、状态转换表和五元组表示(Q, ∑, f, S, Z );3、正规式向DFA的转换:(1)正规式——NFA;(转换原则见下页)(2)NFA——DFA;(3)DFA的最小化。
4、DFA向正规式的转换。
正则式向NFA转换的原则:例:构造与正则表达式R=ba(a|b)*等价的状态最少的DFA,并写出该DFA的五元组形式或状态转换表。
■第4章1、语法分析方法的各种分类;2、LL(1)分析方法。
提示:在此算法中注意First集和Follow集的求法。
并且一定要注意分析过程中步骤要完整。
(分析步骤见下页总结)例:文法:S◊a|^|(T) T◊T,S|S试判断该文法是否是LL(1)文法。
习题4:P100 4.3 4.7 4.9■LL(1)分析方法相关知识总结1、消除文法中的左递归或提取左因子;(1)简单直接左递归的消除A →βA’A →Aα| β→A’ →αA’| ε(2)将文法G:A→αβ|αγ提取左因子。
《编译原理》总复习
17
<2> 符号表的组织
1. 符号表的条目与信息的存储(关键字+内容) 2. 作用域信息的保存(栈结构) 3. 线性表与散列表
<3> 声明语句的翻译
1. 定义与声明:类型定义与变量声明,过程定义与过程声明 2. 变量声明:符号表信息的填写 3. 过程声明: • 左值与右值 • 参数传递:参数传递的不同形式 • 名字的作用域:静态作用域与最近嵌套原则 • 声明中作用域信息的保存
12
<3> 自上而下分析
1. 分析方法:推导,从上到下构造分析树,是一种预测的、 试探的方法; 2. 对文法的要求:没有公共左因子和左递归; 3. 递归下降子程序方法:匹配终结符,展开非终结符(子 程序调用) 4. 预测分析表方法: • 工作方式与过程:PDA(DPDA)、格局与改变格局的 动作; • 预测分析表的构造:FIRST集合与FOLLOW集合, FIRST与FOLLOW的计算; • LL(1)文法及其判别:预测分析表中没有多重定义条 目(推论3.2)。
2. 移进-归约分析表:动作表+转移表; 3. LR文法与LR分析:LR(0)、SLR(1)、LALR(1)、LR(1)。
15
第四章 语法制导翻译生成中间代码
本章讨论程序设计语言的静态语义分析,并且在语法分析 的基础上生成中间代码,采用的基本方法是语法制导翻译。 与前两章词法分析和语法分析不同的是,词法分析和语法 分析的讨论侧重于理论,而本章则侧重于结合程序设计语言的 实际例子讨论语言结构的具体翻译方法和一些实用的技术。
西安电子科技大学软件工程研究所归纳总结所学内容锻炼提高抽象能力一引言二词法分析三语法分析四语法制导翻译生成中间代码学习不能走捷径付出多少劳动就有多少收获
编译原理总复习
编译原理总复习总复习⼀、基本概念:1、请简单解释编译程序的概念。
答:编译程序是现代计算机系统的基本组成部分之⼀。
简⽽⾔之, 编译程序就是⼀种语⾔翻译程序。
所谓翻译程序,是指这样⼀个程序,它能将⾼级程序设计语⾔程序翻译成逻辑上等价的低级语⾔(汇编语⾔,机器语⾔) 程序。
编译程序⼀般由词法分析程序、语法分析程序、语义分析程序、中间代码⽣成程序、⽬标代码⽣成程序、代码优化程序、表格管理程序和出错处理程序等成分构成。
2、⼀个编译程序,实际涉及三种语⾔:源语⾔、⽬标语⾔、实现语⾔。
源语⾔:Source Language⽬标语⾔:Target or Object Language实现语⾔:Implementation L常常使⽤T型图来表⽰的⼀个编译器涉及的三个语⾔之间的关系。
早期的编译程序的实现语⾔⼀定是由机器语⾔。
3、请解释编译程序的前端和后端的概念,试问前端通常包括那些阶段,后端包括那些阶段?(10分)答:编译程序的前端只依赖于源语⾔,由⼏乎独⽴于⽬标机器的阶段或阶段的⼀部分组成。
编译程序的前端通常包括词法分析程序、语法分析程序、语义分析程序、中间代码⽣成程序及相关的表格管理程序和出错处理程序。
编译程序的后端是指编译器中依赖于⽬标机器的部分,它们⼀般独⽴于源语⾔,⽽与中间代码有关。
通常包括⽬标代码⽣成程序、代码优化程序以及相关的表格管理程序和出错处理程序。
4、语⾔的语法描述⽅法有其三,请列举出来。
答:⽤⾃然语⾔描述语⾔的语法,⽤语法图描述语⾔的语法和⽤巴科斯-瑙尔范式及扩充的巴科斯-瑙尔范式(EBNF)两种形式给出语⾔的语法描述。
5、请写出Chomcky关于⽂法的定义。
答:Chomcky⽂法的定义:⽂法G定义为四元组,记为:G=(V N,V T,P,S)其中:V N—⾮空有限的⾮终结符号集V T—⾮空有限的终结符号集P—产⽣式集S —开始符号/识别符号6、已知⽂法:(20分)E→X|E+XX→Y|X*YY→(E)|i请判定该⽂法是那类⽂法?答:根据Chomcky⽂法的定义,该⽂法是2类⽂法,即上下⽂⽆关⽂法。
编译原理复习
编译原理复习《编译原理》复习README来源⽹络&书本&PPT整理截取了⽼师课上讲解or布置的题⽬⼀些题⽬懒得贴答案了,写了些注意事项第1 章引论运⾏编译程序的计算机:宿主机运⾏编译程序所产⽣的⽬标代码的计算机:⽬标机第1 题解释下列术语:(1)编译程序:如果源语⾔为⾼级语⾔,⽬标语⾔为某台计算机上的汇编语⾔或机器语⾔,则此翻译程序称为编译程序。
(2)源程序:源语⾔编写的程序称为源程序。
(3)⽬标程序:⽬标语⾔书写的程序称为⽬标程序。
(4)编译程序的前端:它由这样⼀些阶段组成:这些阶段的⼯作主要依赖于源语⾔⽽与⽬标机⽆关。
通常前端包括词法分析、语法分析、语义分析和中间代码⽣成这些阶段,某些优化⼯作也可在前端做,也包括与前端每个阶段相关的出错处理⼯作和符号表管理等⼯作。
(5)后端:指那些依赖于⽬标机⽽⼀般不依赖源语⾔,只与中间代码有关的那些阶段,即⽬标代码⽣成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语⾔程序从头到尾扫视并完成规定任务的过程。
第2 题⼀个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
(区别编译程序的六个阶段)答案:⼀个典型的编译程序通常包含8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码⽣成程序、中间代码优化程序、⽬标代码⽣成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输⼈源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进⾏语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码⽣成程序:按照语义规则,将语法分析程序分析出的语法单位转换成⼀定形式的中间语⾔代码,如三元式或四元式。
中间代码优化程序:为了产⽣⾼质量的⽬标代码,对中间代码进⾏等价变换处理。
编译原理-复习资料精选全文完整版
可编辑修改精选全文完整版1.编译程序的工作过程一般可包括词法分析、语法分析、语义分析、中间代码产生与优化和目标代码生成等几个阶段,同时还有表格管理和出错处理。
2.LEX是用于词法分析的工具,Y ACC是用于语法分析的工具。
3.解释程序和编译程序的区别在于是否生成目标代码。
4.任一文法终结符集合和非终结符集合的交集是空集。
5.描述程序设计语言语法的BNF方法中,“::=”表示定义为,“|”表示或,[W]表示W可出现0或1次,{W}表示W可出现n(n≥0)次。
6.已知文法G[G]: S→aSb|ab|ε,该文法描述的语言L(G)={a n b n|n≥0}。
7.单词的描述工具有正规文法、正规式和有穷自动机,他们之间存在等价性。
8.高级程序设计语言的单词通常分为五类,它们是关键字、标识符、常数、运算符和界符。
9.正则式中的“|“表示或,“*”表示闭包。
10.自顶向下语法分析方法会遇到的主要问题有回溯,以及左递归带来的无限循环。
11.算符优先分析法每次归约当前句型的最左素短语,规范归约中每次归约的是当前句型的句柄。
12.对文法G[G]: S→a|b|cTc,T→S|TdS而言,FIRSTVT(T)={a,b,c,d}。
13.活前缀是指规范句型的一个前缀,这种前缀不含句柄之后的任何符号。
14.对文法G[G]: E→E*T|T, T→T+i|i的句子1+2*8+6进行归约后的结果为42(23,42)。
15.在LR(0),SLR(1),LR(1),LALR(1),四种文法中,描述能力最强的是LR(1)。
1.0型文法中每条规则左部至少包含一非终结符(√)。
2.3型文法一定是2型、1型、0型文法(√)。
3.对无二义性文法而言,无论最左推导还是最右推导,同一个句子的语法树是一样的。
4.若一个文法是递归的,则其语言中句子的个数必定是无穷个。
(√)5.文法规则右部的符号一定是终结符。
(×)6.语法树描述的是一个文法。
编译原理期末复习
编译原理期末复习编译原理是计算机科学与技术专业的一门重要基础课程,它研究的是程序设计语言在计算机上的实现方式。
编译原理的学习主要涉及到词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等内容。
针对这些方面,下面将对编译原理的重要内容进行总结和复习。
一、词法分析词法分析是编译过程的第一步,其主要目的是将源程序中的字符序列划分成词法单位。
常用的词法单元有关键字、标识符、常数、运算符、界符等。
词法分析通过有限自动机或正则表达式来实现。
二、语法分析语法分析是将词法分析阶段生成的词法单元流转化为一个抽象语法树。
语法分析的主要工作是根据给定的语法规则,将输入串分析成语法树。
语法分析有两种主要方法:基于文法的自上而下的分析和基于文法的自下而上的分析,常用的算法包括LL(1)、LR(1)、SLR(1)和LALR(1)等。
三、语义分析语义分析是对语法分析的结果进行语义检查和语义动作的计算。
语义分析的主要任务是检查源程序是否符合语义规则,计算符号的类型和值,并生成中间代码。
语义分析常用的方法包括语义制导翻译和符号表的建立。
四、中间代码生成中间代码是指在编译过程中生成的一种可以被多次优化和被不同目标代码生成程序使用的代码。
中间代码生成的目的是将源程序翻译成其中一种中间形式,便于进一步优化和生成目标代码。
中间代码生成的方法有三地址码、四地址码和虚拟机代码等。
五、代码优化代码优化是编译过程中的重要环节,其主要目的是对中间代码进行优化,使得生成的目标代码更加高效和紧凑。
代码优化使用各种数据流分析、指令调度和寄存器分配等技术,常用的优化方法有常量传播、公共子表达式消除、代码移动和死代码消除等。
六、目标代码生成目标代码生成是将中间代码转化为目标机器代码的过程,目标代码生成需要考虑目标机器的特性和限制。
目标代码生成包括指令选择、寻址方式的选择和寄存器分配等步骤。
常用的技术有基于各种寻址方式的代码选择算法、寄存器分配算法和指令调度算法等。
编译原理 总复习
13
■ 语言的形式定义
4、句型和句子
G = (VT, VN, P, S),S=>* a ,a ∈ (VTVN)* 称a 为句型。 a ∈ VT* ,称a为句子。
例:设有文法G[S]: S01 | 0S1 请分别判断:01,000S111,0SS0,0011,0S1是该 文法的句子还是句型?
句型与句子区别:句型由终结符和非终结符构成,句
+
T
F
F i
24
短语 (每棵子树的叶组成短语):
(E+T)*i+F是句型(E+T)*i+F相对于E的短语; (E+T)*i是句型(E+T)*i+F相对于E、T的短语; (E+T)是句型(E+T)*i+F相对于T、F的短语; E+T是句型(E+T)*i+F相对于E的短语; i是句型(E+T)*i+F相对于F的短语; F是句型(E+T)*i+F相对于T的短语。 简单短语 (每棵简单子树的叶组成简单短语): E+T是句型(E+T)*i+F相对于E的简单短语; i是句型(E+T)*i+F相对于F的简单短语; ( F是句型(E+T)*i+F相对于T的简单短语。 E 句柄 (最左简单子树的叶组成句柄): T F E + ) T
3
3. 字符串(字) 符号的有穷序列称为符号串。 例如有字母表 ={a,b,c},则有字符串 a,b,ab,ba,…… 符号串总是建立在某个特定字母表上的,且只能 由字母表上的有穷多个符号组成。 符号串中符号的顺序很重要,例如ab和ba就是两个 不同的符号串。不包含任何符号的符号串,称为空符 号串,用ε表示。空符号串由0个符号组成,其长度 |ε|=0
编译原理总复习课件
词法分析是编译过程中的第一个阶段,其任务是识别源程序中的单词或符号,并将其转换为词法单元或标记。
详细描述
词法分析,也称为扫描或词法扫描,是编译过程中的一个重要阶段。其主要任务是从左到右读取源程序中的字符 ,识别出其中的单词或符号,并将它们转换为一种中间表示形式,即词法单元或标记。这些词法单元或标记将作 为语法分析器的输入,用于进一步的语法和语义分析。
自顶向下的语法分析
01
自顶向下的语法分析方法从抽象语法树的顶端开始,逐步向下 进行解析。
02
常用的自顶向下的语法分析算法有预测分析算法和移进-规约算
法。
自顶向下的语法分析方法在处理某些复杂的嵌套结构时可能会
03
遇到问题。
自底向上的语法分析
自底向上的语法分析方法从抽象语法树的底端开 始,逐步向上进行解析。
03
代码优化
对中间代码进行优化,提高生成代码的执行 效率。
05
02
语法分析
根据语法规则将词法分析阶段产生的单词或 符号组装成抽象语法树(Abstract Syntax Tree, AST)。
04
中间代码生成
将抽象语法树转换成中间代码,通常 是三地址代码。
06
代码生成
将中间代码转换成目标机器代码,便于执行。
词法分析器的实现
要点一
总结词
词法分析器的实现可以采用手工编写或工具辅助的方式, 常用的工具有Lex和Flex等。
要点二
详细描述
词法分析器的实现可以采用多种方式。一种常见的方法是 手工编写一个词法分析器,根据语言的词法规则和语法规 则,逐一处理源程序中的字符。另一种方法是使用工具辅 助生成词法分析器,如Lex和Flex等工具可以根据预定义的 规则自动生成词法分析器。这些工具可以大大简化词法分 析器的编写过程,提高开发效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息记录在一个内情向量表中,这些信息包括:维数、首地 址、各维界差、各维上界、各维下界、数组元素类型、地址 不变量。
(1)基本概念
优化
(2)代码优化遵循的原则
等价原则、有效原则、合算原则
(3)优化分类
根据优化对象所涉及的程序范围划分为:局部优化、循环优化和全局 优化。 (4)常见的优化的几种方法
为E1´E2´op,其中E1´,E2´分别是E1和E2的后缀式。 ③若E是(E1)形式的表达式,则E的后缀式就是E1的后缀式。
(6)将以下语句翻译为四元式序列
①表达式(算术及布尔) ②赋值语句 ③IF语句 ④WHILE语句
(7)参数传递的几种方式
传地址、 传值、传名、得结果
返回
(1)符号表的基本组成、基本操作 组成:一张符号表的每一项入口包含:名字栏和信息栏 操作:查表、填表、访表、更新、删除
(7)LL(1)分析器的组成部分
输入缓冲区、分析栈、分析表、总控程序
(8)LL(1)分析的四种动作
成功、匹配、推导、报错
(9)LL(1)文法的判定条件
①文法不含左递归。
②文法中每一个非终结符A的各个产生式的候选首符集两两不相交。即,
若
A 1| 2| | n
则
FIR i) S FT IR ( j) S T ( i(j)
3型 2型 1型 0型
返回
(1)基本概念
状态等价、DFA的化简
(2)词法分析器的任务及其输出形式
任务:自左至右逐个字符地对源程序进行扫描,按语言的构词规则识别 出一个个单词,把作为字符串的源程序改造为单词符号串的中间程序。 输出形式:二元式 ( 单词种别, 单词符号的属性值)
(3)单词符号的种类
(6)FIRSTVT集与LASTVT集的计算
①FIRSTVT
F I R S T V T ( P ) a |P a 或 P Q a , a V T , Q V N
规则一:若有产生式P→a…或 P→Qa…,则a∈FIRSTVT(P);
规则二:若a∈FIRSTVT(Q)且有产生式 P→Q…,则a∈FIRSTVT(P) ;
(16)LR文法的特点
LR文法肯定是无二义的,一个二义文法决不会是LR文法。 LR分析法比预测分析法更加一般化。 LR(0)文法一定是SLR文法,SLR文法和LALR文法一定是LR(1)文法。
(1)基本概念
S—属性文法 、L—属性文法
(2)属性分类
综合属性:用于“自下而上”地传递信息。 继承属性:用于“自上而下”地传递信息。 ①终结符号只有综合属性,由词法分析器提供。 ②非终结符既可有综合属性也可有继承属性,文法开始符号的所有继承 属性作为属性计算前的初始值。
方法:首先画出句型的语法分析树,然后根据语法树寻找。 每棵子树的叶子结点自左至右排列构成一个相对于子树根的短语。 每棵简单子树(只有父子两代)的叶子结点自左至右排列构成一个直
接短语。 最左简单子树的叶子结点自左至右排列构成一个句柄。 将所有短语中至少含一个终结符的短语,按长度从小到大排列,长度
(3)自上而下分析面临的两个最主要的问题
左递归、回溯
(4)自上而下分析的基本方法
LL(1)分析法、递归下降分析器
(5)左递归(直接、间接)和回溯的消除
直接左递归的消除
P P 1 |P 2 | |P m | 1 | 2 | | n
P1P|2P| |nP P1P|2P| |mP|
间接左递归的消除 ① 排序 ② 代入及消除左递归 ③ 化简
③对文法中的每个非终结符A,若它存在某个候选首符集包含ε,则
FIRST(FAO) LLOW (A)
如果一个文法G满足以上条件,则称该文法G为LL(1)文法。
(10)LL(1)分析方法
假设要用非终结符A进行匹配,面临的输入符号为a,关于A的所有
产生式为
A 1| 2| | n
则LL(1)分析算法如下:
(8)算符优先分析算法
①最左素短语的寻找依据:
(9)算符优先分析算法
②算符优先分析的特点: 算符优先分析一般并不等价于规范归约 无法使用单非产生式(如:T F)进行归约。 算符优先分析比规范归约过程要快,跳过了所有的单非产生式。 可能将本来不是句子的输入串误认为是句子。
(10)LR分析器的基本思想及其组成部分
(2)对文法G,能够给出给定句型或句子的最左推导及最右推 导序列,并画出其对应的语法分析树。
(3)能够计算某文法的语言。 (4)理解文法的二义性,能够说明一个文法是二义的。
(5)形式语言分类(chomsky,1956)
0型 普通(短语)文法 1型 上下文有关文法 2型 上下文无关文法 3型 线性(正规、正则)文法
返回
(1)基本概念
短语、直接短语、句柄、素短语、最左素短语、算符文法、算符优 先文法
(2)自下而上分析的基本思想及其核心
基本思想:移进-归约 核心问题:可归约串的界定
(3)自下而上分析的基本方法
算符优先分析法:以最左素短语作为可归约串,非规范归约 LR分析法:以句柄作为可归约串,规范归约
(4)给定一个文法的句型,找出其短语、直接短语、句柄、 素短语和最左素短语
编译原理总复习
1 题型及分值 2 教材各章知识点概览 3 计算题题型
返回
一、判断题 (1′×5=5′) 二、填空题 (1′×10=10′) 三、选择题 (2′×5=10′) 四、简答题 (本题共35分):其中包括两个名词解释。 五、计算题 (10′+15′+15′=40′)
1 编译程序概论 2 文法和语言 3 词法分析与有限自动机 4 自上而下语法分析方法
(12)LR分析器的四种动作
移进、归约、接受、报错
(13)LR分析器的两种冲突
移进——归约 冲突 和 归约——归约 冲突
(14)四类不同的项目
返回
(15)四类LR分析表的构造
①拓广文法 ②构造LR(0)(LR(0)和SLR分析表)或LR(1)(LR(1)和LALR分析表)项 目集规范簇 ③构造相应分析表
分析表、SLR(1)分析表 (6)将各语句成分翻译成四元式序列:if语句、while语句
理祝 想福 的您 成考 绩出
谢谢观赏!
2020/11/5
36
(5)左递归(直接、间接)和回溯的消除
回溯的消除:提左公因子
A δ β 1 |δ β 2 | |δ β n |γ 1 |γ 2 | |γ m
AδA|γ1|γ2| |γm A β1|β2| |βn
(6)LL(1)的含义
LL(1)中的第一个L表示从左至右扫描输入串,第二个L表示最左推 导,1表示分析时每一步只需向前查看一个符号。
规则三:反复使用以上两条规则,直到FIRSTVT(P)不再增大) a |P a 或 P a Q , a V T , Q V N
规则一:若有产生式P→…a或 P→…aQ,则a∈LASTVT(P);
规则二:若a∈LASTVT(Q)且有产生式 P→…Q,则a∈LASTVT(P) ;
基本思想:记住历史、展望未来、定夺现在 组成部分:输入缓冲区、分析栈(状态、符号)、分析表(动作、
转换)、总控程序
(11)四类LR分析表
LR分析表是LR分析器的核心,主要有以下几种分析表:LR(0)表、 SLR(1)表(即简单LR表)、LR(1)表(即规范LR表)、LALR表(即向 前LR表)。其中,L代表自左至右扫描输入串,R代表构建最右推导的逆 过程,1代表分析时每一步至多向前查看一个符号,S代表简单的。
最短的认定为素短语,然后考察其余长度较大的,若不包含更小的素 短语,则也为素短语。位于句型中最左边的素短语即为最左素短语。
(5)算符文法与算符优先文法
算符文法:任意产生式右部不含两个连续的非终结符,(...QR...) 算符优先文法:算符文法中任意两个终结符之间至多只含“>”、 “<”、“=”三种关系之一。 算符优先文法一定是算符文法。 算符优先关系是有序的,但不满足对称性和传递性,即对于文法G 的终结符a、b和c: ➢ 如果a<b,并不意味着b>a; ➢ 如果存在a=b和b=c,不一定有b=a或a=c; ➢ 如果存在a<b和b<c,也不能得出a<c。
(3)语义规则的表示
(4)常见的中间代码的几种形式
①后缀式(逆波兰表示式) ②图表示法
抽象语法树 DAG图 ③三地址代码 四元式 三元式 间接三元式
(5)后缀式(逆波兰式)的表示
把运算量(操作数)写在前面,把运算符写在后面(后缀)的一种 表达式表示方法。其归纳定义如下:
①如果E是一个变量或常数,则E的后缀式是E自身。 ②如果E是E1 op E2 形式的表达式,op是二元操作符,则E的后缀式
关键字、标识符、常数、运算符、界符
返回
(4)正规文法、正规式、有限自动机之间的相互等价性定理 (5)正规式→ NFA → DFA →最小化DFA
(1)语法分析的方法
根据语法分析树建立方向的不同,将语法分析分成两类:自上而下 语法分析方法和自下而上语法分析方法。
(2)自上而下分析的基本思想
穷举试探法
返回
(3)编译错误的种类
从编译程序的角度来看,源程序中的错误主要分为:语法错误 和 语义错误两类错误。
(4)高级程序设计语言翻译的两种方式以及它们的区别
高级程序设计语言的翻译主要有两种方式:编译方式 和 解释方式。 区别:是否生成目标代码。
(1)基本概念
文法、推导、最左推导、最右推导、句型、句子、语言、文法的二 义性
规则三:反复使用以上两条规则,直到LASTVT(P)不再增大为止。
(7)算符优先关系表的构造
规则一:对形如P→…ab…或P→…aQb…的产生式,有a=b; 规则二:对形如P→…aR…的产生式,若有b∈FIRSTVT(R),则a<b; 规则三:对形如P→…Rb…的产生式,若有a∈LASTVT(R),则a>b; 规则四:对于语句括号#,有#=#,且若a∈FIRSTVT(S)和b∈LASTVT(S), 则有#<a且b>#。