>>> g = MatchFirst( Literal("scoobydoo"), Literal("scooby") )
>>> g.parseString( "scooby" )
pyparsing.ParseException: Expected "scoobydoo" (at char 0), (line:1, col:1)
Выдается ли исключение ParseException, поскольку scooby
уже используется в потоке символов и, следовательно, анализатор не может вернуться назад? Я ищу подробное объяснение реализации этого.
В данный момент я считаю это ошибкой, потому что почему анализатор закорачивает соответствие, так как он не ищет все варианты в производственном правиле.
UPDATE :
Похоже, MatchFirst
не совсем эквивалентно оператору |
. Почему?
>>> g = Literal("scoobydoo") | Literal("scooby")
>>> g.parseString("scooby").asList()
['scooby']
>>> g.parseString("scoobydoo").asList()
['scoobydoo']