语言之间的翻译
- 汇编语言->机器语言:汇编(或交叉汇编)
- 程序语言-汇编语言或机器指令:编译(或解释)
- 高级语言之间:转换(或预编译)
- 逆向:反汇编,反编译
翻译形态
编译器:先翻译后执行
解释器:边翻译边执行
语言成分
声明+操作=完整定义,
声明:生成相应的环境,一般是配置存储空间;
操作:生成可执行的代码序列。
原则:先声明后引用
编译器工作过程
源程序(字符序列)-> 词法分析(记号流)-> 语法分析(语法树)-> 语义分析(修改树结构)-> 中间代码生成(可选)-> 代码优化(可选)-> 目标代码生成(不同形式:汇编,可重定位,内存形式)
这个过程中始终伴随着符号表管理和出错处理。
基本架构
前端:语言结构和意义的分析; (语法/语义分析)
后端:语言意义处理;(代码生成/优化)
中间代码:前端与后端的分界;
扫描遍数
每个阶段将程序完整分析一边的工作模式为一遍扫描。
因素:软硬件条件(内存大小),语言结构(如标识符先声明后引用),编译技术(拉链-回填)等。