2

私は解析が初めてです(明らかに)。マークアップ言語を解析するためにLEPLライブラリを使用しています。

このコードには問題があります (わかりやすくするために詳細は省略しています)。

from lepl import *

a = Literal('a')[0:,...] # 0 or more, join the result
b = Literal('b')

c = (a | b)[0:]

print c.parse("abaabaaab")

最後の行は ['a','b','aa','b','aaa','b'] を与えるはずです

エラーはありませんが、ハングします (無限再帰かも?)。誰かが私を正しい方向に向けることができますか?

編集

私はこのようにこれを行うことができます

from lepl import *

a = Literal('a')
b = Literal('b')

c = (a | b)[0:]

print c.parse("abaabaaab")

ただし、aはグループ化されません。

4

1 に答える 1

7

あなたの最初の例では、あなたが望むと確信しています

a = Literal('a')[1:]

文法に2 つの[0:]繰り返しがあると、パーサーは実質的に無限のバックトラッキングに遭遇します。

于 2011-04-10T19:58:10.427 に答える