2010-11-10 51 views
4

假设我为其中一个托管代码环境(.NET/JVM)设计了一种新的编程语言。我现在可以通过简单地编写将这种新语言的源代码到平台(C#/ Java的)的主要语言翻译,然后让该平台的编译器和其它工具处理过程的其余部分实现它?有没有简单的概念证明,这种方法的例子?实现新的编程语言

+0

资源(词法,语法分析,构建一个AST,如果你愿意的话,等...):学习写一个编译器(HTTP:/ /stackoverflow.com/q/1669/2509)。 – dmckee 2010-11-10 00:48:17

回答

6

是的,你可以做到这一点,只要语义地图正确(必须小心,例如,在映射JavaScript代码的语言,如C#,因为范围的规则是不同的)。

这不是一个管理平台上,但你可以看看Vala。它是一种类似C#的语言,编译为C. Eiffel也编译为C(并支持编译为Java)。

如果你是一个管理平台上,然而,你可能想在看直接发射字节码。 Java字节码不难发出,因为VM负责并为更复杂的编译部分(如管理堆栈帧)提供指令,并且VM消除了其他毛病如角色分配等问题。

1

是的,你当然可以这样做。您将遇到的主要问题是,为您的语言提供源级运行时诊断/调试很困难。

+1

这不像起初看起来那么难。只需要有一个“调试”模式编译,在新代码执行时存储原始行号。然后你只需要编写一个简单的调试器来捕获顶级异常并输出最后一个传入的行标记。然后你可以看中它,并允许单步执行标记或将它们追踪到日志文件。与开发新语言的主要任务相比,我认为这相对容易。 – JOTN 2010-11-10 01:16:36

1

当然,第一C++编译器我用翻译的代码C,然后使用的系统编译器和汇编以创建可执行文件。我相信它来自Sun,但它已经有一段时间了。真的,组装C是做同样的事情。

0

我建议2个步骤:

首先,请从您的语言翻译或编译器C#或Java。 其次,将转换器转换为.NET代码(CIL或MSIL)或Java字节码。

(另一个编译器&编程语言设计hobbyst)为努力