Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1214 connectés 

  FORUM HardWare.fr
  Programmation

  [do it yourself] Compilation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[do it yourself] Compilation

n°165031
chrisbk
-
Posté le 24-06-2002 à 22:13:58  profilanswer
 

yop tous !
 
 
pour des raisons de fun, apprentissage et tonification capilaire, je suis en train d'ecrire un *chtit* compilo. (je vous le concede, avec le temps qu'il fait dehors, c'est un peu dommage, mais bon, passons)L'affaire se presente plutot bien,  le titi compile comme il se doit des expressions plus ou moins farfelues,  mais la je suis face a un leger soucis "d'optimisation". (entre guillements car c'est un bien grand pour une si petite chose)
 
Voila le bleme :
 

Code :
  1. float toto;
  2. float titi;
  3. toto = 2;
  4. toto = titi + 1 + 1 ;


 
(ca ressemble a du C, mais la c'est bien le langage que je suis en train de bricoler)
 
N'importe quel humain doté du bagage mathematique d'un CE1 et de 4 neurones montées en série vous dira que ceci peut se simplifier en :
 
toto = titi + 2;
 
(ca va, tout le monde suit ? [:nofret])
 
Seulement, pas mon compilo (explications sur le pourquoi du comment plus tard)
 
par contre, si je fais :
 
toto = titi + (1+1);
 
ou bien
 
toto = 1 + 1 + titi;
 
la ca se transforme bien en  
 
toto = 2 + titi;
 
La cause profonde vient de l'arbre de syntaxe abstraite (d'une part) et de la méthode "d'optimisation" que j'ai employé (d'autre part). En effet, pour optimiser, je procede (en gros) de la maniere suivante :
 


Operande compile()
{
   Operande op1 = fils1->compile();
   Operande op2 = fils2->compile();
 
   si op1.estNumerique == vraie ET op2.estNumerique == vraie
       retourne op1 + op2;
 
   Operande op3;
   Instruction instr = "add op3,op1,op2"; // op3 = op1 + op2
   ajouteInstruction(instr);
   retourne op3;
}


 
bien, si les deux fils sont numérique, au lieu de faire une nouvelle instruction, je calcule la valeur et je renvoie une nouvelle operande numerique contenant op1+op2. Sinon je fais une nouvelle operande qui contiendra le resultat de l'instruction "add" et je renvoie celle ci.
 
