什么时候做 java -cp C:\ Tools \ Libraries \ antlr4-csharp-complete.jar org.antlr.v4.Tool Hello.g4 我得到以下文件:
HelloBaseListener.cs
Hello.tokens
HelloListener.cs
HelloParser.cs
HelloLexer.tokens
HelloLexer.java
我的问题是关于最后一个文件。为什么是.java而不是.cs? 我正在使用antlr4-csharp-4.0.1-SNAPSHOT-complete.jar
语法是:
grammar Hello; // Define a grammar called Hello
options
{
language=CSharp_v4_0;
}
r : 'hello' ID ; // match keyword hello followed by an identifier
ID : [a-z]+ ; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines, \r (Windows)
萨姆,你好!我只有visual studio express所以我无法安装扩展。这是我正在使用的代码,但它仍然生成HelloLexer.java。
AntlrClassGenerationTaskInternal a = new AntlrClassGenerationTaskInternal();
List<String> files = new List<string>();
files.Add(@"C:\Tools\Grammars\Hello.g4");
a.JavaVendor = "JavaSoft";
a.ToolPath = @"C:\Tools\Libraries\antlr4-csharp-complete.jar";
a.JavaInstallation = "Java Development Kit";
a.SourceCodeFiles = files;
a.OutputPath = @"C:\Tools\Grammars\CSharp\";
a.Execute();
顺便说一句,visual studio抱怨因为它无法找到Antlr4ClassGenerationTask.IsFatalException(ex)
感谢您对此的帮助。
此致 奥马。
答案 0 :(得分:2)
编辑11/20/13:项目维基上现已提供更新说明
https://github.com/sharwell/antlr4cs/wiki/Installation
以下是我过去几个月发送的与此问题相关的一些消息。如果您不想安装下面描述的Visual Studio扩展,则需要使用Antlr4ClassGenerationTaskInternal.cs
的源代码来确定一组可用的命令行选项。
此外,您可以删除language=CSharp_v4_0;
选项,因为它现在已在命令行上传递。
C#目标不是为命令行使用而设计的。您需要根据以下页面上的说明将代码生成集成到项目文件中,并在构建项目时自动生成解析器。
https://github.com/sharwell/antlr4cs
您需要在项目中包含.g4文件并配置文件的一些属性。如果在将语法添加到项目之前安装以下扩展名,则将自动为您配置所有其他选项 ANTLR Language Support for Visual Studio 2010- 2012
如果您的项目中已有.g4文件,并且仍想使用该扩展程序自动配置正确的设置,则可以执行以下操作:
答案 1 :(得分:2)
我认为这是一个错误,我遇到了同样的问题,但有一个解决方案。
1)如果你想要,你可以删除
options
{
language=CSharp_v4_0;
}
我认为代码生成器忽略了
2)使用以下代码
创建BAT文件@echo OFF
IF "%CLASSPATH%" == "" (SET CLASSPATH=.;.\antlr4-csharp-4.0.1-SNAPSHOT-complete.jar;%CLASSPATH%)
java org.antlr.v4.Tool %* -Dlanguage=CSharp_v4_5
将antlr4-csharp-4.0.1-SNAPSHOT-complete.jar放在同一路径中,现在可以使用此文件进行编译。要解决此问题,magic命令行参数为“-Dlanguage = CSharp_v4_5”或您正在使用的C#版本。
生成的文件现在位于Lexer.cs
中