0

g4 grammer をコンパイルするために、Antlr4 ビルド ターゲットと拡張機能を使用するように C# プロジェクトをセットアップしました。ただし、ビルドすると、次のエラーが発生します。何かご意見は?

Error   1   The name 'HIDDEN' does not exist in the current context C:\gNOSIS\Oracle\Software\oracle\oracle\obj\x64\Debug\Verilog2001Lexer.cs   131 22  oracle
Error   2   The name 'HIDDEN' does not exist in the current context C:\gNOSIS\Oracle\Software\oracle\oracle\obj\x64\Debug\Verilog2001Lexer.cs   136 22  oracle
Error   4   The name 'HIDDEN' does not exist in the current context C:\gNOSIS\Oracle\Software\oracle\oracle\obj\x64\Debug\Verilog2001Lexer.cs   145 22  oracle
Error   5   'Antlr4.Runtime.ICharStream' does not contain a definition for 'LA' and no extension method 'LA' accepting a first argument of type 'Antlr4.Runtime.ICharStream' could be found (are you missing a using directive or an assembly reference?)   C:\gNOSIS\Oracle\Software\oracle\oracle\obj\x64\Debug\Verilog2001Lexer.cs   156 25  oracle
Error   6   'Antlr4.Runtime.ICharStream' does not contain a definition for 'LA' and no extension method 'LA' accepting a first argument of type 'Antlr4.Runtime.ICharStream' could be found (are you missing a using directive or an assembly reference?)   C:\gNOSIS\Oracle\Software\oracle\oracle\obj\x64\Debug\Verilog2001Lexer.cs   156 44  oracle
Error   7   'Antlr4.Runtime.ICharStream' does not contain a definition for 'LA' and no extension method 'LA' accepting a first argument of type 'Antlr4.Runtime.ICharStream' could be found (are you missing a using directive or an assembly reference?)   C:\gNOSIS\Oracle\Software\oracle\oracle\obj\x64\Debug\Verilog2001Lexer.cs   156 64  oracle
Error   8   'Antlr4.Runtime.ICharStream' does not contain a definition for 'LA' and no extension method 'LA' accepting a first argument of type 'Antlr4.Runtime.ICharStream' could be found (are you missing a using directive or an assembly reference?)   C:\gNOSIS\Oracle\Software\oracle\oracle\obj\x64\Debug\Verilog2001Lexer.cs   156 84  oracle
Error   9   The name 'EOF' does not exist in the current context    C:\gNOSIS\Oracle\Software\oracle\oracle\obj\x64\Debug\Verilog2001Parser.cs  920 23  oracle
Error   10  'oracle.Verilog2001Parser' does not contain a definition for 'EOF'  C:\gNOSIS\Oracle\Software\oracle\oracle\obj\x64\Debug\Verilog2001Parser.cs  875 66  oracle
4

2 に答える 2

1

これは、他のいくつかの関連する問題とともに、次の最近の一連のコミットで修正されました。

https://github.com/sharwell/antlr4cs/compare/2ac3c964...c0aa59cb

これらの変更は、次のリリースに含まれる予定です。それまでは、lexer 文法で以下を使用できます (複合文法で使用する場合@lexer::members)。

@members {
    public const int EOF = Eof;
    public const int HIDDEN = Hidden;
}

エラー 5 ~ 8 は、文法のセマンティック述語に関連しています。C# ターゲットでは、先読みメソッドはLaであり、 ではありませんLA

于 2013-10-11T01:17:32.973 に答える
0

「La」/「LA」部分については、いくつかの拡張メソッドを追加して修正できます。

namespace Antlr4.Runtime
{
    public static class AntlrCsCompatability
    {
        public static int LA(this ICharStream self, int i)
        {
            return self.La(i: i);
        }
    }
}

同じことがレクサーにも当てはまります。

namespace GeneratedCode.ANTLR4
{
    public partial class STLexer
    {
        public const int EOF = Eof;
        public const int HIDDEN = Hidden;
    }

}
于 2014-03-27T13:48:51.200 に答える