词法分析:对构成源程序的字符串进行扫描和分解,识别出一个个具有意义的单词。
语法分析:根据语言的语法规则对单词符号串(符号序列)进行语法分析,识别出各类语法短语(可表示成语法树的语法单位),判断输入串在语法上是否正确
语义分析:按语义规则对语法分析得到的语法单位进行语义分析,审查源程序有无语义错误,为代码生成阶段收集类型信息,并进行类型审查金和违背语言规范的报错处理
中间代码生成:将语义分析得到的源程序变成一种结构简单、含义明确、容易生成、容易翻译成目标代码的内在代码形式
代码优化:对中间代码或目标代码进行变换改造等优化处理,使生成的代码更高效
目标代码生成:将中间代码变换成特定目标机器上的绝对指令代码或可重定向的指令代码或汇编指令代码
2、mian(){ int x=10,y;}
保留字:main 界符:(、)、{ 保留字:int 标识符:x 运算符:=
常数:10 标识符:y 界符:;、}
3、文法、句型、句子和语言的形式定义?(注意下标)
文法G定义为四元组(VN,VT,P,S)
VN :非终结符(语法实体、变量)集。
VT :终结符集。
P:规则(α → β)集合,α∈(VN∪VT)*且至少包含一个非终结符,β∈(VN∪VT)* 。
S:开始符(识别符),它是一个非终结符,至少要在一条规则中作为左部出现
设G[S]是一文法,如果符号串x是从文法的识别符号推导出来的,既有Sx,则称x是文法G[S]的句型。若符号串x还满足仅由终结符号组成的条件,既S x(其中x∈VT*)则称x为G[S]的句子。
语言:文法G[S]的语言是G[S]的所有句子构成的集合。即L(G)={x|Sx,且x∈VT* }
4、确定的有穷自动机(DFA)和不确定的有穷自动机(NFA)的五元组定义?
确定的有穷自动机(DFA)
(1) K是一有穷状态集;
(2) 是一有穷字母表,称输入符号字母表;
(3) f是转换函数,是在K→K上的映射。如f(ki,a)=kj;
(4) S是唯一的一个初态(是一个元素);
(5) ZK,是一终态集,终态也称结束态或可接受态或可识别态。
不确定的有穷自动机(NFA)
1)K是一有穷状态集;
(2)是一有穷字母表,称输入符号字母表;
(3)f是转换函数,是在K*→K的子集上的映射;
(4)S K,是非空初态集(是一个集合);
(5)ZK,是一个终态集,终态也称结束态或可接受态。
5、左素短语的定义和由给定句型寻找最左素短语的方法,并举例说明寻找方法?
最左素短语:设有文法G[S],其句型的素短语是一个短语,它至少包含一个终结符,并除自身外不包含其他素短语,最左边的素短语称最左素短语。最左素短语时应该满足的条件:ai-1 6、简述LR(0)、SLR(1)、LR(1)、LALR(1)四类文法的相互关系? 一个LR(0) 文法肯定是SLR(1)、LR(1)、LALR(1) 文法 一个SLR(1) 文法肯定是LR(1)、LALR(1) 文法,不一定是LR(0) 文法 一个LALR(1) 文法肯定是LR(1) 文法,不一定是LR(0) 文法和SLR(1) 文法 一个LR(1) 文法不一定是LALR(1) 文法,不一定是LR(0) 文法和SLR(1) 文法 7、简述语法制导翻译和属性文法的概念? 从概念上讲,基于属性文法的语义处理过程即语法制翻译通常是这样的:对单词符号串进行语法分析,构造语法分析树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结 点处按语义规则进行计算。 一个属性文法是一个三元组A=(G,V,F):其中G表示一个上下文无关文法;V表示一个属性的有穷集;F表示关于属性的断言或谓词的有穷集;每个属性与文法的某个非终结符或终结符相联系;谓词与文法规则相联系。 8、简述符号表的3个主要功能? 符号表的作用和地位:收集符号属性、上下文语义的合法性检查的依据、作为目标代码生成阶段地址分配的依据。 9、简述与通用标识符的存储 位置或格式相关的标识符的主要属性及作用? 符号表中的标示符一般设置的属性:符号名、符号的类型、符号的存储类别、符号的作用域及可视性、符号变量的存储分配信息、其他属性。 10、分程序结构的语言,为其符号表建立重名动态下推链的目的是什么?概述编译过程中重名动态下推链的工作原理? 重名动态下推链的目的是保证在合法重名定义情况下,提供完整确切的符号表项,从而保证引用变量的上下文合法性检查和非法重名定义检查。其工作原理:当发生合法重名定义时,将上层重名表项下推到链中,而在符号表中原重名表项处登陆当前重名定义的符号属性;在退出本层时,将最近一次下推到表项回推,登陆到符号表中原重名表项处。 11、简述静态存储分配、栈式动态存储分配、堆式动态存储分配的特点和主要用途? 静态存储分配:其特点是在编译时刻确定存储位置,访问效率高。主要用于子程序的目标代码段、全局数据目标。 栈式动态存储分配:其特点是嵌套调用次序,先进后出、生存期限与本次调用。自动释放。主要用于过程的局部环境、活动记录。 堆式动态存储分配:其特点是将内存空间分为若干块,根据用户要求分配;无法满足时,调用无用单元收集程序,将被释放的块收集起来重新分配,主要用于动态数据结构,即存储空间的动态分配和释放。 12、简述运行目标程序时所需空间种类? 目标程序运行时所需空间包括:容纳目标代码所占用空间和目标代码运行时的数据空间。 目标代码运行时的数据空间主要包括:用户定义的各种类型的数据对象(变量和常量)所需的存储空间;作为保留中间结果和传递参数的临时工作单元;调用过程时所需的连接单元,组织输入输出所需的缓冲区。 目标程序运行时的存储区划分:目标代码区、静态数据区、栈区、堆区 13、过程参数的传递方式有几种?简述传地址和传值两种参数传递方式的区别? 参数的传递方式有传值和传地址两种。 传值方式是最简单的参数传递方式。还方式计算出实参的值,然后把它传给被调过程:1.形式参数当作过程的局部变量处理。2.调用过程计算实参的值,并将它们的右值放在为形式单元开辟的空间中。3.被调用过程执行时,就像使用局部变量一样使用这些形式单元。 传地址方式,也称引用调用。该方式调用过程传给被调用过程的是指向实参存储位置的指针。 1.如实参是一个名字或是具有左值的表达式,则左值本身传递过去。2.如实参是一个表达式,比如a+b或2,而没有左值,则表达式先求值,并存入某一位置,然后该位置的地址传递过去。3.被调过程中对形式参数的任何引用和赋值都通过传递到被调过程的指针被处理成间接访问。 14、简述决定目标代码的因素? 决定空间目标代码的因素主要取决于具体的机器结构、指令格式、字长及寄存器的个数和种类,并与指令的语义和所用操作系统。存储管理等密切相关。又由于目标代码的执行效率在很大程度上依赖与寄存器的使用,所以,目标代码与寄存器的分配算法也有关。 15、简述可重定向编译程序的概念和支持可重定向编译的关键技术。 可重定向编译程序是指能够根据不同的目标机生成相应的目标代码的编译程序,它将与目标机相关的部分单独编写成不同模块,根据不同的目标机调用不同的模板。 支持可重定向编译的关键技术主要包括:1)中间表示技术:区别于四元式等传统的中间表示,支持可重定位向编译的中间表示应在适当的抽象层次上,向上能够支持多语言映射、向下能够适应多平台转换后宜于进行各种进化。2)机器描述技术:区别于传统的假定式体系结构抽象模型的描述技术,支持可重定位向编译的机器描述机制应既能描述系统和硬件的共性,又能描述它们各自的特性,且能适应于不同编译程序的处理。3)代码生成程序的构成技术:为简化开始过程、提高代码可靠性,支持代码生成程序的自动构造工具是关键技术和主要难点。4)目标机描述与目标代码生成的接口技术:在重定向编译程序的开始过程中,抽取一系列函数和数据结构作为目标机描述与目标机代码生成的接口可以简化编译程序的开发,提高编译程序的效率。下载本文