两种主要方式:
Interpreters 解释器Compilers 编译器区别:编译器做了更多预处理,解释器直接解释执行(“run as is”),预处理很少。
将程序设计语言翻译成另一种的Program。
Source Program -> Compiler -> Target Program
input -> Target Program -> output
除了Compiler,还可以做命令解释器等…
Hybrid Compiler
source program -> Translater -> intermediate program -> Virtual Machine -> output
最大特点:跨平台,针对不同平台设计不同的虚拟机,中间代码不受影响。
源程序 -> 预处理 -> 编译器处理 -> 汇编代码 -> 目标代码 -> 链接装载 -> 执行
符号表 Symbol table:记录在程序中全部的变量名,函数名,常量等。
字符系统 -> 语法分析 -> 语法树 -> 语义分析 -> 丰富语法数(加上语义信息)-> 中间代码 -> 目标代码
scan
将有意义的单元称作 token (词法单元)
e.g.a[index]=4+2
a [ index ] = 4 + 2
a identifierindex identifier= assign+ plus sign[ left bracket] right bracket4 number2 numberparsing
确定source program 的结构。
结果是语法树 (abstract) syntax tree 或者 分析树 parse tree
使用符号分析各个结构构成树形结构。
前后端交互——中间代码。
对原程序的语法词法的一套分析(生成code之前),称为pass。
大多数编译器经历数个pass。
frontend pass and backend passscanning and parsing 生成语法树 & 中间代码 & 生成code