pyparsing: odd listAllMatches behavior

P

Peter Fein

I'm trying to write a parser for a simple query language (for a web
search form). Things are ok, except that if the first match is an
OR_clause, I only get one token back when I access by name, instead of
a ParseResults. See below. TIA!

from pyparsing import *

class Downcase(TokenConverter):
"""Converter to lower case all matching tokens."""
def postParse( self, instring, loc, tokenlist ):
return map( string.lower, tokenlist )

word=Downcase(Word(alphas))

phrase=Combine(Literal('"').suppress() + OneOrMore(word) +
Literal('"').suppress(),
adjacent=False, joinString=" ")

OR_clause=Literal('OR').suppress() + (word.setResultsName("OR_word",
listAllMatches=True) ^
phrase.setResultsName("OR_phrase",
listAllMatches=True))

term=OR_clause ^ \
word.setResultsName('word', listAllMatches=True) ^ \
phrase.setResultsName('phrase', listAllMatches=True)

query=OneOrMore(term)


Python 2.3.4 (#1, Sep 20 2004, 15:34:06)
[GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] on
linux2
Type "help", "copyright", "credits" or "license" for more information.
## working on region in file /usr/tmp/python-a7Bl5m...
r=query.parseString('foo OR bar')
r (['foo', 'bar'], {'OR_word': [('bar', 1)], 'word': [('foo', 0)]})
r.OR_word (['bar'], {})
r.word (['foo'], {})

r=query.parseString('OR bar foo')
r (['bar', 'foo'], {'OR_word': [('bar', 0)], 'word': [('foo', 1)]})
r.OR_word 'bar'
r.word
'foo'
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,185
Members
46,736
Latest member
AdolphBig6

Latest Threads

Top