首页 > 范文大全 > 正文

浅谈《编译原理》学习中的几个问题

开篇:润墨网以专业的文秘视角,为您筛选了一篇浅谈《编译原理》学习中的几个问题范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:分析《编译原理》中三个重要的知识点,一是编译过程;二是编译器的设计;三是编译器中所用到的数据结构。并通过一个例子说明了这个观点。

关键词:编译原理;编译过程;编译器;数据结构

中图分类号: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 453007)

Key words: fundamentals of compiling;compilation process;compiler;data structure

《编译原理》是计算机类较为重要的一门课程,它涉及到离散数学,数据结构等知识,根据自己的学习体会,在这里就一些重要的问题做一些探讨。

1 编译过程

编译过程分为以下六步:

(1)词法分析。从左到右逐个字符地对源程序 ,产生一个个单词序列,用以语法分析。

例如下面的代码行 c [i]=2+4

这个代码包括了8个记号:

C 标识符;[界符;i标识符;]界符;=赋值号;2常数;+运算符;4常数

词法分析结束后将产生形如(单词总别,单词自身的值)的二元式。

(2)语法分析。识别由词法分析给出的单词符号序列是否是给定文法的正确句子。具体分为自顶向下分析和自底向上分析两大类。前者又分为确定分析和不确定分析,后者分为算符优先分析和LR分析。确定的自顶向下分析必须要求文法是LL(1)文法,所以当所给的文法不是LL(1)文法,需通过消除左递归和左公共因子来变换成LL(1)文法,进而进行确定的自顶向下分析。具体的分析方法是递归子程序法和预测分析方法。语法分析的结果是分析树(parse tree)或语法树(syntax tree)。

(3)语义分析。检查每个语法结构的静态语义,即验证语法结构的合法的程序是否真正有意义。如果静态语义正确,则会执行真正的翻译,即生成程序的一种中间表示形式。有关语法树的语义分析结果可以用以下树来表示:

(4)源代码优化。包括很多代码改进和优化,例如上例中2+4由编译器计算机先得到6(常量合并优化)在下面注释树中表示。当然更多的是利用三元式表示。上述三元式代码应为:t=2+4; c[i]=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,6//constant 6->address in R1

(6)目标代码优化。

MOVR0,i

SHLR0

MOV&a[R0],6

2 编译器的设计

根据上面所述的编译过程编写相应的程序,即形成编译器。

3 编译器中的主要数据结构

(1)语法树。语法分析通常会生成一棵语法树,语义分析也会产生一棵带注释的语法树。

(2)栈。栈是一种先进后出的线性表的数据结构。在进行语法分析的时候常常要根据栈这个数据结构来对所输入的符号串进行分析,栈中可存放符号,当所输入的当前符号与栈顶符号匹配时则进行一系列操作等。

(3)临时文件。临时文件的使用使得编译时的程序被保存在存储器中。

4 结束语

书本上理论方面,各个步骤讲得非常详细,但是却没有一道例子能够按照编译的过程讲述,本文结合一道简单的例子c[i]=2+4给出了编译的六大步骤,并简要概括了程序在编译的过程中用到的数据结构。

参考文献:

[1]张素琴,吕映芝,蒋维杜,戴桂兰.编译原理[M].北京:清华大学出版社.

[2]LOUDEN,K.C.冯博琴等译.编译原理及实践[M].北京:机械工业出版社.