我写了一个编译器
查看原帖
我写了一个编译器
629944
wangzhaohan2910楼主2024/5/3 10:55

可以把这种语言的代码编译成C++,使用MIT License,代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,x;
	string s,fn;
	cout<<"请输入输出文件路径:";
	cin>>fn;
	freopen(fn.c_str(),"w",stdout);
	cout<<"#include<bits/stdc++.h>\n";
	cout<<"using namespace std;\n";
	cout<<"int p[1001],n;\n";
	cout<<"int main()\n";
	cout<<"{\n";
	cout<<"    cin>>n;\n";
	cout<<"    p[1]=n;\n";
	cin>>n;
	for(int i{1};i<=n;i++)
	{
		cout<<"    _"<<i<<":\n";
		cin>>s>>x;
		if(s=="new")
		{
			cout<<"    n=n+1;\n";
			cout<<"    p["<<x<<"]=n;\n";
		} 
		else if(s=="dec")
		{
			cout<<"    p["<<x<<"]=p["<<x<<"]-1;\n";
		}
		else if(s=="assign")
		{
			int y;
			cin>>y;
			cout<<"    p["<<x<<"]=p["<<y<<"];\n";
		}
		else if(s=="iftry")
		{
			int y;
			string t;
			cin>>t>>y;
			cout<<"    if(p["<<x<<"]>=0)\n";
			cout<<"        goto _"<<y<<";\n";
		}
		else if(s=="ifeq")
		{
			int y,z;
			string t;
			cin>>y>>t>>z;
			cout<<"    if(p["<<x<<"]==p["<<y<<"])\n";
			cout<<"        goto _"<<z<<";\n";
		}
		else if(s=="ifneq")
		{
			int y,z;
			string t;
			cin>>y>>t>>z;
			cout<<"    if(p["<<x<<"]!=p["<<y<<"])\n";
			cout<<"        goto _"<<z<<";\n";
		}
	}
	cout<<"    cout<<n;\n";
	cout<<"    return 0;\n";
	cout<<'}';
	return 0;
}
2024/5/3 10:55
加载中...