Compilateur
Compilateur
Après pas mal de mois de recherche et d'apprentissage , je pense être en mesure de créer un compilateur 'from scratch' en PureBasic , mais je bute sur le choix de la partie arrière du compilateur.
je m'explique , un compilateur à deux grande partie, la partie avant , et la partie arrière.
- La partie avant lis le code source , nettoie les commentaires , supprime l'indentation & le découpe en une liste de mot , les mots sont transformé en jeton, qui, selon sont type (numérique , alphanumérique, opérateur , mot clé , etc...) prends des valeurs différentes, ensuite , viens ensuite l'analyseur lexicale , qui lui lis tout les mots , détermine ce qu'ils défini ( variable , procédure , déclaration ) et traite les erreurs de déclarations ainsi que les commandes de préprocesseur ( #include , #ifdefined , et autre macros ), une fois tout cela ficelé , les jetons correctement formé , on les balance à l'analyseur syntaxique pour vérifié les fautes de frappes.
voila grosso modo la partie avant, il en sort une serie de jeton du type ' [VAR] [OPERATOR] [NUMBER] ' , ou chaque jeton possèdes des attributs , par exemple [NUMBER] contient la valeur numérique immédiate, [VAR] contient le nom de la variable , le numéro de ligne ou elle est déclaré , [OPERATOR] peut être '=' ou '+' suivant ces attributs , etc...
- La partie arrière , quand à elle à un pseudo langage en entré ( les jetons )
par exemple : ' [VAR] [OPERATOR] [NUMBER] '
il peut être traduit en PB de cette manière : MaVar.i = 55
en C/C++ : unsigned int MaVar = 55;
etc... C'est là que je bute.
Je pourrais traduire le langage intermédiaire en ASM , mais je me retrouve limité dans le maintiens et dans le développement du compilateur , pour chaque plateforme , il faut que je réécrive une partie arrière, il faut aussi tenir compte du système d'exploitation , le format PE n'est pas pareil que le format ELF sous linux.
J'ai donc pensé à utilisé FASM , comme le fait PureBasic, mais pareil , PureBasic s'interface très mal avec du code C++, il faut bidouiller avec des wrappers.
Je penche donc pour une utilisation de gcc sous linux et mingw sous windows , le pseudo code sera convertit en c++, et le langage source bénéficiera des bienfaits des bibliothèques c++ , mais peut on parlé d'un compilateur dans ce cas ? qu'en pensez vous ?
je m'explique , un compilateur à deux grande partie, la partie avant , et la partie arrière.
- La partie avant lis le code source , nettoie les commentaires , supprime l'indentation & le découpe en une liste de mot , les mots sont transformé en jeton, qui, selon sont type (numérique , alphanumérique, opérateur , mot clé , etc...) prends des valeurs différentes, ensuite , viens ensuite l'analyseur lexicale , qui lui lis tout les mots , détermine ce qu'ils défini ( variable , procédure , déclaration ) et traite les erreurs de déclarations ainsi que les commandes de préprocesseur ( #include , #ifdefined , et autre macros ), une fois tout cela ficelé , les jetons correctement formé , on les balance à l'analyseur syntaxique pour vérifié les fautes de frappes.
voila grosso modo la partie avant, il en sort une serie de jeton du type ' [VAR] [OPERATOR] [NUMBER] ' , ou chaque jeton possèdes des attributs , par exemple [NUMBER] contient la valeur numérique immédiate, [VAR] contient le nom de la variable , le numéro de ligne ou elle est déclaré , [OPERATOR] peut être '=' ou '+' suivant ces attributs , etc...
- La partie arrière , quand à elle à un pseudo langage en entré ( les jetons )
par exemple : ' [VAR] [OPERATOR] [NUMBER] '
il peut être traduit en PB de cette manière : MaVar.i = 55
en C/C++ : unsigned int MaVar = 55;
etc... C'est là que je bute.
Je pourrais traduire le langage intermédiaire en ASM , mais je me retrouve limité dans le maintiens et dans le développement du compilateur , pour chaque plateforme , il faut que je réécrive une partie arrière, il faut aussi tenir compte du système d'exploitation , le format PE n'est pas pareil que le format ELF sous linux.
J'ai donc pensé à utilisé FASM , comme le fait PureBasic, mais pareil , PureBasic s'interface très mal avec du code C++, il faut bidouiller avec des wrappers.
Je penche donc pour une utilisation de gcc sous linux et mingw sous windows , le pseudo code sera convertit en c++, et le langage source bénéficiera des bienfaits des bibliothèques c++ , mais peut on parlé d'un compilateur dans ce cas ? qu'en pensez vous ?
Re: Compilateur
Je ne crois pas non.
Selon moi, c'est plus un "langage interface", une surcouche. À la place d'un compilateur, c'est plutôt un convertisseur. J'ai longtemps moi aussi réfléchis à cette question, puisque passer par un compilateur existant autre que de l'assembleur n'est pas vraiment, selon moi, un langage à proprement parler.
Je ne sais pas si tu me comprends, mais je considère cela plutôt comme un langage de script. Pas dans le sens qu'il est moins rapide ou qu'il permet de faire moins de choses (Quoique...) mais plutôt dans le sens que cela n'est pas un langage à part entière. Un langage développé avec un autre. En tout cas, je suis nul pour expliquer, alors bonne chance dans ma lecture!
De toute façon, il va bien falloir te retaper une partie de ton code pour chaque plateforme, je ne crois pas qu'une simple condition Si/Sinon fera l'affaire, puisque en tout temps il va falloir que tu prennes en compte que Linux est sensible à la casse, Windows non, que Windows utilise des barres obliques inverses et Linux des barres obliques, que les librairies disponibles ne sont pas parfaitement identique à certains endroits à la vue des ces différences, que les dossiers ne sont pas organisés de la même façon sur ces deux plateformes, etc.
Il reste aussi Mac OS, qui ressemble un peu à du Linux (Et même beaucoup) mais c'est également un autre problème.
Bref, c'est pas de la tarte!
Je vais être franc avec toi : cet été, j'avais justement envie de me lancer dans une aventure comme celle là, excepté que moi je me concentrerai plutôt sur un plateforme spécifique au départ, c'est à dire Linux x64, en développant le tout dans une optique le plus portable possible pour, si un jour je continue, que le portage soit possible.
Sinon, au vue de ce grand travail, je me serai sûrement découragé rapidement. Tandis que sur une seule plateforme, tout va un peu plus vite. C'est ce qui m'est venus par la tête. Mais bon, tu fais comme tu veux! Et bonne chance!
Selon moi, c'est plus un "langage interface", une surcouche. À la place d'un compilateur, c'est plutôt un convertisseur. J'ai longtemps moi aussi réfléchis à cette question, puisque passer par un compilateur existant autre que de l'assembleur n'est pas vraiment, selon moi, un langage à proprement parler.
Je ne sais pas si tu me comprends, mais je considère cela plutôt comme un langage de script. Pas dans le sens qu'il est moins rapide ou qu'il permet de faire moins de choses (Quoique...) mais plutôt dans le sens que cela n'est pas un langage à part entière. Un langage développé avec un autre. En tout cas, je suis nul pour expliquer, alors bonne chance dans ma lecture!

