其他分享
首页 > 其他分享> > 编译原理:CH1绪论

编译原理:CH1绪论

作者:互联网

文章目录

CH1 绪论

1.1 程序与本课程的关系

程序 = 算法 + 数据结构

image-20220107152658823

1.2 从面向机器的语言到面向人类的语言

面向机器的语言:机器指令、汇编语言

面向人类的语言:通用程序设计语言,数据查询语言等

image-20220107152858174

语言的分类:
语 言 的 分 类 { 通 用 程 序 设 计 语 言 { P A S C A C / C + + J A V A 程 序 员 需 要 思 考 前 因 后 果 , 做 什 么 , 怎 么 做 数 据 查 询 语 言 : S Q L , 程 序 员 考 虑 怎 么 做 , 如 何 做 形 式 化 描 述 语 言 { 公 式 化 描 述 产 生 式 描 述 语 言 结 构 L E X 和 Y A C C 语言的分类\begin{cases}通用程序设计语言\begin{cases}PASCA\\C/C++\\JAVA\end{cases}程序员需要思考前因后果,做什么,怎么做\\数据查询语言:SQL,程序员考虑怎么做,如何做\\形式化描述语言\begin{cases}公式化描述\\产生式描述语言结构\\LEX和YACC\end{cases}\end{cases} 语言的分类⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​通用程序设计语言⎩⎪⎨⎪⎧​PASCAC/C++JAVA​程序员需要思考前因后果,做什么,怎么做数据查询语言:SQL,程序员考虑怎么做,如何做形式化描述语言⎩⎪⎨⎪⎧​公式化描述产生式描述语言结构LEX和YACC​​

1.2 语言之间的翻译

1.2.1 翻译模式*

习惯称法:

image-20220107154545664

1.3 编译器与解释器*

语言翻译的两种基本形态:

image-20220107155252566 image-20220107155301593

1.3.1 编译器和解释器的特点

高作效率可移植性交互性/动态性
编译器
解释器低(翻译+运行)高(JVM)高(用户交互式)

1.3.2 基本功能

二者相同,都是完成语言的翻译。

1.3.3 所采用的技术

从翻译的角度来讲,两种方式所涉及的原理、方法、技术相似。

1.4 编译器的工作原理和基本组成

1.4.1 通用程序设计语言的主要成分

从语言的抽象演变来看:

过程 → \rightarrow →抽象数据类型(程序包) → \rightarrow →类

共同特点:

由两大部分组成:声明 + 操作 = 完整定义

image-20220107204521828

过程定义 = 过程头 + 过程体

procedure sample(y: integer);	// {过程头}
	var x : integer;			// {过程体(开始)}
	begin x := y;
		if x>100 then x := 0
    end;						// {过程体(结束)}

1.4.2 以阶段划分的编译器***

(1)阶段的划分

前一个阶段的输出是后一个阶段的输入。

image-20220107164423734

1.4.3 编译器各个阶段的工作

var x, y, z : real;
x := y + z * 60;        
image-20220107170229092

代码优化是等价变换,变换前和变换后的功能相同,但空间上更省,时间更短。

原代码是机械生成的,代码存在冗余

image-20220107172554343

合理组织,便于增,删,查,改

错 误 分 类 { 动 态 错 误 ( 动 态 语 义 错 误 ) : 运 行 时 才 能 检 测 出 来 { 除 数 为 0 : a b − c 数 组 下 标 越 界 . . . 静 态 错 误 { 词 法 错 误 : 非 法 字 符 或 者 拼 写 错 关 键 字 , 标 识 符 语 法 错 误 { 缺 括 号 y = 2 ∗ / x 静 态 语 义 错 误 { i n t   a , x [ 10 ] ; x = a a x − x 错误分类\begin{cases}动态错误(动态语义错误):运行时才能检测出来\begin{cases}除数为0:\frac{a}{b-c}\\数组下标越界\\...\end{cases}\\ 静态错误\begin{cases}词法错误:非法字符或者拼写错关键字,标识符\\语法错误\begin{cases}缺括号\\y=2*/x\end{cases}\\ 静态语义错误\begin{cases}int\ a,x[10];x = a\\\frac{a}{x-x}\end{cases}\end{cases}\end{cases} 错误分类⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​动态错误(动态语义错误):运行时才能检测出来⎩⎪⎨⎪⎧​除数为0:b−ca​数组下标越界...​静态错误⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​词法错误:非法字符或者拼写错关键字,标识符语法错误{缺括号y=2∗/x​静态语义错误{int a,x[10];x=ax−xa​​​​

1.4.4 编译器的分析/综合模式

编译器分为前端后端

前端有:词法分析,语法分析,语义分析,中间代码生成

后端:代码优化与生成

image-20220107201338589

image-20220107201501936

1.4.5 编译器的扫描遍数

1.每个阶段将程序完整分析一遍的工作模式称为一遍扫描

影响扫描遍数的因素:

1.5 编译器的编写

标签:1.4,begin,end,语言,绪论,编译,CH1,编译器,cases
来源: https://blog.csdn.net/weixin_45745854/article/details/122383282