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

Algorithmes et structures de données Discussion :

Grammaire avec caractères et littéraux


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 390
    Billets dans le blog
    16
    Par défaut Grammaire avec caractères et littéraux
    J'ai cette grammaire LL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    expression	-> terme expression_prim
    expression_prim -> plus terme expression_prim
                   | epsilon
    terme -> facteur terme_prim
            | litteral
            | caractere
    terme_prim -> etoile facteur terme_prim
             | epsilon
    facteur	-> identificateur 
           | nombre 
           | ( expression )
           | moins facteur
    je voudrais que litteral et caractère ne soient pas suivis d'une étoile (pour la multiplication):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    terme	-> facteur terme_prim
              | litteral
              | caractere
    	  | epsilon
    terme_prim -> etoile facteur terme_prim
             | epsilon
    je ne sais pas commment rendre cette grammaire en gramaire ascendante, car si je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    expression	-> expression plus terme
    		| terme
    terme	-> terme etoile facteur
    	| facteur
    	| caractere
    	| litteral
    	| epsilon
    facteur	-> id 
    	| nombre
    	| ( exression )
    	| moins facteur
    cela n'empèchera pas les caracteres et littéraux d'être suivis par une étoile.
    et ceci non plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    expression	-> expression plus terme
    		| terme
    terme	-> terme etoile facteur
    	| facteur
    	| epsilon
    facteur	-> id 
    	| nombre
    	| ( expression )
    	| caractere
    	| litteral
    	| moins facteur
    comment faire une grammaire ascendante qui tienne compte de cette contrainte?
    quelqu'un a une idée?

  2. #2
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 390
    Billets dans le blog
    16
    Par défaut
    En fait, la grammaire LL, au départ, est fausse
    la grammaire LL qui convient mieux est celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    expression -> caractere expression_prim | litteral expression_prim | terme expression_prim
    expression_prim -> plus terme expression_prim | epsilon
    terme -> facteur terme_prim
    terme_prim -> etoile facteur terme_prim | epsilon
    facteur	-> identificateur
    	| nombre
    	| ( expression )
    et la grammaire LR correspondante est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    expression	-> expression plus terme
    		| caractere
    		| litteral
    		| terme;
    terme	-> terme etoile facteur
    	| facteur;
    facteur	-> identificateur
    	| nombre
    	| ( expression )
    si cela peut aider quelqu'un

  3. #3
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 390
    Billets dans le blog
    16
    Par défaut
    Si on ne veut pas que litteral soit additionné avec un nombre, je crois qu'il faut utiliser cette grammaire LR:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    expression -> expression_scalaire | expression_litterale
    expression_litterale -> expression_litterale plus terme_litteral
    		     | terme_litteral
    terme_litteral -> caractere | litteral
    expression_scalaire -> expression_scalaire plus terme
    		    | terme
    		    | caractère
    terme -> terme étoile facteur
          | facteur
    facteur	-> nombre
    	| identificateur
    	| ( expresion_scalaire )
    et voici la version LL:
    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
    expression -> expression_scalaire | expression_litterale
    expression_litterale -> terme_litteral expression_litterale_prim
    expression_litterale_prim -> plus terme_litteral expression_litterale_prim
    			  | epsilon
    terme_liitteral -> litteral | caractere
    expression_scalaire -> terme expression_scalaire_prim
    		    | caractere expression_scalaire_prim
    expression_scalaire_prim -> plus terme expression_scalaire_prim
    			 | epsilon
    terme -> facteur terme_prim
    terme_prim -> etoile facteur terme_prim
    	   | epsilon
    facteur -> nombre
    	| identificateur
    	| ( expresion_scalaire )
    si cela peut aider quelqu'un

  4. #4
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 390
    Billets dans le blog
    16
    Par défaut
    if faut supprimer "caractère" de expression_litterale ou de expression_scalaire sinon on a une ambiguïté sur le caractère qui est à la fois dans premiers(expresion_litterale) et dans premier(expression_scaliare)

Discussions similaires

  1. trouver le début d'une grammaire avec java
    Par khaled05m dans le forum Général Java
    Réponses: 3
    Dernier message: 12/12/2019, 15h58
  2. Réponses: 2
    Dernier message: 26/11/2015, 15h20
  3. Tutoriel sur la mise en place d'une grammaire avec ANTLR
    Par Marco1982 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 19/07/2013, 11h39
  4. Réponses: 4
    Dernier message: 16/11/2009, 16h07

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