使用Antlr创建语言

时间:2014-07-17 02:21:02

标签: compiler-construction antlr antlr4

假设我创建了一种新的Awesome语言,就像语法中的java一样,而不是package它使用pack。所以我们假设这种新语言是Java的模板语言。

我创建了awesome.g4并编译了它,所以Antlr给了我BaseListener,Listener,Lexer&解析器。

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

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

  2. 将Awesome程序直接编译为二进制文件。

  3. 我找到的唯一相关的回购/代码是antlr4-csharp

    由于我想从现在开始用我的新Awesome语言保存人性和代码,是否可以创建可执行代码,并将该语言作为源代码,如何?

1 个答案:

答案 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