1

サードパーティ アプリケーションによって生成されたファイルを解析する必要があります。ANTLR を使用して、問題なく動作するように見えるパーサーを作成しましたが、次のような問題が発生するまでは問題ありませんでした。

ファイル タイプは行ベースで、いくつかのキーワードを使用して階層構造を定義します。いわゆる「ブロック」で、それ自体がサブブロックなどを持つことができます。現在のブロックのタイプに応じて、さまざまな行に特別な意味があります。たとえば、ある特定のブロックでは、5 行目 (ブロックの先頭からの相対位置) がファイルの作成者を保持し、別のブロックでは、3 行目がファイル名です。これらはすべて基本的に文字列です。つまり、ユーザーはファイルを作成するときにデータに必要なものを何でも入力できます。しかし、それらが文字列であるという事実は、行番号を通じて暗黙のうちにのみ認識されます。

これらの文字列を識別するための引用符などがないため、レクサーはこれらのテキストの一部 (数字やキーワードと同一の単語など) をトークン化することがあります。パーサーのルールのトークン。

私がしようとしているように、この種のファイルをパーサージェネレーターで処理することは可能ですか? 私はパーサーの構築に精通していないので、この小さな問題を克服するのに役立つ簡単な回避策または ANTLR の機能があることを願っています。

4

1 に答える 1

1

このような文法を解析するために、ANTLR、Yacc、またはその他の同様のツールを使用しないでください (事前定義されたトークンの明確でコンテキストに依存しないセットはありません)。

lexerless アプローチ ( Packrat、またはPEGを解釈する他の方法など) の方が適しています。

多くの Packrat 実装があり、特定のパフォーマンス要件のない単純な文法の場合は特に、サードパーティのツールを使用せずに、任意の言語でアドホック再帰降下 PEG パーサーをコーディングすることはそれほど難しくありません。

于 2012-05-24T08:26:38.653 に答える