IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

pyparsing : le 'ou' a un comportement bizarre


Sujet :

Python

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut pyparsing : le 'ou' a un comportement bizarre
    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

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Si le code le dit, c'est que c'est "normal"

    La subtilité est entre:
    • non_enum_value = Word(alphanums+'%')
    • non_enum_value = Word(alphanums) + '%'

    qui utilisé dans:
    • column_value = non_enum_value | NUMBER

    aide le parser à retraiter ce qu'il a déjà consommé pour essayer autre chose.
    Un soucis est peut être que pyparsing ne fait pas de séparation claire entre "lexical" et "parsing".
    Il faut que vous y fassiez attention par vous même.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Comportement bizarre de mes FPS
    Par Ekinoks dans le forum OpenGL
    Réponses: 7
    Dernier message: 22/08/2005, 15h14
  2. xsl:test .... avec comportement bizarre
    Par Blue LC dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 13h56
  3. [ACESS][MEMO][ISNULL]Comportement bizarre
    Par seb.49 dans le forum ASP
    Réponses: 2
    Dernier message: 09/06/2004, 10h44
  4. [HttpClient] comportement bizarre, saute des catch()...
    Par iubito dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 04/02/2004, 15h25
  5. [Sybase] Comportement bizarre d'une table
    Par sdozias dans le forum Sybase
    Réponses: 4
    Dernier message: 03/02/2004, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo