假设我创建了一种新的Awesome语言,就像语法中的java一样,而不是package
它使用pack
。所以我们假设这种新语言是Java的模板语言。
我创建了awesome.g4并编译了它,所以Antlr给了我BaseListener,Listener,Lexer&解析器。
我想用这个新的Awesome语言创建一个程序作为源代码,所以我可以考虑两个选项:
首先将其转换为Java,然后将java编译为二进制(I 希望我是对的,我的意思是.class文件)
将Awesome程序直接编译为二进制文件。
我找到的唯一相关的回购/代码是antlr4-csharp。
由于我想从现在开始用我的新Awesome语言保存人性和代码,是否可以创建可执行代码,并将该语言作为源代码,如何?
答案 0 :(得分:3)
该死!我希望你发明一种能够拯救世界的令人敬畏的语言。我喜欢看到充满激情的语言设计师。 Groovy做了类似于你所说的事情:
ANTLR使用Groovy语法文件“Groovy.g”来创建Groovy解析器。当解析器被提供Groovy脚本的源代码时,它会生成AST(=抽象语法树),它将该代码表示为运行时结构。字节代码生成从AST中,可以创建Java字节代码:要么使其作为.class文件持久化,要么通过GroovyClassLoader使其直接作为Class对象使用。这个ClassGeneration是在objectweb的ASM工具的帮助下完成的。 (ASM名称没有任何意义:它只是对C中“asm”关键字的引用,它允许某些函数以汇编语言实现。)ASM提供了一个Java API来构造或修改给定AST上的字节代码的
ANTLR只能让你到目前为止。有几种策略可以解决这个问题。 (1)将令人敬畏的语言翻译成C,然后编译C代码。 (2)将Awesome语言编译为Java字节码并在JVM上运行。 (3)将其编译为LLVM字节代码。
对于进近号码(2),请查看:http://groovy.codehaus.org/Groovy+Backstage。