编译原理——编译器结构

综述

编译器是具有高度模块化的一种结构,说白了就是编译的任务被划分为一个个小的子任务,交付给不同的小模块来执行。这些小模块的串行(顺序)执行,对应的就是小任务的串行实现,最终就实现了编译这个总任务。
所以说编译器也可以看成由多个阶段构成的流水线结构
如图所示,一种简单的"流水线式的编译器结构"
如图所示,一种简单的"流水线“式的编译器结构
在这里插入图片描述
这个是具有优化的编译器结构以及流程图,注意语法单位就是上面说的抽象语法树,四元式就是中间代码,可以经过优化,提高后面生成的目标代码的执行效率
在这里插入图片描述
更详细的框图,中间每个阶段处理都可能出错,自然需要差错处理

一种简单的编译器实现

被我们编译的源语言: 加法表达式sum,他的语言只有两种形式①直接就是整型数,比如 3 ②两个整数的加法形式 比如 3+4
目标机器,也就是编译器所在的那个机器: 它为栈式计算机,它上面主要有两条指令①push n,也就是将操作数压栈②add;他负责将栈顶元素和次栈顶元素弹出并相加,然后将相加后的结果再压入栈中(是的,你就当这条指令完成了这么多复杂的功能就行了)
我们的任务:编译1+2+3这个源语言写成的代码到我们的目标机器(栈式计算机)上
一: 将1+2+3这个字符序列送到词法分析部件(说是部件,其实就是一个软件模块)中,生成记号序列。然后将记号序列送至语法分析部件,生成抽象语法树(一种数据结构)。如下图所示
在这里插入图片描述
二: 然后语义分析(这里面简化就不写了),最后再代码生成,我们代码生成的方法是后序遍历这棵抽象语法树,当遍历到整数n时,生成push n的代码(我们这里说的代码是汇编语言代码),当遍历到+时,生成add代码,所以我们最后生成的目标代码为
push 1
push 2
add
push 3
add
这样我们一个简单的从源语言到机器代码的编译过程就完成了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值