4

次の行を解析しているとします。

The quick brown fox jumps over the lazy dog

これを次のように解析したいと思います。

Words('The quick brown fox') + Literal('jumps') + Words('over the lazy dog')

私の現在のpyparsingの定義は次のとおりです。

some_words = OneOrMore(Word(alphas))
jumps      = Literal('jumps')
sentence   = some_words + jumps + some_words

何が起こっているかというと、some_wordsが ' を飲み込みjumps'、解析エラーが発生します。pyparsing lex をリテラルトークンとしてジャンプするにはどうすればよいですか?

4

1 に答える 1

5

あなたはすでにパーサーのように考えています。なぜなら、OneOrMore(Word(alphas))「ジャンプ」という言葉を読むことさえも、パーサーが続けていることを理解しているからです。では、これをひっくり返して、パーサーを書いて、あなたが考えるように物事を処理してください。

「ジャンプ」までのすべての単語について、先頭の単語セットに追加する必要があることをどのように判断しますか? 「ジャンプ」という単語ではないので、単語ごとにわかります。Pyparsing はこの先読みを自動的に行いませんが、NotAny を使用して自分で行うことができます ('~' 演算子を使用して省略できます)。

JUMPS = Literal("jumps")
some_words = OneOrMore(~JUMPS + Word(alphas))

some_words は、別の単語を照合する前に、まずその単語が「ジャンプ」ではないことを確認します。

于 2011-08-13T19:30:20.113 に答える