《编译原理》之常规知识?/p>
一?/p>
编译程序
1
?/p>
编译?/p>
是一种翻译程序,
它用于将
源语言
(即用某种程序设计语言写成的)
程序翻译?/p>
目标语言
(即用二进制数表示的伪机器代码写成的)程序。后者在
windows
操作系统平台
下,其文件的扩展名通常?/p>
.obj
。该文件通常还要经过进一步的连接,生?/p>
可执行文?/p>
(机
器代码写成的程序,文件扩展名?/p>
.exe
?/p>
。通常有两种方式进行这种翻译,一种是
编译
,另
一种是
解释
?/p>
后者并不生成可执行文件?/p>
只是翻译一条语句?/p>
执行一条语句。这两种方式?/p>
编译比解释运行的速度要快得多?/p>
2
?/p>
编译过程?/p>
5
个阶?/p>
:词法分析;语法分析;语义分析与中间代码产生;优化;目标?/p>
码生成?/p>
3
?/p>
在这五个阶段中,
词法分析
的任务是识别源程序中的单词是否有误,编译程序中实现这
种功能的部分一般称为词法分析器?/p>
在编译器中,
词法分析器通常仅作?/p>
语法分析程序
的一
个子程序以便在它需要单词符号时调用?/p>
在这一编译阶段中发现的源程序错误,
称为
词法?/p>
?/p>
?/p>
4
?/p>
语法分析
阶段的目的是识别出源程序的语法结构(即语句或句子)是否错误,所以有?/p>
又常?/p>
句子分析
。编译程序中负责这一功能的程序称?/p>
语法分析?/p>
?/p>
语法分析程序
。在?/p>
一阶段中发现的错误称为
语法错误
?/p>
5
?/p>
C
语言的(源)程序必须经过编译才能生成目标代码,再经过链接才能运行?/p>
PASCAL
语言?/p>
FORTRAN
语言的源程序也要经过这样的过程。通常?/p>
C
?/p>
PASCAL
?/p>
FORTRAN
?/p>
样的语言统称?/p>
高级语言
。而将最终的可执行程序称?/p>
机器语言程序
?/p>
6
?/p>
在编?/p>
C
语言程序的过程中?/p>
发现源程序中的一个标识符过长?/p>
超过了编译程序允许的
范围,这个错误应在词法分析阶段发现,这种错误通常被称作词法错误?/p>
?/p>
词法分析器的
任务
是以词法规则为依据对输入的源程序进行单词及其属性的识别?/p>
识别
出一个个单词符号?/p>
?/p>
词法分析?/p>
输入
是源程序?/p>
输出
是一个个单词的特殊符号,称为
Token
(标记或符号?/p>
?/p>
?/p>
有两种方法可?/p>
实现
词法分析器:
一?/p>
手工编写
词法分析程序?/p>
二,由词法分析器
自动
生成
程序生成?/p>
?/p>
语法分析器的
类型
?/p>
:
自下而上、自上而下。常用的语法分析器有?/p>
递归下降分析方法
是一种自上而下分析方法
,
算符优先分析?/p>
属于自下而上分析方法?/p>
LR
分析?/p>
属于?/p>
下而上分析方法等等?/p>
?/p>
为了方便语法分析程序的使用,词法分析过程中通常对所识别出的
单词符号进行分类
?