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