编译原理及其实践教程(第二版)总结

编译原理总结第一章概述1.1 程序设计语言与编译程序1.2 编译过程和编译程序的结构第二章 高级语言设计基础2.1 高级语言设计基础第一章概述(目的:从整体上了解编译的流程 主要是概念)1.1 程序设计语言与编译程序概念合集:编译 :编译与翻译翻译程序 :将翻译程序转换为目标程序的程序,翻译前后的程序在逻辑上是等价的解释程序:边解释边执行源程序本身,而不产生目标程序的翻译程序编译程序和解释程序的区别:编译程序是源程序的一个转换系统,解释程序是源程序的一个执行系统(也就是说解释程序最终会
摘要由CSDN通过智能技术生成

第一章概述

(目的:从整体上了解编译的流程 主要是概念)

1.1 程序设计语言与编译程序

概念合集:

编译 :编辑与翻译

翻译程序 :将源程序转换为目标程序的程序,翻译前后的程序在逻辑上是等价的

解释程序:边解释边执行源程序本身,而不产生目标程序的翻译程序

编译程序和解释程序的区别:

  1. 编译程序是源程序的一个转换系统,解释程序是源程序的一个执行系统(也就是说解释程序最终会有一个代码执行结果)。
  2. 编译程序是先全部翻译为目标程序在执行,可反复执行(有点像Java的编译执行),解释程序对源程序逐句的翻译执行(Python的执行过程)。
  3. 解释程序比编译程序更加的通用。
  4. 通过编译运行,源程序和数据是在不同的时间进行处理的,而解释运行,是同时的。

1.2 编译过程和编译程序的结构

编译的各个阶段:词法分析->语法分析->语义分析->中间代码生成->代码优化->目标代码生成 (如果是问编译程序结构,则在后面都加一个器字,如词法分析器)

各个阶段的任务(重要):

  1. 词法分析:从左到右扫描输入的源程序,检查词法错误,识别单词,并输出单词的内部表示形式
  2. 语法分析:在词法分析的基础上将单词组成各类语法短语,并确认整个输入串是否具有语法上正确的程序结构
  3. 语义分析与中间代码生成:对语义进行检查,如没有错误,则生成中间代码(本书即四元式)
  4. 代码优化:对产生的中间代码进行等价交换,以产生高质量的目标代码
  5. 目标代码生成:把中间代码变换成特定机器上的低级语言代码。

一些相关概念:
遍:指把对源程序或其等价的中间表示形式从头到尾扫描并完成规定任务的过程。
源语言:编译程序处理的对象
目标语言与目标机:是编译程序处理的结果和运行环境
编译方法与工具:生成编译程序的关键

第二章 高级语言设计基础

比较重要,需要掌握推导

2.1 高级语言设计基础

基础概念:
字母表:一个高级语言程序能使用的全体字符构成的集合
符号串:指由该字母表中的符号构成的有穷序列
有关运算(有一点重要):

  1. 长度计算:就是字符个数(空字的长度为0
  2. 符号串的连接:即两个字符串拼接在一起,如01,001,连接之后就是01001
  3. 集合间的乘积:集合U={a}、V={b},a=01,b=001相乘为UV={ab}={01001},注意,乘积满足结合律(UV)M=U(VM),不满足交换律UV!=VU
  4. 集合的n次方幂:自身的n次乘积,0次方为{空字}
  5. 闭包和正闭包:A的闭包(表示A上的一切符号串(包括ε)组成的集合)=在这里插入图片描述
    正闭包 = AA的闭包
    注:A
    中任意一个按一定规则构成的子集称为A上的一个语言
    例:
    在这里插入图片描述
    UV={aa00,aa11,bb00,bb11}
    V*={ε,0,1,00,01,10,11,000,010,100,110,001,011,101,111,…}
    重要概念:

上下文无关文法(文法):是描述语言的语法结构的形式规则,这些规则必须准确且可理解。是一个四元组,文法G=(V(N),V(T),P,S),V(N)是非终结符集,V(T)是终结符集,S是开始符号,P是产生式集合

推导:将一个符号串(通常是从开始符开始)里的非终结符用产生式右部进行替换和展开,直到全为终结符为止。

推导分为最左推导(每一步都是将最左边的非终结符替换为终结符为止)和最右推导

规约:推导的逆过程

句型:从开始符号出发推导的符号串称为文法G的一个句型

句子:若句型里的符号全为终结符,则称为句子

相关计算:
例:
在这里插入图片描述
在这里插入图片描述
(1)是最左推导。(2)是最右推导

可能还要画语法树:语法树就是将每一步推导画成树的形式,画出来之后可以通过叶结点按照从左到右的顺序排列,如果结果是最终推导的结果来检查有没有画对

文法定义的语言:
在这里插入图片描述

2.2.3 文法的二义性

语法树:用一颗树的形式来表示句型的推导

二义文法:某个文法存在某个句型对应两棵或者两棵以上的语法树,称为二义文法(注:文法的二义性并不代表语言一定是二义的,只有产生一个语言的所有的文法都是二义性的,这个语言才是二义的(因为不同文法可以产生同一种语言))

一个程序设计语言是一个记号系统。如同自然语言一样,每种高级语言都由语法语义语用3个方面来定义。

  1. 语法是定义程序构成的一组形式规则。
  2. 语义是一组规则的集合,用以定义程序的含义。
  3. 语用主要是有关程序设计技术和语言成分的使用方法
<
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值