当前课程知识点:编译原理 > 第1章 编译原理概述 > 1.1 什么是编译原理 > 什么是编译原理
同学们
欢迎进入编译原理课堂
语言是人与人之间传递信息的媒体和手段
在计算机领域
程序设计语言充当了人与计算机之间的通信工具
自从计算机诞生以来
先后出现了许多程序设计语言
我们可以把语言划分为这么几类
机器语言 汇编语言 高级程序设计语言
机器语言是机器能直接识别的程序语言或指令代码
每一条指令
可以说都是用规定格式的0 1串来表示
在计算机内部都有相应的电路来完成它
不需要翻译
就可被机器直接理解
不同的计算机
它们都有各自的机器语言
也就是指令系统
机器语言是由0或1组成的机器指令
可读性非常差
不便于人们进行程序设计
为了改变这种现象
计算机专家考虑用适当的助记符
来表示这些难记难懂 难理解的0 1代码
这就是汇编语言
汇编语言
用一系列助记符代替一个特定的指令
用ADD
代表数字逻辑上的加
MOV呢
代表数据传递等等
通过这种方法
人们很容易去阅读
已经完成的程序
或者理解程序正在执行的功能
计算机的硬件自然不识别这些字母符号了
这个时候呢就需要一个专门的程序
把这些字符变成计算机能够识别的二进制数
这个程序就是汇编程序
比起机器语言
汇编语言特别便于记忆和书写
同时呢又保留了机器语言的高效性
但是汇编语言仍是面向机器的语言
很难从其代码上理解程序设计的意图
设计出来的程序也不易被移植
在编程语言经历了机器语言
汇编语言之后
为了更高效的使用计算机
人们设计出了高级编程语言
来满足人们对于高效且简单的编程语言的追求
在1956年
IBM公司推出第一个高级语言FORTRAN
之后呢出现了 BASIC
ALGOL、PASCAL、COLBOL、C、C++、JAVA等等
大家来看
这里是一个C语言编写的程序
高级语言是面向用户的
基本上独立于计算机
高级程序设计语言
最大的优点
就是形式上接近于算术语言和自然语言
使用非常的方便
但是计算机不认识他
他们必须被翻译为机器语言的程序才能被执行
这种翻译工作是由一个翻译程序来完成
那么什么是翻译程序
翻译程序就是将某一种语言描述的程序
这种程序我们通常称之为源程序
把它翻译成等价的另一种语言描述的程序
这个时候呢我们把这种语言的程序称之为目标程序
编译程序(Compiler) 是将高级程序语言
翻译为汇编程序设计语言
翻译程序有两类
一类是解释程序
一类是编译程序
解释程序
它是在翻译的过程中
不断地读取源程序中的语句
对每次读到的语句进行解释
同时读取执行此语句所需要的数据
然后执行这个语句
再根据执行结果读取下一条将要执行的语句
再次进行解释执行
重复这个过程
直到程序执行结束
这种一边解释一边执行的程序
我们把它称之为解释程序
类似于咱们的同声翻译
那么编译程序
就是接受全部的源程序
翻译之后输出与之等价的目标程序
然后再对其进行相应的处理
之后呢投入运行
这种将源程序完整地
转换成机器语言或者汇编语言程序
然后再处理 执行的翻译程序我们称之为编译程序
类似于自然语言翻译中的通篇翻译
编译程序是一种语言处理系统
它就是把高级程序语言
书写的各种程序
处理成可以在计算机上执行的程序
这个执行程序
可在一个源语言文件无关的环境下被执行
编译程序在程序执行之前
完成所有的翻译工作
所以可以看到
解释程序工作效率低
但是呢交互性和动态性特别好
可移植性强
编译程序呢工作效率高
但是交互性和动态性比较差
大多数程序设计语言都采取编译程序这个方法
从翻译的角度来看
解释程序和编译程序
所涉及的原理
方法 技术是类似的
编译程序要求编译出来的目标程序
必须是可重定位的
以适应并发和动态管理的需求
此外
通常编译程序
编译出来的目标程序是不能直接执行的
有的还需要连接装配
构成可执行程序
并在适当的支持之下进行运行
所以
编译程序和相应的运行系统一起构成了编译系统
编译原理这门课程
重点讲解编译程序的思想以及实现方法和技巧
希望大家通过这门课的学习
能够掌握编译原理中的
基本的概念基本理论以及基本方法
在系统层面上
再认识程序和算法
提升用计算机求解问题的水平
体验实现自动翻译的乐趣
这节课就讲到这里
谢谢大家
-1.1 什么是编译原理
--什么是编译原理
--什么是编译程序
--讨论:翻译程序、汇编程序、编译程序、解释程序的区别和联系。
--练习1
-1.2 编译的基本过程
--编译的基本过程
--编译的基本过程
--练习2
-1.3 编译程序的组织
--编译程序的组织
--编译程序的组织
--练习3
-编译原理概述
-2.1 文法与语言
--文法与语言
--文法与语言
-2.2 文法和语言的形式定义
--练习1
-2.3 文法的类型
--文法的类型
--文法的类型
--练习2
-2.4 上下文无关文法及语法树
--练习3
-2.5 上下文无关文法的句型分析
--练习4
-编译理论基础作业
-3.1 词法分析概述
--词法分析概述
--词法分析概述
--练习1
-3.2 正规文法和状态转换图
--练习2
-3.3 有限状态自动机
--有限状态自动机
--有限状态自动机
--练习3
-3.4 NFA与DFA的等价性
--练习4
-3.5 正规表达式与正规集
--练习5
-3.6 正规文法与正规式
--正规文法与正规式
--正规文法与正规式
--练习6
-3.7 正规式与FA
--正规式与FA
--正规式与FA
--练习7
-词法分析作业
-4.1 自顶向下语法分析及其面临的问题
--练习1
-4.2 文法的等价转化
--文法的等价转化
--文法的等价转化
--练习2
-4.3 LL(1)文法与递归下降分析法
--练习3
-4.4 构建FIRST集合FOLLOW集合
--练习4
-4.5 LL(1)分析器工作原理
-- LL(1)分析器工作原理
-4.6 LL(1)分析表构造算法
--练习5
-5.1 自底向上的语法分析及优先分析
--练习1
-5.2 LR分析器
--LR分析器
--LR分析器
--练习2
-5.3 活前缀和LR(0)项目
-- 活前缀和LR(0)项目
--练习3
-5.4 构造识别活前缀的FA
--练习4
-5.5 LR(0)分析表构造算法
--练习5
-5.6 SLR(1)分析法
--练习6
-5.7 LR(1)分析法与LALR分析法
--练习7
-6.1 语义分析和语法制导翻译概述
--练习1
-6.2 常见中间语言简介
--常见中间语言简介
--常见中间语言简介
--练习2
-6.3 简单算术表达式和赋值语句翻译
--练习3
-6.4 布尔表达式和复制语句翻译
-6.5 拉链和回填
--拉链与回填
--拉链与回填
--练习4
-6.6 程序控制语句翻译
--程序控制语句翻译
--程序控制语句翻译
--练习5
-6.7 for循环语句的翻译
-6.8 GOTO语句和情况语句的翻译
--练习6
-6.9 含数组元素的算术表达式的翻译
--练习7
-6.10 数组元素赋值语句的翻译
--练习8
-7.1 符号表概述
--符号表概述
--符号表概述
--练习1
-7.2 符号表的建立
--符号表的建立
-- 符号表的建立
--练习2
-8.1 运行时存储空间组织概述
-8.2 运行时分配策略
--运行时分配策略
--运行时分配策略
--练习
-9.1 线性窥孔优化
--线性窥孔优化
--线性窥孔优化
-9.2 基本块及其优化方法
-9.3 循环概念
--循环概念
--循环概念
-9.4 循环优化
--循环优化
--循环优化
-代码优化作业