编译原理
  • 编译原理
  • 一些简答题
  • 绪论
    • 编译器简介
    • 程序设计语言
    • 静态与动态
    • 参数传递机制
  • 词法分析
    • 词法单元、模式、词素
    • 串和语言
    • 正则表达式
    • 状态转换图
    • 不确定有穷自动机NFA
    • 确定有穷自动机DFA
    • 算法:正则表达式转NFA
    • 自动机到词法分析器
  • 语法分析
    • 语法分析器
    • 上下文无关文法
    • 二义性和左递归
    • 递归下降语法分析
    • 算法:求解FIRST集和FOLLOW集
    • 算法:LL(1)
    • 自底向上语法分析
    • 移入-归约语法分析
    • 算法:LR(0)
    • 算法:SLR(1)
    • 算法:LR(1)
    • 算法:LALR
    • LR分析器和LALR分析器
  • 语法制导
    • 语法制导定义(SDD)
    • 综合属性和继承属性
    • 语法树上的SDD求值
    • 依赖图
    • L属性的SDD
    • 类型
    • SDD的应用
  • 中间代码生成
    • 三地址代码
    • SSA(静态单赋值)
    • 类型和声明
    • 表达式的翻译
    • 类型检查
    • 控制流
    • 回填
  • 运行时刻环境
    • 存储组织
    • 栈式分配
    • 栈中非局部数据的访问
    • 堆管理
    • 垃圾回收
  • 代码生成
    • 代码生成器的设计
    • 目标语言
    • 目标代码中的地址
    • 基本块和流图
    • 基本块的优化
Powered by GitBook
On this page
  • 高级语言、汇编语言和机器语言
  • 编译器在语言处理系统中的位置
  • 编译器、解释器、混合编译器
  • 编译器的结构
  • 趟(Pass)
  1. 绪论

编译器简介

Previous一些简答题Next程序设计语言

Last updated 4 months ago

高级语言、汇编语言和机器语言

  • 高级语言:类似于数学定义或自然语言的简洁形式。接近人类表达习惯,不依赖于特定机器,编写效率高

  • 汇编语言:引入助记符。依赖于特定机器,非计算机人员使用受限制,编写效率依然很低

  • 机器语言:与人类表达习惯相去甚远

编译器在语言处理系统中的位置

预处理器:把存储在不同文件中的源程序聚合在一起,把被称为宏的缩写语句转换为原始语句。

可重定位(Relocatable):让内存中存放的起始位置L不是固定的

链接器:将多个可重定位的机器代码文件(包括库文件)链接到一起,解决外部地址问题

加载器:修改可重定位地址;将修改后的指令和数据放到内存中适当的位置

起始地址 + 相对地址 = 绝对地址

编译器、解释器、混合编译器

  • 编译器:读入以某种语言 (源语言) 编写的程序,输出等价的用另一种语言 (目标语言) 编写的程序,通常目标程序是可执行的。

  • 解释器:直接利用用户提供的输入,执行源程序中指定的操作。不生成目标程序,而是根据源程序的语义直接运行。

  • 混合编译器:Java语言的处理结合了编译和解释,Java源程序编译成字节码(bytecode)中间表示,然后在虚拟机上解释执行。

请简述编译器和解释器的主要区别:编译器和解释器都是⽤于将⾼级语⾔代码转换为低级代码(通常是机器代码或字节码)的⼯具,但它们在执⾏这⼀任务时有⼏个关键区别。

  • 编译器通常⼀次性地将整个源代码转换为⽬标代码,⽣成⼀个可执⾏⽂件。这个可执⾏⽂件可以在没有源代码的情况下独⽴运⾏。

  • 解释器则是逐⾏或逐块地读取源代码,然后⽴即执⾏它,⽽不⽣成⼀个独⽴的可执⾏⽂件。

由于编译器⽣成了优化过的⽬标代码,所以运⾏速度通常更快。解释器更易于调试,因为它允许逐⾏执⾏和修改代码。

编译器的结构

  • 分析部分(前端/Front end)

    把源程序分解成组成要素,以及相应的语法结构。使用这个结构创建源程序的中间表示,同时收集和源程序相关的信息,存放到符号表。

  • 综合部分(后端/Back end)

    根据中间表示和符号表信息构造目标程序,同时对目标程序进行分析、优化。

简要描述编译器前端和后端的主要区别:

编译器前端主要负责语法检查、语义检查、和初步的代码⽣成,包括词法分析、语法分析、 和语义分析等。它通常与源语⾔紧密相关,但与⽬标机器⽆关。⽽后端主要负责代码优化和⽬标代码⽣成,它通常与源语⾔⽆关,但是与⽬标机器紧密相关。

趟(Pass)

  • 每趟读入一个输入文件,产生一个输出文件

  • 步骤(Phase)是逻辑组织方式,趟和具体的实现相关,可以将多个步骤组合成趟