Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages
Autres langages Clipper, D, Eiffel, Forth, FoxPro, Kpl, NSDK, R, Rebol, Smalltalk, ... Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/11/2012, 12h01   #1
hitman981
Invité de passage
 
Homme
Étudiant
Inscription : novembre 2012
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2012
Messages : 1
Points : 0
Points : 0
Par défaut [Lex/Yacc] Problème de typage / appel récursif du parseur de yacc

Bonjour,

Etudiant en informatique, je travaille actuellement sur un analyseur d'un langage inventé transformant ce langage en du c++.

J'ai pris la documentation qu'il me faut aussi bien sur le net que dans des livres, pour autant je ne trouve pas d'explication (nullepart) sur mon problème de typage.

Mon fichier lex sert d'analyseur et envoie au fichier yacc les données que celui ci analysera grammaticalement avant d'écrire du c++.

Exemple d'une règle qui me pose problème:

Code :
definition_fonction : "FONCTION" IDENTIFIANT "PARAMETRES" parametres "DEBUT{" instructions "}RETOUR" expression ";" "FIN_FONCTION"
Içi, la regle definition_fonction contient des instructions, qui peuvent elles même être n'importe quel règle, dont justement definition_fonction.

Je ne peux donc pas donner comme gestion un :
Code :
printf("function %s (%s) { %s \n return %d;\n }\n",$8,$6,$4,$1);
car mon $6 (instructions) ne renverra pas forcément une string, mais pourra être un affichage en printf comme dans le cas d'une règle definition_fonction.

Mes deux idées :
1) faire une regle
Code :
%start program : instructions { printf("%s",$1); }
et amener toutes les sous règles à renvoyer au final des string grâce à $$=...

Mais dans ce cas, je me retrouve avec des problèmes de types dans tous les sens !

2) Donc j'ai imaginé une 2nde possibilité, avoir un appel au sein même d'une règle de yacc sur une partie de son contenu.

ex:

Code :
1
2
3
4
definition_fonction : "FONCTION" IDENTIFIANT "PARAMETRES" parametres "DEBUT{" instructions "}RETOUR" expression ";" "FIN_FONCTION" 
{ printf("function %s (%s) { ",$4,$1);
  // içi on parse les regles instructions
  printf("return %d;\n }\n",$8); }
Sauf que je ne sais pas comment demander au parseur de yacc de travailler uniquement sur les instructions présentes entre ce "DEBUT{" et "}RETOUR" !
J'ai regardé le fonctionnement de yyparse() mais il ne semble pas convenir.


Si une âme charitable comprend mon soucis et peut m'aider, ce serait génial !
Merci en tout cas d'avoir lu mon message.
Hugo T.
hitman981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h23.


 
 
 
 
Partenaires

Hébergement Web