Compiler construction 使用Antlr创建语言

Compiler construction 使用Antlr创建语言,compiler-construction,antlr,antlr4,Compiler Construction,Antlr,Antlr4,比如说,我创建了一种新的很棒的语言,它在语法上与java类似,但没有使用package,而是使用pack。假设这种新语言是Java的模板语言 我创建了awome.g4并编译了它,所以Antlr给了我BaseListener、Listener、Lexer和Parser 我想用这种新的很棒的语言作为源代码创建一个程序,因此我可以考虑两个选项: 首先将其转换为Java,然后将Java编译为二进制(I 希望我是对的,我指的是.class文件) 将Awesome程序直接编译成二进制 我找到的唯一相关回购/

比如说,我创建了一种新的很棒的语言,它在语法上与java类似,但没有使用
package
,而是使用
pack
。假设这种新语言是Java的模板语言

我创建了awome.g4并编译了它,所以Antlr给了我BaseListener、Listener、Lexer和Parser

我想用这种新的很棒的语言作为源代码创建一个程序,因此我可以考虑两个选项:

  • 首先将其转换为Java,然后将Java编译为二进制(I 希望我是对的,我指的是.class文件)

  • 将Awesome程序直接编译成二进制

  • 我找到的唯一相关回购/代码是


    既然我想从现在开始用我新的很棒的语言来拯救人类和代码,那么,如果把这种语言作为源代码,那么有可能创建可执行代码吗?怎么做?

    该死!我想让你发明一种可怕的语言来拯救世界。我喜欢看到充满激情的语言设计师。Groovy做了一些与您所说的类似的事情:

    ANTLR使用Groovy语法文件“Groovy.g”来创建Groovy解析器。当解析器收到Groovy脚本的源代码时,它会生成AST(=抽象语法树),将该代码表示为运行时结构。通过AST生成字节码,可以创建Java字节码:使其作为.class文件持久化,或通过GroovyClassLoader直接作为类对象可用。此类生成是在objectweb的ASM工具的帮助下完成的。(ASM名称没有任何意义:它只是对C中“ASM”关键字的引用,它允许用汇编语言实现某些函数。)ASM提供了一个Java API来构造或修改给定AST上的字节码

    ANTLR只能让你走这么远。有几种策略可以克服这一点。(1) 将Awesome语言翻译成C,然后编译C代码。(2) 将Awesome语言编译成Java字节码,并在JVM上运行。(3) 将其编译为LLVM字节码


    对于第2种方法,请查看:。

    感谢您帮助拯救世界!该链接阐明了如何创建此链接的大局。