实施一种新的编程语言

4

假设我已经为.NET/JVM之一的托管代码环境设计了一种新的编程语言。现在,我是否可以通过编写一个将这种新语言源代码翻译成平台主语言(C#/Java)的转换器,然后让平台的编译器和其他工具处理其余的过程来实现它?是否有任何简单的概念验证示例来支持这种方法?


构建编译器所需的资源(如词法分析、语法分析、AST 构建等):学习编写编译器 - dmckee --- ex-moderator kitten
5个回答

6

是的,只要语义映射正确(例如,在将JavaScript代码映射到诸如C#之类的语言时需要注意,因为作用域规则不同),就可以这样做。

虽然它不在托管平台上,但您可以查看Vala。它是一种类似于C#的语言,可编译为C。Eiffel也可以编译为C(并支持编译为Java)。

但是,如果您使用的是托管平台,则可能希望直接发出字节码。 Java字节码不难发出,因为VM负责并提供了编译的棘手部分(例如管理堆栈帧),VM消除了其他棘手的角落,例如寄存器分配。


1

可以的,你肯定可以这样做。你将会遇到的主要问题是,为你的语言提供源级别运行时诊断/调试非常困难。


1
一开始看起来并不难。只需要编译一个“调试”模式,将原始行号存储为新代码执行时的标记。然后你只需要编写一个简单的调试器,捕获顶层异常并输出最后一个传递的行标记。然后你可以变得更加高级,允许通过标记进行步进或将它们追踪到日志文件中。我认为相对于开发新语言的主要任务来说,这相对容易些。 - JOTN

1
当然,我使用过的第一个C++编译器将代码转换为C语言,然后使用系统编译器和汇编程序创建可执行文件。我相信它是来自Sun,但是已经有一段时间了。实际上,从C语言到汇编语言的转换正在做着相同的事情。

0
我建议分两步走:
首先,从你的语言到C#或Java制作一个翻译器或编译器。 其次,制作一个转换器将代码转换为.NET代码(CIL或MSIL)或Java字节码。
(另一个编译器和编程语言设计爱好者)

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接