De toute façon, il va bien falloir te retaper une partie de ton code pour chaque plateforme, je ne crois pas qu'une simple condition Si/Sinon fera l'affaire, puisque en tout temps il va falloir que tu prennes en compte que Linux est sensible à la casse, Windows non, que Windows utilise des barres obliques inverses et Linux des barres obliques, que les librairies disponibles ne sont pas parfaitement identique à certains endroits à la vue des ces différences, que les dossiers ne sont pas organisés de la même façon sur ces deux plateformes, etc.
Il reste aussi Mac OS, qui ressemble un peu à du Linux (Et même beaucoup) mais c'est également un autre problème.
Bref, c'est pas de la tarte!

Je vais être franc avec toi : cet été, j'avais justement envie de me lancer dans une aventure comme celle là, excepté que moi je me concentrerai plutôt sur un plateforme spécifique au départ, c'est à dire Linux x64, en développant le tout dans une optique le plus portable possible pour, si un jour je continue, que le portage soit possible.
Sinon, au vue de ce grand travail, je me serai sûrement découragé rapidement. Tandis que sur une seule plateforme, tout va un peu plus vite. C'est ce qui m'est venus par la tête. Mais bon, tu fais comme tu veux! Et bonne chance!

Re: Compilateur
je pense que parlé "script" est un peu réducteur , un langage intermédiaire est d'abord élaboré ainsi qu'une analyse syntaxique , gestion des symboles & gestion préprocesseur , quand aux subtilité de windows/linux concernant les adresses de fichiers , c'est la norme unix pour les 2, les antislash passe sous windows, mais le problème n'est pas là , ca c'est du pinaillage. On peut donc considéré que PB est un langage de script aussi dans ce cas , car il ne compile rien , c'est FASM qui le fait pour lui. Rien ne m'empêche aussi à la première compilation de réécrire le compilateur dans le nouveau langage de manière a ce qu'il se compile lui même ^^
en tout cas tu ne m'aide pas à prendre une décision
en tout cas tu ne m'aide pas à prendre une décision

