编译原理-1

语言如何实现

两种主要方式:

  • 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 identifier
  • index identifier
  • = assign
  • + plus sign
  • [ left bracket
  • ] right bracket
  • 4 number
  • 2 number

语法分析

parsing

确定source program 的结构。

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

分析树

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

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

pass

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

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

  • frontend pass and backend pass
  • scanning and parsing 生成语法树 & 中间代码 & 生成code
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值