|
摘 要:分析《编译原理》中三个重要的知识点,一是编译过程;二是编译器的设计;三是编译器中所用到的数据结构。并通过一个例子说明了这个观点。
【关键词】:编译原理;编译过程;编译器;数据结构
中图分类号:TP314文献标识码:A
Talking Simply about Some Problems in Study of Fundamentals of Compiling
NING Hua-hua,WANG Hui
(Collage of Computer and Information Technology, Henan Normal University, Henan Xinxiang 453001)
Key words: fundamentals of compiling;compilation process;compiler;data structure
《编译原理》是计算机类较为重要的一门课程,它涉及到离散数学,数据结构等知识,根据自己的学习体会,在这里就一些重要的问题做一些探讨。
1 编译过程
编译过程分为以下六步:
(1)词法分析。从左到右逐个字符地对源程序 ,产生一个个单词序列,用以语法分析。
例如下面的代码行 c =2+4
这个代码包括了8个记号:
C 标识符;[界符;i标识符;]界符;=赋值号;2常数;+运算符;4常数
词法分析结束后将产生形如(单词总别,单词自身的值)的二元式。
(2)语法分析。识别由词法分析给出的单词符号序列是否是给定文法的正确句子。具体分为自顶向下分析和自底向上分析两大类。前者又分为确定分析和不确定分析,后者分为算符优先分析和LR分析。确定的自顶向下分析必须要求文法是LL(1)文法,所以当所给的文法不是LL(1)文法,需通过消除左递归和左公共因子来变换成LL(1)文法,进而进行确定的自顶向下分析。具体的分析方法是递归子程序法和预测分析方法。语法分析的结果是分析树(parse tree)或语法树(syntax tree)。
(3)语义分析。检查每个语法结构的静态语义,即验证语法结构的合法的程序是否真正有意义。如果静态语义正确,则会执行真正的翻译,即生成程序的一种中间表示形式。有关语法树的语义分析结果可以用以下树来表示:
(4)源代码优化。包括很多代码改进和优化,例如上例中2+4由编译器计算机先得到 (常量合并优化)在下面注释树中表示。当然更多的是利用三元式表示。上述三元式代码应为:t=2+4; c=t
(5)代码生成。生成的汇编代码如下:
MOVR0,i // value of i ->R0
MULR0,2 // double value in R0
MOVR1,&c// address of c->R1
ADDR1,R0//add R0 to R1
MOV*R1, //constant ->address in R1
( )目标代码优化。
MOVR0,i
SHLR0
MOV&a[R0],
2 编译器的设计
根据上面所述的编译过程编写相应的程序,即形成编译器。
3 编译器中的主要数据结构
(1)语法树。语法分析通常会生成一棵语法树,语义分析也会产生一棵带注释的语法树。
(2)栈。栈是一种先进后出的线性表的数据结构。在进行语法分析的时候常常要根据栈这个数据结构来对所输入的符号串进行分析,栈中可存放符号,当所输入的当前符号与栈顶符号匹配时则进行一系列操作等。
(3)临时文件。临时文件的使用使得编译时的程序被保存在存储器中。
4 结束语
书本上理论方面,各个步骤讲得非常详细,但是却没有一道例子能够按照编译的过程讲述,本文结合一道简单的例子c=2+4给出了编译的六大步骤,并简要概括了程序在编译的过程中用到的数据结构。
参考文献:
[1]张素琴,吕映芝,蒋维杜,戴桂兰.编译原理[M].北京:清华大学出版社.
[2]LOUDEN,K.C.冯博琴等译.编译原理及实践[M].北京:机械工业出版社.
转载注明来源:http://www.ybaotk.com |
上一篇:刍议农村初中历史教学存在的问题及对策下一篇:中学生不配合课堂教学现象之我见
|