创造新语言(1)——确定架构

本文介绍了作者计划创建一个可自定义的编译器,该编译器将用户定义的语言转换为C89,以简化编程并减少后端工作。编译系统包括词法分析、语法分析和代码生成器。作者选择了C89作为目标语言,因为它的轻巧性和适用于操作系统级编程。文章详细讨论了词法分析程序的实现,使用DFA进行最长匹配,并介绍了BNF范式和LALR语法分析法。

最近写C代码很不爽,感觉很多地方十分冗余,希望能够改进一下,于是诞生了这个想法,利用学过的编译原理的前端知识,构建一门新语言的编译器,然后将新语言翻译成为标准的C89。

这样,即保障了可用性,同时又大大减轻了后端的工作量,何乐而不为呢?
我说明一下选择C89的原因,首先,C语言的扩展不多,主要是C++和Objective-C。编译到的目标语言平台,如果是C++,太重了,难以做操作系统级的编程,但如果想让编译器设计的十分轻巧,那么就要尽量回避重型语言。

Java也是一个不错的选择,但其平台上已经有诸多诸如Scala的良好设计的语言,再继续开发新版语言显得不是那么的迫切,所以我第一阶段的目标,选定为编译到C89。

目标

创建一个可自定义的编译器,将用户任意定义的语言按照规则,翻译成C89。

为何是可自定义呢?其实我希望用户能够自定义编程语言,语言本身就是描述逻辑的方式,如果用户了解编译技术,了解如何定义一门语言,那么我们就应该支持他对语法的修改,然后将他的语法定义文件作为脚本,一同保存在工程中。

编译成目标C代码后,也可以和已有的库进行交互,这样就扩大了重用性。

编译系统的组成

一般的编译系统是如下几个部分组成:

一个最小的编译器,至少应该由词法分析程序,语法分析程序,代码生成器组成。

如果我们不想构建符号表的话,那么就要放弃语义检查,不过我还是希望在可能的情况下,构建栈式符号表,因为毕竟符号的处理还是十分重要的。

异常处理部分可能也比较简短,而且不使用中间代码,也省略了代码优化部分,这样,可以让我们在尽量快的情况下构建可用的编译器。

介绍词法分析程序的实现

首先,我们要编写一个词法分析程序,我们希望不同的用户定义不同的词法分析程序,那么就不能采取用lex的代码生成技术,

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值