1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
   | """
Describe the parser of a query 
"""
from pyparsing import Literal, CaselessLiteral, Word, Upcase, delimitedList, Optional, \
    Combine, Group, alphas, nums, alphanums, ParseException, Forward, oneOf, quotedString, \
    ZeroOrMore, restOfLine, Keyword, StringEnd
 
def test(ch ):
        print ch,"->"
        try:
                tokens = selectStmt.parseString( ch )
                print "tokens = ",        tokens
                print "tokens.columnName=",tokens.columnName
                print "tokens.columnValue=",tokens.columnValue
        except ParseException, err:
                print " "*err.loc + "^\n" + err.msg
                print err
        print
 
 
colname = ['Airport name', 'Altitude', 'Located on point', 'Pilot map', 'Full name', 'Transition altitude', 'QFU'] 
# define tokens
selectStmt = Forward()
 
columnName = oneOf(colname).setName("columnName")
columnValue = Word(nums)
binop = oneOf("= != < > >= <=")
and_ = Keyword("and", caseless=True)
or_ = Keyword("or", caseless=True)
 
Expression = columnName.setResultsName( "columnName" ) + binop + columnValue.setResultsName( "columnValue" ) 
selectStmt << Expression + ZeroOrMore( ( and_ | or_ ) + Expression ) + StringEnd()
 
test("Altitude != 80 or QFU=120")
test("Altitude != 80 xor QFU=120") | 
Partager