0

データ ファイルから可変長のテキスト ブロックを抽出する必要があり、文法ファイルを書き込もうとしています。主な課題は 2 つあります。まず、テキストは可変長です。第 2 に、テキスト ブロック自体を特定するのに役立つアンカーがありません。基本的に、メインフレームで生成されたテキストベースのレターを解析して、ファイルの特定のセクションから情報を抽出し、ANTLR のキーと値のペアを使用して Adob​​e フォームに入力しようとしています。ANTLR 4.0 では、トークンのすべての単語をマージし、それらをスペースで区切ってマージして文字列を形成する方法を特定しました。パーサーとレクサーは 4.0 で書き直されたため、3.5 には同じ機能がありません。問題を解決するためにあなたの意見を求めています。以下は、私たちが試みてきたいくつかのことです。

意味述語を書くこのアプローチを試みました。単語を取得することはできますが、単語の間に空白を挿入することはできません。

@init{ int N = 0; }
  :  ( { N <= 3 }? ) =>( WORD { N++; }  )+

これは空白を含める 3 番目のアプローチです。スキップする代わりにWS、各ルールで処理できますが、多くのメモリを占有する可能性があり、メモリ不足の問題が発生する可能性があります。

name: WORD WS WORD WS WORD;
WS    : ( ' '|'\t'|'\r'|'\n' )+
4

0 に答える 0