编译原理(一)/编译简介

写在BLOG之前

博客内容为个人学习笔记,主要来自于下面书籍:
书名:编译原理
作者:〔美〕Alfred V.Aho(著);〔美〕Ravi Sethi(著);〔美〕Jeffrey D.Ullman(著);李建中;姜守旭
出版社:机械工业出版社·北京

编译分为两部分:分析与综合。
分析部分将源程序切分为一些基本块并形成源程序的中间表示,综合部分把源程序的中间表示转化为所需的目标程序。

1.分析

在分析期间,源程序所蕴含的操作被确定并表示为一个称为语法树的分层结构,节点表示操作,节点的子节点表示操作的参数。

在这里插入图片描述
源程序的分析阶段:
1.线性分析。从左到右读构成源程序的字符流,且把字符流分组为多个token。(token为具有整体含义的字符序列)
2.层次分析。字符串或token被划分为具有一定层次的多个嵌套组,单个嵌套组具有某一整体性含义。
3.语义分析,判断程序各个组成部分确实是有意义组合在一起。

2.综合

从概念上讲,编译器是分阶段执行的,每个阶段将源程序从一种表示转换成另一种表示。

在这里插入图片描述
(1)编译的多个阶段可以分为前端与后端两块内容。

前端一般包括词法分析、语法分析、符号表的建立、语义分析、中间代码生成和相关的错误处理。
后端主要包括代码优化、代码生成以及相关错误处理和符号表操作。

(2)编译器的编

编译的若干阶段通常是以一遍来实现的,每遍读取一次输入文件,产生一次输出文件。

在操作中,我们希望编译的遍数越少越好。然而将多个阶段合成一遍,则我们不得不将这些阶段的整个程序保存在内存中,造成空间浪费。

由此产生算法中常见的时间与空间问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值