《编译原理》应知应会、难点答疑

1、编译程序前三个阶段完成的工作是词法分析、语法分析、语义分析和中间代码生成。
2、代码生成阶段的主要任务是把中间代码变换成依赖具体机器的目标代码。
3、扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即单词。
4、通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的分析,中间代码生成、代码优化与目标代码的生成则是对源程序的综合。
5、程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即静态存储分配方案和动态存储分配方案。
6、LR(0)分析器:所谓LR(0)分析,是指从左至右扫描和自底向上的语法分析,且在分析的每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再向前查看0个输入
符号,就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作 (是移进还是按某一产生式进行归约等)。
7、代码优化的目的是节省时间和空间。
8、词法分析:词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则,从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,并转换成统一的内部表示(token),送给语法分析程序。
9、语法树:句子的树结构表示法称为语法树(语法分析树或语法推导树)。给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的语法树。
10、语言和文法:文法就是语言结构的定义和描述,是有穷非空的产生式集合。简单的说,文法描述的语言是该文法一切句子的集合。
11、编译程序的工作分为那几个阶段?
答:词法分析、语法分析和语义分析是对源程序进行的分析(称为编译程序的前端),而中
间代码生成、代码优化和代码生成三个阶段合称为对源程序进行综合(称为编译程序的后端),它们从源程序的中间表示建立起和源程序等价的目标程序。
12、编译程序和高级语言有什么区别?
答:汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器语言表示的目标程序(这个过程即编译),才能由计算机执行。执行转换过程的程序叫编译程序。汇编程序是指没有编译过的汇编语言源文件。编译程序转换过的叫目标程序,也就是机器语言。
编译程序的工作情况有三种:汇编型、解释型和编译型。汇编型编译程序用来将汇编语言编写的程序,按照一一对应的关系,转换成用机器语言表示的程序。解释型编译程序将高级语言程序的一个语句,先解释成为一组机器语言的指令,然后立即执行,执行完了,取下一组语句解释和执行,如此继续到完成一个程序止。用解释型编译程序,执行速度很慢,但可以进行人和计算机的"对话",随时可以修改高级语言的程序。BASIC语言就是解释型高级语言。编译型编译程序将级语言编写的程序,一次就会部翻译成机器语言表示的程序,而且过程进行很快,在过程中,不能进行人机对话修改。FORTRAN语言就是编译型高级语言。
14、简述自下而上的分析方法。
答:所谓自下而上分析法就是从输入串开始,逐步进行“归约”,直至归约到文法的开始符号;或者说从语法树的末端开始,步步向上“归约”,直到根节点。
15、证明下述文法G:SaSbS|aS|d是二义性文法。
解:一个文法,如果存在某个句子有不只一棵语法分析树与之对应,那么称这个文法是二义性文法。句子aadbd有两棵语法树。如下图:
              1                                2
由此可知,SaSbS|aS|d定义的文法是二义性文法。
16、对于文法G[S]SABAAa|bBBa|Sb求句型baSb的全部短语、直接短语和句柄?句型baSb的语法树如图五(2)所示。
图五(2 句型baSb的的语法树
解:baSb为句型baSb的相对于S的短语,ba为句型baSb的相对于A的短语,Sb为句型baSb的相对于B的短语,且为直接短语,a为句型baSb的相对于B的短语,且为直接短语和句柄。
17、设有非确定的有自限动机NFA  M={ABC}{01}{A}{C}),其中:A0={C}A1={AB}B1={C}C1={C}。请画出状态转换距阵和状态转换图。
解:状态转换距阵为:
0
1
A
C
AB
B
C
C
C
basic语言属于高级语言
状态转换图为:
13、简述代码优化的目的和意义。
答:代码优化是尽量生成“好”的代码的编译阶段。也就是要对程序代码进行一种等价变换,在保证变换前后代码执行结果相同的前提下,尽量使目标程序运行时所需要的时间短,同时所占用的存储空间少。