Re: Compilateur
Désolé, je ne dit pas que c'est un langage de script, loin de là. J'ai ma propre façon de pensé!
Seulement, je crois plutôt que c'est un convertisseur. Tu ne compile rien dans le fond, tu traduit seulement ton langage vers un autre. Alors pour moi c'est un convertisseur. Oublie l'image du script!
(Quoique par définition, compiler signifie traduire vers un autre langage. Alors là, je suis ... baisé!)

Seulement, je crois plutôt que c'est un convertisseur. Tu ne compile rien dans le fond, tu traduit seulement ton langage vers un autre. Alors pour moi c'est un convertisseur. Oublie l'image du script!

(Quoique par définition, compiler signifie traduire vers un autre langage. Alors là, je suis ... baisé!)
Re: Compilateur
Bonjour G-Rom
Toujours a la pointe de la programmation.
Ce que j'en pense: Pour moi un compilateur devrait être programmer directement en langage machine (Certains le sont), mais ce n'est pas a la portée de tout le monde, et certainement difficile pour un homme seul.
Tous les autres compilateurs sont en quelques sortes des compilateurs qui utilisent un autre compilateur. C,C++, ou ASM et pourquoi pas PB. Donc a mon avis le plus sioux serait d'utilsé le plus proche du langage machine et de se fait le plus rapide l'ASM.
Tu couperas pas d'avoir une version pour chaque OS voir des mises a jours en fonction de l'évolution des OS.
Bon courage
Michel
Toujours a la pointe de la programmation.

Ce que j'en pense: Pour moi un compilateur devrait être programmer directement en langage machine (Certains le sont), mais ce n'est pas a la portée de tout le monde, et certainement difficile pour un homme seul.
Tous les autres compilateurs sont en quelques sortes des compilateurs qui utilisent un autre compilateur. C,C++, ou ASM et pourquoi pas PB. Donc a mon avis le plus sioux serait d'utilsé le plus proche du langage machine et de se fait le plus rapide l'ASM.
Tu couperas pas d'avoir une version pour chaque OS voir des mises a jours en fonction de l'évolution des OS.
Bon courage

Michel
Re: Compilateur
Ta mangé un truc Japonnais ?Cool Dji a écrit :Un converlateur ou un transcrilateur ?

