编译原理系列之一

本笔记为观看西安交通大学 冯博琴老师视频记录

课程特点

基础性、科学性、普适性、针对性

学习目的

  1. 实现编译器
  2. 专业编译器(为某一种用途所设计的语言,比如税务)
  3. 计算思维(编译原理很好的反映了计算机特点)

如何学

  1. 记笔记
  2. 勤思考:每个部分 解决什么问题

什么叫编译程序

编译程序是系统软件中资格最老的成员之一。

基础:自动机和形式语言(学数学人弄得)

素材:数据结构、离散数学

编译理论的应用:
有穷状态技术、上下文无关文法、语法制导翻译、代码优化技术

翻译程序:(Translator)是一种程序,其输入为一种语言,输出为目标语言。
编译程序:(Compiler)是一种程序,把高级语言的源程序作为接收,编译为面向机器代码,汇编为目标程序代码。

汇编是和机器关联的,面向机器的。

编译过程概述

源程序——词法分析(得:单词符号)——语法分析(得:语法单位)——中间代码生成(得:中间代码)——代码优化(得:中间代码(优化后))——目标代码生成(得:目标代码)

比喻:英语文章——断词(查字典:词性、本身翻译)(对应词法分析)——分析“句子”(对应语法分析)——理解含义、草译(对应中间代码生成)——反复优化翻译(对应代码优化)——交差

词法分析

任务:输入源程序:扫描、分解字符串,识别出一个个单词(定义符(可以查表)、标识符、运算符、分界符、常数)

词法分析依据:构词规则

主要理论基础: 自动机理论

语法分析

三件事情:
1. 每一个过程它的入口是什么
2. 每一个过程结果产生了什么
3. 中间过程是什么

任务:在词法分析基础上,将单词符号串转化为语法单位(语法范畴)(短语、子句、句子、程序段、程序),并确定整个输入串是否构成语法上正确的程序。

依据:语法规则(不同语言不同规则,比如C的for语句怎么写才对)

主要理论基础: 上下文无关文法

中间代码生成

任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)
(用另外一种语言写中间代码,看出来你是一个子句、句子、程序段)

依据:语义规则

理论基础:属性文法

程序好:程序短、运行快

代码优化

可读性、鲁棒性等……
时间和空间方面优化

循环为程序优化研究最多的地方(语句少点、强度低点)

任务:对于代码(主要是中间代码)进行加工变换,以期能够产生更高效(省时间和空间)的目标代码。

依据:程序等价变换规则

寄存器的分配:(相当啰嗦)
哪个寄存器可以放,哪个不可以放?

目标代码生成

任务:将中间代码变换成特定机器上的低级语言代码

目标代码形式:绝对指令(所有指令地址写死)、可重定位指令()、汇编指令

依据:硬件体系结构、指令系统

编译程序的结构

编译程序总框

编译器程序总框

表格与表格处理

编译各个阶段均须维持表格并进行表格管理

建表的技术支持数据结构

表格的分类、结构、处理方法决定于语言及机器还有优化措施。

编译程序涉及的表格有:

  • 符号名表:(常量名、变量名、数组名、过程名、性质、引用、定义)
  • 常数表(各种类型常数的值)
  • 标号表:(标号的定义和引用情况)
  • 入口名表:(过程的入口名和入口位置)
  • 过程引用表:(外部过程的名字、引用位置)
  • 循环表、等价名表、共用链表、格式表、中间代码表

出错处理

(为用户着想,错误处理好些)

一个好的编译程序应该:

  • 全 (最大限度发现错误)
  • 准 (准确指出错误的性质和发生地点)
  • 局部化 (将错误的影响限制在尽可能小的范围内)
  • 若能自动校正错误则更好,但其代价非常高

程序中的错误通常分为:

  • 语法错误:(不符合语法(或词法)规则的错误)如,单词拼写错误、括号不匹配……
  • 语义错误:不符合语义规则的错误,比如:说明错误、作用域错误、类型不匹配……

遍:是对源程序或源程序 的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。

编译程序生成

其他

771多所学校有计算机专业

实验科学、理论科学、计算科学

逻辑思维(数学思维)、实证思维(物理思维:观察、归纳——发现规律)

计算思维核心:一是抽象(形式化)、二是自动

你可能感兴趣的:(编译原理)