简单的C语言编译器实现
文章平均质量分 90
本系列文章讨论实现简化过的C语言编译解释执行器。将分别介绍编译器的实现和解释器的实现。
huanghongxun
这个作者很懒,什么都没留下…
展开
-
简单的C语言解释运行器实现(一)—— 词法分析
引入编译器的构造想必度过编译原理的同学已经了解了。大概分为 预处理器 -> 编译器 -> 汇编器 -> 链接器,4个阶段。 编译器又可以分为词法分析 -> 语法分析 -> 语义分析 -> 中间代码生成 -> 代码优化 ->生成目标代码等阶段。 阶段 功能 预处理器 处理宏定义,如#include表示引入其他源文件...原创 2018-03-31 10:40:53 · 2068 阅读 · 0 评论 -
简单的C语言解释运行器实现(三)—— 定义语法
好的,词法分析就结束了,我们开始语法分析吧。首先为了简化问题,我们对C语言作出如下限制: 1. 没有switch语句 2. 不支持函数指针 3. 没有结构体、联合体 4. 以及一些其他的语句预处理器将在第七篇中讲到。编译阶段将不会有预处理指令(#include等)。我们要处理的语法将在下面列出。文法定义文法首先我们定义一条文法是这样的:NAME ::= ...原创 2018-03-31 11:22:19 · 1776 阅读 · 0 评论 -
简单的C语言解释运行器实现(四)—— 语法分析
上一篇:定义语法 下一篇:语义分析语法树是啥在知道了文法的定义后,我们就要根据文法分析生成语法树了。语法树可以表达是文法展开的过程,比如i+i*i 对应文法是E ::= T | E + T | E - TT ::= F | T * F | T / FF ::= i文法展开过程是:E -> E + T -> T + T -> F + ...原创 2018-04-01 00:36:33 · 10174 阅读 · 0 评论 -
简单的C语言解释运行器实现(五)—— 语义分析
上一篇:语法分析 下一篇:生成指令我们在语义分析阶段完成语法树节点类型的推导,并完成数组维度常量表达式的计算以及数组访问的修改。定义类型首先我们需要明确有哪些类型,我们简化的C语言只有如下类型:int, char, short, bool, long, double, float, void, pointer。还可以通过组合组合出很多类型出来,比如多维的指针,多维的数组关于类...原创 2018-04-01 11:31:33 · 7850 阅读 · 2 评论 -
简单的C语言解释运行器实现(六)—— 生成指令
上一篇:语义分析执行指令在我们有了带类型的语法树后,我们就可以生成指令了。如果你有读过Java虚拟机规范的话,可以看到庞大的JVM指令集,好像是近200条?接下来我们要考虑代码的执行过程并生成指令。首先我们考虑代码的执行过程,我们知道程序运行是基于栈的,那么具体是怎么运行的呢?开篇我们提到了这样的一个语法树: S /|\ F = E | /|\ i F + ...原创 2018-04-01 19:26:18 · 2031 阅读 · 0 评论