自己动手制作C 语言编译器(1):设计

本文介绍了如何从头设计并构建一个C语言解释器,包括解释器与编译器的区别、构建流程、主要步骤以及一个简易的编译器框架。通过手写虚拟机、词法分析器和语法分析器,逐步解析和执行C语言源代码,以加深对计算机工作原理的理解。
摘要由CSDN通过智能技术生成

这篇文章我们要从整体上讲解如何设计我们的 C 语言编译器。

本系列:

首先要说明的是,虽然标题是编译器,但实际上我们构建的是 C 语言的解释器,这意味着我们可以像运行脚本一样去运行 C 语言的源代码文件。这么做的理由有两点:

1.解释器与编译器仅在代码生成阶段有区别,而其它方面如词法分析、语法分析是一样的。

2.解释器需要我们实现自己的虚拟机与指令集,而这部分能帮助我们了解计算机的工作原理。

编译器的构建流程

一般而言,编译器的编写分为 3 个步骤:

1.词法分析器,用于将字符串转化成内部的表示结构。

2.语法分析器,将词法分析得到的标记流(token)生成一棵语法树。

3.目标代码的生成,将语法树转化成目标代码。

已经有许多工具能帮助我们处理阶段1和2,如 flex 用于词法分析,bison 用于语法分析。只是它们的功能都过于强大,屏蔽了许多实现上的细节,对于学习构建编译器帮助不大。所以我们要完全手写这些功能。

所以我们会根据下面的流程:

1.构建我们自己的虚拟机以及指令集。这后生成的目标代码便是我们的指令集。

2.构建我们的词法分析器

3.构建语法分析器

编译器的框架

我们的编译器主要包括 4 个函数:

next()用于词法分析,获取下一个标记,它将自动忽略空白字符。

program()语法分析的入口,分析整个 C 语言程序。

expression(level)用于解析一个表达式。

eval()虚拟机的入口,用于解释目

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值