質問

私はANTLRの世界で非常に新しいので、この解析ツールを使用して「ノイズの多い」文字列のセットを解釈するにはどうすればよいですか?私が達成したいのは次のとおりです。

たとえば、このフレーズを考えてみましょう。 It's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV

抽出したいのはです CAT, SLEEPINGSOFA そして、次のパターンに簡単に一致する文法を持っています:主題 - 動詞 - 間接的なオブジェクト...私が定義できる場所

VERB : 'SLEEPING' | 'WALKING';
SUBJECT : 'CAT'|'DOG'|'BIRD';
INDIRECT_OBJECT : 'CAR'| 'SOFA';

など..言語構造に関するすべての可能性を説明できないので、私は永続的な「NoviaveException」になりたくありません。役に立たない言葉を引き裂き、面白い言葉を保ちたいだけです。

トークナーを持っていて、パーサーに「OK、被写体を見つけるまでストリームを読んでから、動詞などが見つかるまで残りを無視してください。」と尋ねた場合のようです。

組織化された構造を組織化されていないセットで抽出する必要があります...たとえば、私は解釈できるようにしたいと思います(「英語文法」のこのまったく基本的で誤った見解の適切さを判断していません)
SUBJECT - VERB - INDIRECT OBJECT
INDIRECT OBJECT - SUBJECT - VERB

だから私はのような文章を解析します

It's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV

また

It's 10PM and, on the SOFA in front of the TV, the Lazy CAT is currently SLEEPING heavily

役に立ちましたか?

解決

いくつかのlexerルール(たとえば、投稿したもの)のみを作成できます。最後のlexerルールとして、任意のキャラクターと一致させることができます。 skip() それ:

VERB            : 'SLEEPING' | 'WALKING';
SUBJECT         : 'CAT'|'DOG'|'BIRD';
INDIRECT_OBJECT : 'CAR'| 'SOFA';
ANY             : . {skip();};

ここでは順序が重要です:レクサーはトークンと上から下まで一致しようとするので、トークンのいずれにも一致できない場合 VERB, SUBJECT また INDIRECT_OBJECT, 、それはに「落ちる」 ANY このトークンを支配してスキップします。次に、これらのパーサールールを使用して、入力ストリームをフィルタリングできます。

parse
  :  sentenceParts+ EOF
  ;

sentenceParts
  :  SUBJECT VERB INDIRECT_OBJECT
  ;  

入力テキストを解析します。

午後10時で、怠zyな猫は現在眠っています テレビの前のソファで重く。犬 ソファの上を歩いています。

次のように:

alt text

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top