我正在使用ANTLR 4创建解析器,并已完成语法。我需要将一些Java代码注入到ANTLR为我自动生成的解析器文件中。
如果我想在生成的解析器中包含一个方法,可以将其添加到ANTLR语法中:
如果我想要引入一些导入语句,我可以在语法中添加以下内容:
但这就是我希望它生成的内容:
如果我想在生成的解析器中包含一个方法,可以将其添加到ANTLR语法中:
@parser::members
{
@Override
public CGrammarParser.CSnippetContext call()
{
return cSnippet();
}
}
如果我想要引入一些导入语句,我可以在语法中添加以下内容:
@header
{
import java.lang.Thread;
import java.lang.InterruptedException;
import java.util.concurrent.Callable;
}
如果我想修改类声明以便实现一个接口,我该怎么做?换句话说,这是ANTLR自动生成的代码:
public class CGrammarParser extends Parser
{
...
}
但这就是我希望它生成的内容:
public class CGrammarParser extends Parser implements Callable<CGrammarParser.CSnippetContext>
{
...
}
@parser::members
结构更清晰,因为语法和逻辑之间有更多的分离)。仅供参考,对于C#解析器,这个问题的答案甚至更简单:它们是“partial”类。 - Lucas TrzesniewskiExceptionInInitializerError
异常。如果我手动添加我想要的extends
和implements
(参见我的问题),它就正常工作。我觉得这个答案非常接近,但是 ANTLR 不满意。 - james.garriss