1

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

私の質問は最後のファイルについてです。なぜ .cs ではなく .java なのですか? 私は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();

ちなみにビジュアルスタジオは Antlr4ClassGenerationTask.IsFatalException(ex) を見つけられなかったので文句を言っていた

これについてあなたの助けに感謝します。

よろしく、オマール。

4

2 に答える 2

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 を同じパスに配置すると、このファイルを使用してコンパイルできます。この問題を解決するには、魔法のコマンド ライン引数を "-Dlanguage=CSharp_v4_5" または使用している C# のバージョンにします。

生成されたファイルには、Lexer.cs が含まれるようになりました。

于 2013-10-31T15:47:14.233 に答える