编译原理-1

mac2024-04-18  30

语言如何实现

两种主要方式:

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

最大特点:跨平台,针对不同平台设计不同的虚拟机,中间代码不受影响。

语言处理系统的处理过程

源程序 -> 预处理 -> 编译器处理 -> 汇编代码 -> 目标代码 -> 链接装载 -> 执行

编译的七个阶段

Lexical Analyzer 词法分析Syntax Analyzer 语法分析Semantic Analyzer语义分析Intermediate code generator 中间代码生成Machine-independent code optimizer 机器无关代码优化Code generator 目标代码生成Machine-dependent Code Optimizer 机器相关代码优化

符号表 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 number

语法分析

parsing

确定source program 的结构。

结果是语法树 (abstract) syntax tree 或者 分析树 parse tree

分析树

使用符号分析各个结构构成树形结构。

前后端交互——中间代码。

pass

对原程序的语法词法的一套分析(生成code之前),称为pass。

大多数编译器经历数个pass。

frontend pass and backend passscanning and parsing 生成语法树 & 中间代码 & 生成code
最新回复(0)