C'est clair , c'est même une hérésie de nos jours. Beaucoup de compilateur sont écrit en C avec flex & bison.Pour moi un compilateur devrait être programmer directement en langage machine (Certains le sont), mais ce n'est pas a la portée de tout le monde, et certainement difficile pour un homme seul.
Je suis d'accord , mais sortir un code ASM , me pousse à prendre toute les architectures en compte , de même que l'os , tandis que si le compilateur compile du c++ , c'est transparent , je ne m'occupe pas de la taille des différents registre asm , ni même du byte code qui est différents sur chaque proc.Tu couperas pas d'avoir une version pour chaque OS voir des mises a jours en fonction de l'évolution des OS.
Re: Compilateur
je suis pas vraiment d'accords avec ce qui ce dit ici
mais , c'est surment parce que je ne comprends pas un traitre mots que ce que vous dites
du reste pour ma part , un compilateur est un prg qui transforme un code en executable !
en fait peut importe qu'un language utilise sont propre compilateur, ou utilise un compilateur Tiers
l'essentiel , etant le résultat !!
a contrario avec un interpreteur , qui lui "interprete" les lignes de codes une par une ...
la difference est clair
le terme "Script" employés par certains, depuis assez recement (dans l'histoire de la prog)
représente une façon d'appeler un code qui sera interpreté ..
voila , pour ce que je sais d'un compilateur
il analyse la syntaxe (comme un interpreteur)
il "tokenise" c'est a dire transforme le code en Pseudo_code
puis apres , transforme ce pseudo-code en code Ass, et transforme ça en Exe
en linkant les librairies, et ajout des entetes (PE..etc)
mais sinon , je n'y connais rien , mes connaissances concerne seulement les interpreteurs
mais , c'est surment parce que je ne comprends pas un traitre mots que ce que vous dites
du reste pour ma part , un compilateur est un prg qui transforme un code en executable !
en fait peut importe qu'un language utilise sont propre compilateur, ou utilise un compilateur Tiers
l'essentiel , etant le résultat !!
a contrario avec un interpreteur , qui lui "interprete" les lignes de codes une par une ...
la difference est clair

le terme "Script" employés par certains, depuis assez recement (dans l'histoire de la prog)
représente une façon d'appeler un code qui sera interpreté ..
voila , pour ce que je sais d'un compilateur
il analyse la syntaxe (comme un interpreteur)
il "tokenise" c'est a dire transforme le code en Pseudo_code
puis apres , transforme ce pseudo-code en code Ass, et transforme ça en Exe
en linkant les librairies, et ajout des entetes (PE..etc)
mais sinon , je n'y connais rien , mes connaissances concerne seulement les interpreteurs

Re: Compilateur
Je ne connais pas grand chose non plus dans les compilateurs.
Mais ce qui est sur c'est que le processeur ne connais pas de langage même peu évolué comme l'ASM donc, il y a bien un endroit ou il y a transformation en langage machine (0 ou 1) compilateur ou linker
Je me souviens plus vraiment. Mais si c'est dans le linker, alors ta réflexion G-Rom est bonne, ce sera aux fabriquants du compilateur/linker de ce mettrent a jour avec les OS a venirs et l'évolution des architectures. Ceci n'exclura pas de te mettre a jour toi aussi avec l'évolution du langage que tu auras choisi (Mots clef nouveaux ect)


Je me souviens plus vraiment. Mais si c'est dans le linker, alors ta réflexion G-Rom est bonne, ce sera aux fabriquants du compilateur/linker de ce mettrent a jour avec les OS a venirs et l'évolution des architectures. Ceci n'exclura pas de te mettre a jour toi aussi avec l'évolution du langage que tu auras choisi (Mots clef nouveaux ect)

Re: Compilateur
Donc , je pense penché pour du c++ alors.Dobro a écrit :je suis pas vraiment d'accords avec ce qui ce dit ici
mais , c'est surment parce que je ne comprends pas un traitre mots que ce que vous dites
du reste pour ma part , un compilateur est un prg qui transforme un code en executable !
en fait peut importe qu'un language utilise sont propre compilateur, ou utilise un compilateur Tiers
l'essentiel , etant le résultat !!
a contrario avec un interpreteur , qui lui "interprete" les lignes de codes une par une ...
la difference est clair
le terme "Script" employés par certains, depuis assez recement (dans l'histoire de la prog)
représente une façon d'appeler un code qui sera interpreté ..
voila , pour ce que je sais d'un compilateur
il analyse la syntaxe (comme un interpreteur)
il "tokenise" c'est a dire transforme le code en Pseudo_code
puis apres , transforme ce pseudo-code en code Ass, et transforme ça en Exe
en linkant les librairies, et ajout des entetes (PE..etc)
mais sinon , je n'y connais rien , mes connaissances concerne seulement les interpreteurs
Si tu t'y connais en interpréteurs , tu t'y connais en compilateur sans le savoir , un interpréteur c'est la partie avant d'un compilateur.
en fait , tu te sert tu pseudo code pour créer le code machine, rien de plus , en réalité c'est pas compliqué, il suffit d'avoir un peu de connaissance en ASM de connaitre le format exécutable , y a deux ans déjà , j'avais créer un petit compilateur pour Linux : http://www.purebasic.fr/french/viewtopi ... ompilateur , mais apprendre l'opcode de chaque proc me gonfle avant d'avoir commencer

C'est dans la partie arrière du compilateur , la partie arrière recois un 'pseudo code' et transforme le tout en code hexa , ensuite , suivant l'os , on push le code dans les différente section de l'executable.il y a bien un endroit ou il y a transformation en langage machine (0 ou 1) compilateur ou linker
En c++ , tout les .cpp sont transformé en .o ( code objet non executable ) , le linker lui les rassembles (avec les librairie statique / dynamique ), et fabrique l'exécutable final.
Re: Compilateur
Il me semble évident que pour crée un compilateur performant , il faut connaitre, l' assembleur...
Le code source évolué doit être converti en code asm et ce dernier, en langage machine via une compilateur asm.
C' est ce je ferai et ce que fait Fred, je pense....
Pas bien compris exactement ce que tu veux faire avec tes "termes saxons".
Le code source évolué doit être converti en code asm et ce dernier, en langage machine via une compilateur asm.
C' est ce je ferai et ce que fait Fred, je pense....
Pas bien compris exactement ce que tu veux faire avec tes "termes saxons".
Re: Compilateur
Qu'est ce que tu appelles "termes saxons" ? Si jamais je transforme mon code intermédiaire en ASM , tu me filera un coup de paluche sur le forum ?C' est ce je ferai et ce que fait Fred, je pense....
Pas bien compris exactement ce que tu veux faire avec tes "termes saxons".

Re: Compilateur
compilateur 'from scratch'G-Rom a écrit :Qu'est ce que tu appelles "termes saxons" ? Si jamais je transforme mon code intermédiaire en ASM , tu me filera un coup de paluche sur le forum ?C' est ce je ferai et ce que fait Fred, je pense....
Pas bien compris exactement ce que tu veux faire avec tes "termes saxons".

En ce moment, j' ai du temps , avec un cahier des charges précis et sans terme saxon, je peux contribuer

Re: Compilateur
'from scratch' = a partir de rien.
si t'es dispo , bonne nouvelle
en admettant que je sorte un fichier avec un langage intermédiaire de se style :
si t'es dispo , bonne nouvelle

en admettant que je sorte un fichier avec un langage intermédiaire de se style :
avec en entête une table de symboles ( qui sert pour les variables ) de se style :[VAR 0] [EQUAL] [VAR 1] [OPERATOR_MUL] [VALUE 2]
tu serais produire un code FASM à partir de ce genre d'informations ?MaVariableA | integer
MaVariableB | byte
Re: Compilateur
G-Rom a écrit :'from scratch' = a partir de rien.
Je suis bien avancé la!

quel type de code source veux tu compiler? "basic" ,"C", "nouveau truc sans terme saxon","un mouton".?