2

今日やっと完全な文法を取得し、「文字列が長すぎます」という Java の問題に遭遇しました。

この問題が解決されたことは理解していますが、他の制限に遭遇することを恐れていたため、C# ターゲットの使用に切り替えることにしました。私は経験豊富な C++ プログラマーであり、Antlr4 を使用できるように Java を学びました。C# に切り替えることは大したことではなく、新しい構文を学ぶだけです。

次のメッセージが表示されます: 1>CSC : 致命的なエラー CS1647: 式が長すぎるか複雑でコンパイルできません

他の情報は提供されていません。Antlr4 によって生成されたコードでこれを見た人はいますか? Web でメッセージを検索しましたが、役立つものは何も見つかりませんでした (修正されるはずの古いバグへの参照が多数あります)。

私のプロジェクトは現在、1 つの .cs ファイルと 2 つの .g4 ファイル (lexer および parser grammars) で構成されています。

文法はかなり複雑です (IEEE 標準で定義された言語を実装します)。

私は元々、Java ターゲットを使用して問題なく文法のサブセットを実装しました。

任意のポインタをいただければ幸いです。

ここにいくつかの追加情報があります。私は Visual Studio 2012 を使用しています。最初に見た Java の問題の別のバージョンと同じようです。

次の行だけを含むサンプル C# ファイルを作成できました。

public static readonly string _serializedATN =
    "\x5\x3\x176\x234A\x4\x2\t\x2\x4\x3\t\x3\x4\x4\t\x4\x4\x5\t\x5\x4\x6\t"+
    "\x6\x4\a\t\a\x4\b\t\b\x4\t\t\t\x4\n\t\n\x4\v\t\v\x4\f\t\f\x4\r\t\r\x4"+
    "\xE\t\xE\x4\xF\t\xF\x4\x10\t\x10\x4\x11\t\x11\x4\x12\t\x12\x4\x13\t\x13"+
    "\x4\x14\t\x14\x4\x15\t\x15\x4\x16\t\x16\x4\x17\t\x17\x4\x18\t\x18\x4\x19"+
    "\t\x19\x4\x1A\t\x1A\x4\x1B\t\x1B\x4\x1C\t\x1C\x4\x1D\t\x1D\x4\x1E\t\x1E"+
    "\x4\x1F\t\x1F\x4 \t \x4!\t!\x4\"\t\"\x4#\t#\x4$\t$\x4%\t%\x4&\t&\x4\'"+
    "\t\'\x4(\t(\x4)\t)\x4*\t*\x4+\t+\x4,\t,\x4-\t-\x4.\t.\x4/\t/\x4\x30\t"+
    "\x30\x4\x31\t\x31\x4\x32\t\x32\x4\x33\t\x33\x4\x34\t\x34\x4\x35\t\x35"+
                 ...
                 ...
                 "\x2316\x231E\x2324\x2328\x232D";

問題は再現可能でした。行の長さは 4400 行を超えています。C# コンパイラは、これほど多くの連結を処理できないようです。私は自分の言語からキーワードを削除して、それらを使用してハッシュ テーブルを作成することを避けようとしていました。現時点ではこれが唯一の解決策かもしれません。

4

1 に答える 1