编译原理基本知识
基本概念
? 程序生成过程
? 源程序
---用汇编语言或高级语言编写的程序称为源程序。
? 目标程序
---用目标语言所表示的程序。可以是介于源语言和机器语言之间的“中间语言”,可以是某种机器的机器语言,也可以是某机器的汇编语言。
? 翻译程序
---将源程序转换为目标程序的程序称为翻译程序。它是指各种语言的翻译器,包括汇编程序和编译程序,是汇编程序、编译程序以及各种变换程序的总称。
? 诊断编译程序 ? 优化编译程序 ? 交叉编译程序 ? 可变目标编译程序
汇编程序:若源程序用汇编语言书写,经过翻译程序得到用机器语言表示的程序,这时的翻译程序就称之为汇编程序,这种翻译过程称为“汇编”(Assemble)。
编译程序:若源程序是用高级语言书写,经加工后得到目标程序,这种翻译过程称“编译”(Compile)。
需预处理的源程序预处理程序 源程序编译程序目标汇编程序汇编程序可再装配的机器代码装配/连接-编辑程序绝对机器代码可再装配目标文件
? 编译器
编译器就是一个程序,它读入用某种语言编写的源程序,并翻译成一个与之等价的另一种语言编写的源程序。
编译过程的基本阶段
编译过程是指将高级语言程序翻译为等价的目标程序的过程。其一般包含5个基本阶段:
? 词法分析
任务:分析和识别单词。
描述:源程序是由字符序列构成的,词法分析扫描源程序(字符串),根据语言的词法规则分析并识别单词,并以某种编码形式输出。
方法:词法分析依照词法规则,识别出正确的单词,转换成统一规格备用。 转换:
—对基本字,运算符,界符的转换 —标识符的转换 —常数的转换
—转换完成后的格式(类号,内码) 工具:正规式和有限自动机 例子1:
X1:= ( 2.0 + 0.8 ) * C1 1 2 3 4 5 6 7 8 9
例子2: Void jisuan( ) {
int y,c,d;
float x,a,b; x=a+b*50; y=c+d*(x+b); }
基本字:Void,int,float 标识符:a,b,c,d,x,y,jisuan 常数:50 运算符:*,+,=,- 界限符:{ } ; , ( ) 例子3:
position = initial + rate * 60
第一步:识别出单词(关键字、标识符、常数、算符和界符)。
position、=、initial、+ 、rate、*、60
第二步:并用记号表示识别出的单词(记号表示逻辑上相关的字符序列,常用整数来表示)。
id1、id2、id3表示position、initial、rate
第三步:输出结果(得到记号流)。
id1=id2+id3*60
? 语法分析
任务:根据语法规则(即语言的文法),分析并识别出各种语法成分,如表达式、各种说明、各种语句、过程、函数等,并进行语法正确性检查。
方法:推导(derive)和归约(reduce)。