美文网首页
[编译器设计第二版] 第一章编译概述

[编译器设计第二版] 第一章编译概述

作者: 耿杰 | 来源:发表于2019-08-19 16:00 被阅读0次

摘自:<<编译器设计 第二版>>, 支持正版。

1.1、简介

  • 1、编译器:用于转换其他计算机程序的计算机程序。

  • 2、指令集:处理器支持的操作的集合,指令集的总体设计通常称为指令集系统结构(Instruction Set Architecture, ISA)。

  • 3、虚拟机:虚拟机是针对某种处理器的模拟器,它是针对 该机器指令集的解释器。

  • 4、编译的基本原则

    • a、编译器必须保持被编译程序的语义。
    • b、编译器必须以某种可觉察的方式改进输入程序。

1.2 编译器结构

  • 1、编译器基本分解是以下两个主要部分的设计:前端和后端。


    前端和后端
    • a、前端专注于理解源语言的程序
    • b、后端专注于将程序映射到目标机。
  • 2、IR:编译器使用一些数据结构来表示它处理的代码,这种形式称为中间表示( Intermediate Representation, IR)。

  • 3、重定目标:改变编译器使之针对 新处理器生成代码的任务,通常称为将该编译器重定目标。

  • 4、优化器:编译器的中间部分称为优化器,负责分析并转换IR,以改进IR。


    三阶段编译器
  • 5、三阶段结构表示了经典 的优化编译器。实际上,每个阶段都划分为若干趟。编译器的三个阶段和其中的各趟处理共享了同一个基础设施。


    典型编译器的结构

1.3 转述概述

1.3.1、前端

在编译器将源代码转换目标程序之前,它必须理解源代码的语法和语义。它会根据语法和语义,判断输入的代码是否是良构的。如果前端发现代码是有效的,它会以编译器的IR格式来建立代码的一种表示,否则,它向用户回报诊断错误信息,以标识该代码的问题。

步骤
检测语法

数学上,源语言是一个字符串的集合,通常是无限集,由某种规则的有限集定义(语法)。前端中有趟独立的处理,分别称为词法分析器和语法分析器,来判断输入代码实际是否属于语法定义的有效程序集合。

词法分析器

  • 1、例如在英语中,许多句子有下述形式。其中verb和endmark是词类,而Sentence、Subject是语法变量。符号 ->读作"导出",意味着右侧的一个实例可以抽象为左侧的语法变量。
Sentence (句子) -> Subject (主语)  verb(动词) Object(宾语) endmark(结束标点符号)
  • 2、理解以上案例句子语法时,第一步是标识输入程序中的各个单词,并将每个单词归入对应的词类,是词法分析器的执行该操作。
中间表示
扩展
  • 词法分析器:将字符构成的串转换为单词构成的流
  • 语法分析器:判断输入流是否是源语言的一个句子
  • 类型检查:检查输入程序中对名字的使用在类型方面是否一致

1.3.2、优化器

1.3.3、后端

相关文章

网友评论

      本文标题:[编译器设计第二版] 第一章编译概述

      本文链接:https://www.haomeiwen.com/subject/uurcsctx.html