ANTLR4在JAVA中生成Lexer而不是C Sharp

时间:2013-07-26 04:53:17

标签: antlr4

什么时候做 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)

感谢您对此的帮助。

此致 奥马。

2 个答案:

答案 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. 在解决方案资源管理器中单击项目并启用“显示所有文件”(“解决方案资源管理器”工具栏上此步骤大大简化了第4步。
  3. 右键单击项目中的.g4文件,然后选择“从项目中排除”。
  4. 再次右键单击.g4文件,然后选择“包含在项目中”。
  5. (可选)您可以在不再需要时禁用“显示所有文件”。

答案 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