Bonjour,
J'ai un cas ou a | b n'est pas identique à b | a.
Je n'ai pas souvenir qu'un ordre avait un impact sur le résultat, comme si le parser explorait l'arbre a et s'arrêtait sur une erreur sans tenter d'explorer l'arbre b (c'est le sens du |, non ?).
Voici mon code
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
	self.selectStmt = Forward()
	real_value		= Combine(Word(nums) + "." + Word(nums))
	int_value		= Word(nums)
	numeric_value 		= real_value | int_value
	non_enum_value 		= Word(alphanums+'%')
	column_value		= numeric_value | non_enum_value
	self.selectStmt << column_value
	self.test("230.2")
 
    def test(self, str ):
    	print str,"->"
    	try:
        	tokens = self.selectStmt.parseString( str ,True)
		print "tokens =      ",tokens
    	except ParseException, err:
        	print " "*err.loc + "^\n" + err.msg
        	print err
    	print
le résultat est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
230.2 ->
tokens = ['230.2']
Si je change l'expression "column_value" en
Code : Sélectionner tout - Visualiser dans une fenêtre à part
column_value		= non_enum_value | numeric_value
le résultat devient
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
230.2 ->
   ^
Expected end of text
Est ce normal ?
Merci