ANTLR - 嵌入Java代码,在之前或之后评估?

时间:2010-05-01 11:47:23

标签: java dynamic parsing antlr grammar

我正在Java / JVM之上编写一个简单的脚本语言,您还可以使用{}括号嵌入Java代码。问题是,我如何在语法中解析这个?我有两个选择:

  1. 允许其中的所有内容,例如:[a-z|a-Z|0-9|_|$],然后继续
  2. 获取额外的java语法并使用该语法来解析那些小代码(它实际上是否可行且有效?)
  3. 因为选项2]基本上是一个双重检查,因为在评估java代码时它也被检查。现在我的最后一个问题是 - 是否可以使用在运行时创建的对象动态执行java代码?

    谢谢,

    William van Doorn

2 个答案:

答案 0 :(得分:1)

  

1]允许其中的所有内容,例如:[a-z | a-Z | 0-9 | _ | $],然后继续

你不能这样做:你必须考虑开始和结束括号。

  

2]获取额外的java语法并使用该语法来解析那些小代码(它实际上是否可行且有效?)

是的,这是可能的。但我建议你先做一些工作,然后担心效率(这真的是一个问题吗?)。

  

...是否可以使用在运行时创建的对象动态执行java代码?

是的,自Java 6以来,有一种动态编译源文件的方法。请参阅JavaCompiler API。

答案 1 :(得分:0)

我建议将你的Java代码放在像'''这样的字符中,这些字符在Java代码中没有使用,几乎不存在于文字中。

JavaCode:'' ( EscapeSequence | ~('\\'|''))*'`'     ;

使用antlr examples提供的java.g来定义EscapeSequence,...

唯一的问题是你需要让程序员使用这个字符的代码('''),如果它需要作为文字。