Ceci peut sembler marcher (du moins, moi j'y croyais dur comme fer :D), mais en fait non, car apres parse de "titi + 1+1"  j'obtiens l'arbre suivant :
 


               +
              /  \
             /    \
            +      1
           /\
          /  \
        titi 1


 
 
 
Resultat  des courses : echec complet. La condition "op1.estNumerique == vraie ET op2.estNumerique == vraie" est jamais vérifié, donc aucun bricolage.
Ceci marcherait si a la place j'avais :
 


               +
              /  \
             /    \
            titi   +
                   /\
                  /  \
                 1   1


 
 
(ce que j'obtiens donc en changent le titi + 1 + 1 en 1 + 1 +titi ou avec des parentheses)
 
La question du jour étant bien entendu : comment faire pour n'avoir qu'une instruction et non deux ? (et si possible sans que tout l'édifice ne se mette à respirer le scotch et fil de peche a cause de manipulations douteuses sur l'arbre :D)
 
 
pour info, voila le bout de grammaire yacc incriminé :


 
procInstr :  procInstr '+' procInstr2  {$$ = new ZGCCodePlus($1,$3);}
;
 
procInstr2 : ident    {$$ = new ZGCCodeIdent($1);}
| float      {$$ = new ZGCCodeFloat($1);}
;


 
ident etant donc une chaine de caractere et float....ben un float quoi.
ZGCCodeFloat renvoie true a "estNumerique", tandis que ZGCCodeIdent renvoie faux
 
 
Thanks pour vos lumieres !
 
 
(apres 3 edit je pense que ce post ressemblera enfin a quelque chose [:olimou])


Message édité par chrisbk le 24-06-2002 à 22:19:35
mood
Publicité
Posté le 24-06-2002 à 22:13:58  profilanswer
 

n°165154
gilou
Modérateur
Modzilla
Posté le 25-06-2002 à 05:41:12  profilanswer
 

Bon, faudrait que tu etudies les bouquins de compilation, section "Constant Folding". Le reperage des parties constantes d'une expression avant evaluation et leur traitement est ainsi appellé en theorie des compilos.
Grosso modo, le constant folding remplace une expression binaire ou unaire avec pour parametres des constantes, par leur resultat direct. Note: ce resultat doit etre equiuvalent a ce que la machine cible aurait generé comme résultat (et non pas ce que le compilateur du compilo a envie de mettre, car ca peut etre different, surtout en cas de cross-compilo).
Le constant folding est une "early optimization".
Si tu as deja assimilé toutes les bases de la théorie des compilos (ie tu as lu et compris le dragon book), tu peux continuer par le Advanced Compiler design and implementation de S. Muchnik, bon bouquin, mais cher.
A+,


Message édité par gilou le 25-06-2002 à 05:51:56

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°165293
chrisbk
-
Posté le 25-06-2002 à 11:38:24  profilanswer
 

thk, j'irais faire un tour sur le net pour cette histoire de constant folding
 
J'ai lu aucun bouquin a ce sujet, mes connaissances la dessus c'est les cours qu'on a eu cette année (qui ne contenait rien sur cette partie la, donc) et du bricolage personnel :D

n°165383
gilou
Modérateur
Modzilla
Posté le 25-06-2002 à 13:39:03  profilanswer
 

Oui,
Mais c'est une des partie les plus complexes de l'ecriture d'un soft, l'ecriture d'un compilo, et y'a pas mal de methodes qui s'inventent pas car pas evidentes.
Le bouquin de base, c'est le dragon book, mais il est assez theorique. Si tu as pas eu de cours la dessus, essaie plutot de regarder une etude de cas comme les bouquins de Holub ou il implemente un compilo C.
Mais c'est sur que si tu restes avec Lex et Yacc, tu vas avoir des pbs pour implementer un constant folding generique.
A+,


Message édité par gilou le 25-06-2002 à 13:39:36

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°165387
KrzAramis
Help Me
Posté le 25-06-2002 à 13:42:30  profilanswer
 

Gilou, veux tu bien me definir ce que le verbe "implementer" veut dire.
 
Car a ma connaissance ce mot n existe pas en francais.
 
dsl
 
@->--


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
n°165389
prettysmil​e
Sourire est un devoir social
Posté le 25-06-2002 à 13:46:42  profilanswer
 

krzAramis a écrit a écrit :

Gilou, veux tu bien me definir ce que le verbe "implementer" veut dire.
 
Car a ma connaissance ce mot n existe pas en francais.
 
dsl
 
@->--




http://www.dicofr.com/jo/16-09-89-d.html
 
encore une fois google le savait

n°165392
KrzAramis
Help Me
Posté le 25-06-2002 à 13:51:28  profilanswer
 

il est cool ton lien "jolie sourire".
Mais ce que tu proposes c est le dico de "l informatique".
A mon avis ce mot est loin d etre incorporer dans le dicionaire de la langue francaise.
Ce qui est rigolo c est que la definition proposee est differente de son homologue anglaise (j en sais qqc je vis en Angleterre).
To implement: mettre en oeuvre !
 
Merci
 
@->--


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
n°165409
prettysmil​e
Sourire est un devoir social
Posté le 25-06-2002 à 14:12:17  profilanswer
 

krzAramis a écrit a écrit :

il est cool ton lien "jolie sourire".
Mais ce que tu proposes c est le dico de "l informatique".
A mon avis ce mot est loin d etre incorporer dans le dicionaire de la langue francaise.
Ce qui est rigolo c est que la definition proposee est differente de son homologue anglaise (j en sais qqc je vis en Angleterre).
To implement: mettre en oeuvre !
 
Merci
 
@->--




 
pour qu'un mot soit incorporé dans un dictionnaire français, il faut que des types, qui soit dit en passant n'ont rien d'autre à foutre, l'ai rencontré un certains nombres de fois dans la presse écrite. Je ne crois pas qu'ils se soient encore interessé à l'internet. Par conséquent ce n'est pas parcequ'un mot n'est pas dans le petit R qu'il n'existe pas  ;)

n°165424
KrzAramis
Help Me
Posté le 25-06-2002 à 14:25:19  profilanswer
 

dakodak.
 
n empeche que l an dernier j ai rendu un "memoire" sur la norme MP3. Evidement qd tu t amuse a traduire la norme ISO de l anglais au francais, des "implement" t en a tout les deux mots. Alors pour faire le malin j ai mis des "implementer".
Et je me sius fait tordre !
c est tout !
 
 :pt1cable:  
@->--


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
n°165439
brisssou
8-/
Posté le 25-06-2002 à 14:35:44  profilanswer
 

moi je repond au premier message...
 
bha en fait, on a fait ça en début de deuzième année d'IUT d'info...
 
ou alors ça ressemblait à mort...
avec l'arbre et tout et tout... on a fait ça en C++, ça nous à pris 2 mois et demi avec un prof un peu naz et des élèves à peine motivés...
 
Vala, c t ma participation inutile du jour...
à demain ! :hello:


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
mood
Publicité
Posté le 25-06-2002 à 14:35:44  profilanswer
 

n°165450
chrisbk
-
Posté le 25-06-2002 à 14:44:46  profilanswer
 

gilou a écrit a écrit :

Oui,
Mais c'est une des partie les plus complexes de l'ecriture d'un soft, l'ecriture d'un compilo, et y'a pas mal de methodes qui s'inventent pas car pas evidentes.
Le bouquin de base, c'est le dragon book, mais il est assez theorique. Si tu as pas eu de cours la dessus, essaie plutot de regarder une etude de cas comme les bouquins de Holub ou il implemente un compilo C.
Mais c'est sur que si tu restes avec Lex et Yacc, tu vas avoir des pbs pour implementer un constant folding generique.
A+,




 
Ben deja le compilo que j'ecris n'est pas hyper sophistiqué. Y'aura pas de feature tordu, de polymorphisme ou du je-ne-sais-quoi. Ca limite la casse. Vu que j'ai deja fait un autre chtit compilateur (une sorte de C sans pointeur) j'ai donc deja qqes connaissances en compilation, mais je ne pense pas que ca aille chercher bien loin...
 
Par contre, tu reproches quoi a flex/yacc ? Quels autre outil me proposerais tu ?
 
 
 
 

n°165454
chrisbk
-
Posté le 25-06-2002 à 14:45:51  profilanswer
 

brisssou a écrit a écrit :

moi je repond au premier message...
 
bha en fait, on a fait ça en début de deuzième année d'IUT d'info...
 
ou alors ça ressemblait à mort...
avec l'arbre et tout et tout... on a fait ça en C++, ça nous à pris 2 mois et demi avec un prof un peu naz et des élèves à peine motivés...
 
Vala, c t ma participation inutile du jour...
à demain ! :hello:  




 
avec le constant folding ?  
 
(celui ci je bosse depuis vendredi, ca avance plutot pas mal, je trouve, mais c vrai que je vois plus trop la lumiere du soleil :crazy: )
 

n°166601
chrisbk
-
Posté le 26-06-2002 à 17:01:32  profilanswer
 

bon, et bien, une recherche google sur "constant folding" m'a renvoyé deux trois trucs interessant.
 
j'ai donc laissé tomber la compilation directe a partir de l'asa pour deja généré du code en langage intermediaire. A partir de la j'ai attaqué l'optimisation du code intermidiaire, et ca marche plutot bien . des blagues genre :
 
a = 1;
b = 5;
t =  a + b + 1 + 1 +1;
 
se transforment maintenant finement en :
t = 9
 
ce qui est tout simplement formidable !
 
bon y'a encore quand meme pas mal de boulot :D
 


Message édité par chrisbk le 26-06-2002 à 17:01:54
n°166719
gilou
Modérateur
Modzilla
Posté le 26-06-2002 à 21:00:13  profilanswer
 

chrisbk a écrit a écrit :

bon, et bien, une recherche google sur "constant folding" m'a renvoyé deux trois trucs interessant.
 
j'ai donc laissé tomber la compilation directe a partir de l'asa pour deja généré du code en langage intermediaire. A partir de la j'ai attaqué l'optimisation du code intermidiaire, et ca marche plutot bien . des blagues genre :
 
a = 1;
b = 5;
t =  a + b + 1 + 1 +1;
 
se transforment maintenant finement en :
t = 9
 
ce qui est tout simplement formidable !
 
bon y'a encore quand meme pas mal de boulot :D
 
 




 :jap:


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°166722
gilou
Modérateur
Modzilla
Posté le 26-06-2002 à 21:07:07  profilanswer
 

krzAramis a écrit a écrit :

Gilou, veux tu bien me definir ce que le verbe "implementer" veut dire.
 
Car a ma connaissance ce mot n existe pas en francais.
 
dsl
 
@->--




Ah bon, au cours de ma scolarité universitaire, ce verbe, ainsi que le nom derivé "implementation" a ete utilisé de maniere constante.
Je vois pas d'equivalent francais a priori (et certes pas implanter). Le verbe designe quelque chose d'assez precis: l'ensemble des actions entreprises afin de transformer un modele conceptuel en un programme executable (et parfois se restreint a designer la phase de l'ecriture des fichiers en un langage de programmation de cet executable).
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°166725
gilou
Modérateur
Modzilla
Posté le 26-06-2002 à 21:14:17  profilanswer
 

krzAramis a écrit a écrit :

dakodak.
 
n empeche que l an dernier j ai rendu un "memoire" sur la norme MP3. Evidement qd tu t amuse a traduire la norme ISO de l anglais au francais, des "implement" t en a tout les deux mots. Alors pour faire le malin j ai mis des "implementer".
Et je me sius fait tordre !c est tout !
 
 :pt1cable:  
@->--




Tu veux dire quoi par là? que les types qui ont lu ton mémoire t'en ont fait la remarque, moi je les allume quand tu veux sur ce sujet.
Ca prouve leur betise.
L'evolution d'une langue ne se fait pas a coup de decrets, mais par l'usage des utilisateurs de cette langue. Si les utilisateurs emploient majoritairement un terme nouveau, eventuellement emprunté a une autre langue et adapté, pour designer un concept nouveau, ce terme devient de facto un mot nouveau de la langue.
Faire croire qu'un petit comité peut decider de ce qui fait partie de la langue ou non, est un concept qui a ete introduit pour des raisons politiques, mais qui ne correspond pas a la realité linguistique.
A+,


Message édité par gilou le 26-06-2002 à 21:16:50

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°166789
mareek
Et de 3 \o/
Posté le 26-06-2002 à 23:32:38  profilanswer
 

brisssou a écrit a écrit :

moi je repond au premier message...
 
bha en fait, on a fait ça en début de deuzième année d'IUT d'info...
 
ou alors ça ressemblait à mort...
avec l'arbre et tout et tout... on a fait ça en C++, ça nous à pris 2 mois et demi avec un prof un peu naz et des élèves à peine motivés...
 
Vala, c t ma participation inutile du jour...
à demain ! :hello:  




 
 :hello: T'as fait l'iut info de grenoble si j'en crois ton profile ?
Moi aussi
 
moi aussi je peux faire des participations inutiles  [:shooter]


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°166831
verdoux
And I'm still waiting
Posté le 27-06-2002 à 00:15:00  profilanswer
 

chrisbk a écrit a écrit :

bon, et bien, une recherche google sur "constant folding" m'a renvoyé deux trois trucs interessant.
 
j'ai donc laissé tomber la compilation directe a partir de l'asa pour deja généré du code en langage intermediaire. A partir de la j'ai attaqué l'optimisation du code intermidiaire, et ca marche plutot bien . des blagues genre :
 
a = 1;
b = 5;
t =  a + b + 1 + 1 +1;
 
se transforment maintenant finement en :
t = 9
 
ce qui est tout simplement formidable !
 
bon y'a encore quand meme pas mal de boulot :D
 
 




Tu peux aussi essayer de faire un front-end gcc pour ton langage :D
 
http://www.eskimo.com/~johnnyb/computers/toy/

n°166857
chrisbk
-
Posté le 27-06-2002 à 04:14:14  profilanswer
 

Verdoux a écrit a écrit :

 
Tu peux aussi essayer de faire un front-end gcc pour ton langage :D
 
http://www.eskimo.com/~johnnyb/computers/toy/




 
 
restons sobre, veux tu ? :D
 
 
 
(voulais juste dire que le tatouin vient de me pondre ses premieres ligne de code, que j'etais content, et que vu que ca marche je m'autorise a aller me pieuter  :D )

n°166900
brisssou
8-/
Posté le 27-06-2002 à 09:39:26  profilanswer
 

mareek a écrit a écrit :

 
 
 :hello: T'as fait l'iut info de grenoble si j'en crois ton profile ?
Moi aussi
 
moi aussi je peux faire des participations inutiles  [:shooter]  




 
en alternance même que !! et pis la je viends juste de finir !!


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [do it yourself] Compilation

 

Sujets relatifs
Probleme de compilation avec les templates[C++] Problème de compilation d'une appli en C++
[utilisation de gcc] étape intermédiare de compilationProbleme de rebbot lor de la compilation sous vc++ et win2k
PHP - Compilation de fichiers phperreur de compilation
compilation[Apache - PHP - Oracle] Compilation
[Turbo Pascal] Compilation[java] compilation croisée
Plus de sujets relatifs à : [do it yourself] Compilation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR