编译器:一个程序,将源程序(高级语言)翻译成目标程序(机器语言)
优点:执行速度快
解释器:用户边输入边执行
优点:错误诊断好 缺点:效率低
二者本质区别-----输出:一个输出目标程序,一个输出执行结果
C语言程序执行过程:预处理--->编译--->链接--->装入
编译步骤:
源程序--->
词法分析器----语法分析器---语义分析器---中间代码生成器----代码优化器----机器代码生成器
前端(front end) 后端(back end)
词法分析器(Lexical Analysis)aka 扫描程序(scanning)
是编译的第一个阶段,将源程序字符流转换为词法单元tokens(aka.单词words)
(其中源程序中的空格被删除,注释也可被处理)
词法单元/单词 分类有:
1.保留字:if、else、while、do、int、float等
2.标识符:即用户自定义的变量名等,如nums、a、elem、x
3.常数:如int常数369、bool常数TRUE等
4.运算符:如“+、-、*、/、<、>”
5.界符:分界符号使用,如“,”“;”“(”“)”等
注意:保留字、运算符、界符的个数是确定的; 而常数、标识符则是不限定个数的。
语法分析器(Syntax analysis)aka.识别程序(parser)
将词法分析器的输出,根据一定语法规则,检查语法的正确性,转换为一种内部表示,比如语法树,如
语义分析(Semantic Analysis)
对语法分析器的结果进行进一步分析,避免指代不明和二义性