Antlr4:使用带有C#生成代码的Testrig

时间:2016-11-19 21:16:42

标签: c# antlr4

几年前我用Antlr3看过Java。现在我正在使用C#进行编码,我想要了解Antrl4中的更改并在C#代码生成中使用它。与

java org.antlr.v4.Tool -Dlanguage = CSharp Hello.g4 -visitor

生成C#源。为了测试探索,我想使用grun-Testrig。在java中,这应该是以下内容,但在C#中我得到一个错误,显然是因为编译的Lexer / Parser应该在DotNet-Runtime中执行而不是在Java中执行。

$ java org.antlr.v4.runtime.misc.TestRig Hello -gui 警告:TestRig已移至org.antlr.v4.gui.TestRig;自动呼叫 无法加载Hello作为词法分析器或解析器

如何在C#-Environment中使用等效的TestRig?

1 个答案:

答案 0 :(得分:0)

我是通过在VisualStudio的c#项目的属性中使用预构建事件来完成此操作的。

我做了如下的PreBuildEvents.bat:

set ThisDrive=%~d0
set ThisDirectory=%~dp0
%ThisDrive%
cd %ThisDirectory%
call setPath.bat
java org.antlr.v4.Tool -Dlanguage=CSharp MyGrammar.g4
java org.antlr.v4.Tool -Dlanguage=Java   MyGrammar.g4
javac -d .\class *.java

并在构建前事件中调用它。

然后我可以使用我的grun.bat模拟结果:

java -cp "./class;%CLASSPATH%" org.antlr.v4.gui.TestRig %*

但是,如果您在规则操作中包含c#代码,则此操作将无效,因为Java文件中会出现语法错误。