questrion lex/yacc

Le
Denis Leger
Bonjour,

je n'ai pas trouvé de forum plus adapté à ma question, merci de m'en
indiquer un s'il existe

Je ne comprend pas bien comment fonctionne yacc, voici un exemple
très minimal de ce qui me tracasse (contenu du fichier test.y) :


%token TEXTE AUTRE

%%

chaine: chaine texte { }
| chaine autre { }
| texte { }
| autre { } ;

autre: autre AUTRE { }
| AUTRE { } ;


texte: texte TEXTE { }
| TEXTE { };

%%


La grammaire est minimale, mais je veux simplement comprendre où est le
problème : yacc m'indique 4 conflits décalage/réduction, quelqu'un
peut-il m'expliquer pourquoi, et que faire pour l'éviter ?

Un grand merci d'avance pour toute aide.

--
Denis Léger
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric Levenez
Le #1000387
Le 24/05/07 13:25, dans « Denis Leger »
je n'ai pas trouvé de forum plus adapté à ma question, merci de m'en
indiquer un s'il existe...


Ce n'est pas du tout le bon NG, mais je comme il n'y a pas foule ici...

Je ne comprend pas bien comment fonctionne yacc, voici un exemple
très minimal de ce qui me tracasse (contenu du fichier test.y) :


%token TEXTE AUTRE

%%

chaine: chaine texte { }
| chaine autre { }


Les 2 lignes suivantes ne servent à rien je pense.

| texte { }
| autre { } ;

autre: autre AUTRE { }
| AUTRE { } ;


Pour "autre" et "texte", c'est en gros 2 fois la même chose vu que ce sont
des élements de chaine, alors il ne sert à rien de dire qu'il y a quelque
chose avant "AUTRE" ou avant "TEXTE" (c'est déjà dans la règle "chaine").

texte: texte TEXTE { }
| TEXTE { };

%%


La grammaire est minimale, mais je veux simplement comprendre où est le
problème : yacc m'indique 4 conflits décalage/réduction, quelqu'un
peut-il m'expliquer pourquoi, et que faire pour l'éviter ?


Je ferais un truc du genre :

%token TEXTE AUTRE

%%

chaine
: chaine element { }
| element { }
;

element
: AUTRE { }
| TEXTE { }
;

%%

--
Éric Lévénez -- Unix is not only an OS, it's a way of life.

Denis Leger
Le #1000384
Le Thu, 24 May 2007 18:54:04 +0200

Le 24/05/07 13:25, dans

je n'ai pas trouvé de forum plus adapté à ma question, merci de
m'en indiquer un s'il existe...


Ce n'est pas du tout le bon NG, mais je comme il n'y a pas foule
ici...


Mais quel serait le NG le plus adapté ?


Je ne comprend pas bien comment fonctionne yacc, voici un exemple
très minimal de ce qui me tracasse (contenu du fichier test.y) :



[...]

Je ferais un truc du genre :

%token TEXTE AUTRE

%%

chaine
: chaine element { }
| element { }
;

element
: AUTRE { }
| TEXTE { }
;

%%


Merci de ton aide, je vais regarder ce que je peux faire avec ça.

Amicalement,

--
Denis Léger


Jean-Marc Bourguet
Le #1000240
"Antoine Leca"
Note que si ta question était plus pointue, il faudrait aller chercher les
groupes dédiés aux langages (groupe(s) que je ne connais pas en français ;
en anglais c'est probablement comp.compilers s'il fonctionne encore.)


Il fonctionne toujours.

A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Denis Leger
Le #1000238
Le Fri, 25 May 2007 10:22:34 +0200

En news:,
Denis Leger va escriure:

je n'ai pas trouvé de forum plus adapté à ma question, merci de
m'en indiquer un s'il existe...


Ce n'est pas du tout le bon NG, mais je comme il n'y a pas foule
ici...


Mais quel serait le NG le plus adapté ?


Ici :-) (ou fr.comp.os.unix).
Éric dit que ce sujet n'est pas dans la charte du groupe (ce qui est
exact). Tu demandes à quel endroit poster pour obtenir les meilleures
indications sans générer trop de bruit : c'est ici !

Note que si ta question était plus pointue, il faudrait aller
chercher les groupes dédiés aux langages (groupe(s) que je ne connais
pas en français ; en anglais c'est probablement comp.compilers s'il
fonctionne encore.) D'autre part, s'il y avait plus de traffic ici
comme ce fut le cas par le passé, ou comme c'est encore le cas pour
comp.lang.c, ce ne serait pas adapté, car cela provoquerait des
réponses inutiles du genre « rappel à la norme » ; cf. la deuxi ème
partie de la phrase d'Éric.


Mais je cherchais un forum en français...

Quoi qu'il en soit, la réponse qui m'a été donnée m'a permis de
comprendre où était mon problème et je suis sur la bonne voie pour le
résoudre, donc merci beaucoup à Eric Levenez.. ;-)


--
Denis Léger




Publicité
Poster une réponse
Anonyme