2

私はANTLRの世界では非常に新しいので、この解析ツールを使用して一連の「ノイズの多い」文字列を解釈する方法を見つけようとしています。私が達成したいことは次のとおりです。

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

私が抽出したいのはCATSLEEPINGそしてSOFA次のパターンに簡単に一致する文法を持っていることです: SUBJECT - VERB - INDIRECT OBJECT...どこで定義できるか

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

など..永続的な「NoViableException」で終わりたくありません言語構造に関するすべての可能性を説明することはできません。無駄な言葉を切り裂いて、面白い言葉だけ残しておきたい。 トークナイザーがあり、パーサーに「OK、 SUBJECT

が見つかるまでストリームを読み、動詞が見つかるまで残りを無視するなど..」と尋ねた場合のようなものです。

たとえば、私は解釈できるようになりたいと思っています (私は、この完全に基本的で間違った '
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

4

1 に答える 1

3

いくつかのレクサー ルール (たとえば、投稿したもの) のみを作成でき、最後のレクサー ルールとして、任意の文字とskip()それに一致させることができます。

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

ここでは順序が重要です。レクサーはトークンを上から下に一致させようとするため、トークンVERBSUBJECTまたはのいずれにも一致しない場合INDIRECT_OBJECT、ルールに「フォールスルー」してANYこのトークンをスキップします。次に、これらのパーサー ルールを使用して、入力ストリームをフィルター処理できます。

parse
  :  sentenceParts+ EOF
  ;

sentenceParts
  :  SUBJECT VERB INDIRECT_OBJECT
  ;  

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

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

次のように:

代替テキスト

于 2010-11-30T08:55:10.347 に答える