中国大学MOOC-编译原理课程笔记(第一讲 绪论)

    技术2024-07-30  68

    中国大学MOOC-编译原理课程笔记(第一讲 绪论)

    [中国大学MOOC-编译原理课程笔记(第一讲 绪论)](https://www.icourse163.org/course/HIT-1002123007)第一讲 绪论1-1 什么是编译1.1.1 计算机程序设计语言及编译1.1.2 编译器在语言处理系统中的位置 1.2 编译系统的结构1.3 词法分析概述1.3.1 词法分析/扫描 1.4 语法分析概述1.5 语义分析概述1.6 中间代码生成及编译器后端1.7 练习题1.8 讨论1.8 PPT

    中国大学MOOC-编译原理课程笔记(第一讲 绪论)

    第一讲 绪论

    1-1 什么是编译

    1.1.1 计算机程序设计语言及编译

    编译:将高级语言翻译成汇编语言或机器语言的过程

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

    预处理器 把存储在不同文件中的源程序聚合在一起把被称为宏的缩写语句转换为原始语句 可重定位 在内存中存放的起始位置L不是固定的起始位置+相对地址 = 绝对地址 加载器 修改可重定位地址:将修改后的指令和数据放到内存中适当的位置 链接器 将多个可重定位的机器代码文件(包括库文件)连接到一起解决外部内存地址问题

    1.2 编译系统的结构

    词法分析:识别出单词的词类(介词/冠词/名词/代词)语法分析:分析句子中的短语(介词短语/名词短语/动词短语)语义分析:分析短语关系(状语/主语/谓语/宾语/补语) 语法制导翻译

    1.3 词法分析概述

    1.3.1 词法分析/扫描

    词法分析的主要任务 从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。将识别出的单词转换成统一的机内表示——词法单元(token)形式token:<种别码,属性值> 序号单词类型种别种别码1关键字program、if、else、then、…一词一码2标识符变量名、数组名、记录名、过程名多词一码3常量整型、浮点型、字符型、布尔型、…一型一码4运算符算术(+ - * 、 ++ --) 关系(> < == != >= <=) 逻辑(& | ~)一词一码或一型一码5界限符; () = {} …一词一码 例:词法分析后得到的token序列 输入while(value!=100){num++;}种别码1while<WHILE, - >2(<SLP , - >3value<IDN , value>4!=<NE , - >5100<CONST , 100>6)<SRP, ->7{<LP, ->8num<IDN, num>9++<INC, ->10;<SEMI, ->11}<RP, ->

    1.4 语法分析概述

    语法分析器从词法分析器输出的token序列中识别出各类短语,并构造语法分析树语法分析树描述了句子的语法结构 例1:赋值语句的分析树 例2:变量声明语句的分析树

    1.5 语义分析概述

    语句分类: 声明语句可执行语句 语义分析的主要任务 收集标识符的属性信息 种属(Kind) 简单变量、复合变量(数组、记录、…)、过程、… 类型(Type) 整型、实型、字符型、布尔型、指针型、… 存储位置、长度值作用域参数和返回值信息 参数个数、参数类型、参数传递方式、返回值类型、… 语义检查 变量或过程未经声明就使用变量或过程名重复声明运算分量类型不匹配操作符与操作数之间的类型不匹配 数组下标不是整数对非数组变量使用数组访问操作符对非过程名使用过程调用操作符过程调用的参数类型或数目不匹配函数返回类型有错误

    1.6 中间代码生成及编译器后端

    常见的中间表示形式

    三地址码 三地址码由类似于汇编语言的指令序列组成每个指令最多有三个操作数 语法结构树/语法树

    常用的三地址指令

    三地址指令的表示

    四元式 (op,y,z,x)三地址指令的四元表示 三元式间接三元式

    中间代码生成的例子

    编译器的结构

    代码优化

    1.7 练习题

    1 编译是对()。 A. 机器语言的执行 B. 汇编语言的翻译 C. 高级语言的翻译 D. 高级语言程序的解释执行 正确答案:C你选对了 2 用高级语言编写的程序经编译后产生的程序叫( ). A. 源程序 B. 目标程序 C. 连接程序 D. 解释程序 正确答案:B你选对了 3 ( )不是编译程序的组成部分。 A. 词法分析程序 B. 代码生成程序 C. 设备管理程序 D. 语法分析程序 正确答案:C你选对了 4 源程序是句子的集合,( )可以较好地反映句子的结构。 A. 线性表 B. 树 C. 完全图 D. 堆栈 正确答案:B你选对了 5 编译程序是一种( )。 A. 汇编程序 B. 翻译程序 C. 解释程序 D. 目标程序 正确答案:B你选对了 6 按逻辑上划分,编译程序第三步工作是( )。 A. 语义分析 B. 词法分析 C. 语法分析 D. 代码生成 正确答案:A你选对了 7 编译程序中语法分析器接收以( )为单位的输入。 A. 单词 B. 表达式 C. 产生式 D. 句子 正确答案:A你选对了 8 编译过程中,语法分析器的任务就是( )。 A. 分析单词是怎样构成的 B. 分析单词串是如何构成语句和声明的 C. 分析语句和声明是如何构成程序的 D. 分析程序的结构 正确答案:B你选对了 9 语法分析时所依据的是( ) A. 语法规则 B. 词法规则 C. 语义规则 D. 等价变换规则 正确答案:A你选对了

    1.8 讨论

    【讨论1-1】编译过程与人工翻译过程之间的关系:编译的过程与人工翻译自然语言的过程存在着什么样的对应关系?

    编译过程在一定意义上等价于人工翻译。如同外文翻译为中国话,首先要认识外文中每一个单词,就等于编译过程中的词法分析。其次判断每个单词的词性,进而组成短语,就相当于语法分析。在之后将短语链接起来,进行整句话意义的判断就等于是编译过程中的语义分析。人工翻译时翻译者在自己脑中理解的意义就相当于中间代码。在脑中将意义进行整理归纳为对应的完整的句子就是代码优化。最后进行翻译就等于是编译过程中的目标代码生成。

    【讨论1-2】符号表中NAME字段的设计:符号表中NAME字段为什么要设计字符串表这样一种数据结构,而不是把标识符对应的字符串直接存放到name字段中?

    因为字符串长度难以固定,如果直接放入name字段,无法确定要给name字段多少内存空间,不如放位置索引,对于内存的使用更加灵活方便。

    1.8 PPT

    PPTPPT
    Processed: 0.015, SQL: 9