>>> g = MatchFirst( Literal("scoobydoo"), Literal("scooby") )
>>> g.parseString( "scooby" )
pyparsing.ParseException: Expected "scoobydoo" (at char 0), (line:1, col:1)
是否抛出 ParseException 是因为scooby
已经在字符流中消耗了,因此解析器无法回溯?我正在为此寻找详细的实现解释。
目前,我认为这是一个错误,因为解析器为什么会短路匹配,因为它没有搜索生产规则中的所有选择。
更新:
似乎MatchFirst
不完全等同于|
运算符。为什么 ?
>>> g = Literal("scoobydoo") | Literal("scooby")
>>> g.parseString("scooby").asList()
['scooby']
>>> g.parseString("scoobydoo").asList()
['scoobydoo']