>>> g = MatchFirst( Literal("scoobydoo"), Literal("scooby") )
>>> g.parseString( "scooby" )
pyparsing.ParseException: Expected "scoobydoo" (at char 0), (line:1, col:1)
scooby
はすでに文字ストリームで消費されているため、パーサーはバックトラックできないため、ParseExceptionがスローされますか?このための詳細な実装の説明を探しています。
現時点では、これはバグだと考えています。これは、パーサーが本番ルールのすべての選択肢を検索していないために、パーサーがマッチングを短絡する理由です。
更新:
演算子と完全MatchFirst
に同等ではないようです。|
なんで ?
>>> g = Literal("scoobydoo") | Literal("scooby")
>>> g.parseString("scooby").asList()
['scooby']
>>> g.parseString("scoobydoo").asList()
['scoobydoo']