Bonjour,
j'ai fait un bout de code afin d'analyser une query simple telle que :
Altitude != 80 or QFU=120

mon pg est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
"""
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
 
def test(ch ):
    	print ch,"->"
    	try:
        	tokens = selectStmt.parseString( ch )
        	print "tokens = ",        tokens
    	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)
columnValue = Word(nums)
binop = oneOf("= != < > >= <=")
and_ = Keyword("and", caseless=True)
or_ = Keyword("or", caseless=True)
 
Expression = columnName + binop + columnValue 
selectStmt << Expression + ZeroOrMore( ( and_ | or_ ) + Expression ) 
 
test("Altitude != 80 or QFU=120")
test("Altitude != 80 xor QFU=120")
Mon parser décode bien ma phrase, par contre il ne détecte pas certaines erreurs telle que l'opérateur xor qui n'est pas déclaré comme token.
L'output donne le résultat suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
>linux awalter 31>: python ./parsenedi.py
Altitude != 80 or QFU=120 ->
tokens =  ['Altitude', '!=', '80', 'or', 'QFU', '=', '120']
 
Altitude != 80 xor QFU=120 ->
tokens =  ['Altitude', '!=', '80']
 
>linux awalter 32>:
Le parser s'arrête en rencontrant l'erreur : xor. Est ce normal ?
Merci