基于antlr的C++转JS的语法编译器

该博客介绍了使用ANTLR4开发一个将C++代码转换为JavaScript的编译器的过程。首先,配置ANTLR4的IDEA开发环境,并设定将C++源程序转化为JavaScript的目标。接着,详细描述了开发流程,包括设计.g4文法文件,生成词法和语法分析器,以及语法树验证。博主对比了C++与JavaScript在函数声明、传参、变量类型和数组构建等方面的语法差异,并提出了希望在编译器中增加的额外功能,如提高代码可读性和优化编译效率。

一、环境配置和设计目标

开发环境:安装antlr的IDEA
设计目标:通过antlr提供的语法分析器将一段cpp源程序语言转化为js程序
源程序语言:c++ 目标语言:JavaScript 测试用程序:一个简单的四则运算

二、开发流程

1.根据c++和js的语法差距设计.g4文法文件
2.通过antlr插件生成词法lexer和语法分析器paraser
3.通过antlr提供的语法生成树进行验证
4.将c++编写的四则运算器翻译成js语言

三、计算器程序的伪代码

int main(){
	while(true){
		读入输入的算式,调用play函数,输出计算结果。}
}
double play(char flag){	//操作式子,flag为式子结束标识
	for 式子未结束{
		if遇到数字	通过一个while对数字进行提取操作。
		else if遇到括号	产生一个新的式子。
else if遇到操作符	栈为空则入栈,否则比较操作符与栈顶操作符优先级,并选择对当前优先的算式进行计算。}
	while 栈内操作符非空{
		根据栈内操作符完成剩下算式的计算。}
	return 计算结果

四、c++和js部分语法对比

1.函数声明:
C++——有返回值的声明,有参数类型声明。
returnType functionID (paraType para, …, paraType para){}
Javascript——无返回值,内部有return 操作,无需传递参数类型。
functionID = function(para list){}
2.函数传参:
C++——需要传递参数类型,支持引用类型&。
Javascript——无需传递参数的数据类型,除对object 类型之外不支持引用的类型。
3.变量类型
C++——明确区分数据类型。
Javascript——除了对数组是array 类型之外基本不区分数据类型,都为var 类型。
4.构建数组
C++——arrayType arrayID[] = {para}。
Javascript——var arrayID = new Array(para)。
5.整体结构
C++需要main 函数作为程序的入口,对语法规则限制更多,更加规范。而Javascript 没有特定的main 函数作为程序的起始地址,整个程序布局由function 定义语句块作为分界,相对来说限制较少,语言更灵活。

五、设计计算器程序所需要的相应的文法

for循环while循环
在这里插入图片描述

六、额外希望实现的功能

1.在文法设计中增加tab属性,使得最后输出的js代码增强可读性
2.优化编译效率

七、最终成果

在这里插入图片描述

八、参考书目

《antlr4权威指南》.机械工业出版社

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值