几年前我用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?
答案 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文件中会出现语法错误。