Compilateur

Sujets variés concernant le développement en PureBasic
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Compilateur

Message par G-Rom »

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 ?
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: Compilateur

Message par Warkering »

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! :lol:

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! :P

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! :wink:
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Compilateur

Message par G-Rom »

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 :mrgreen:
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: Compilateur

Message par Warkering »

Désolé, je ne dit pas que c'est un langage de script, loin de là. J'ai ma propre façon de pensé! :lol:
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! :roll:



(Quoique par définition, compiler signifie traduire vers un autre langage. Alors là, je suis ... baisé!)
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Compilateur

Message par Cool Dji »

Un converlateur ou un transcrilateur ?
Only PureBasic makes it possible
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Compilateur

Message par MLD »

Bonjour G-Rom

Toujours a la pointe de la programmation. :lol:
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 :lol:


Michel
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Compilateur

Message par G-Rom »

Cool Dji a écrit :Un converlateur ou un transcrilateur ?
Ta mangé un truc Japonnais ? :mrgreen:
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.
C'est clair , c'est même une hérésie de nos jours. Beaucoup de compilateur sont écrit en C avec flex & bison.
Tu couperas pas d'avoir une version pour chaque OS voir des mises a jours en fonction de l'évolution des OS.
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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Compilateur

Message par Backup »

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 :)
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Compilateur

Message par MLD »

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) :D
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Compilateur

Message par G-Rom »

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 :)
Donc , je pense penché pour du c++ alors.
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 :D
il y a bien un endroit ou il y a transformation en langage machine (0 ou 1) compilateur ou linker :?:
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.

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.
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Re: Compilateur

Message par tonton »

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".
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Compilateur

Message par G-Rom »

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".
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 ? :D
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Re: Compilateur

Message par tonton »

G-Rom a écrit :
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".
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 ? :D
compilateur 'from scratch' 8)

En ce moment, j' ai du temps , avec un cahier des charges précis et sans terme saxon, je peux contribuer :wink:
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Compilateur

Message par G-Rom »

'from scratch' = a partir de rien.
si t'es dispo , bonne nouvelle :D
en admettant que je sorte un fichier avec un langage intermédiaire de se style :
[VAR 0] [EQUAL] [VAR 1] [OPERATOR_MUL] [VALUE 2]
avec en entête une table de symboles ( qui sert pour les variables ) de se style :
MaVariableA | integer
MaVariableB | byte
tu serais produire un code FASM à partir de ce genre d'informations ?
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Re: Compilateur

Message par tonton »

G-Rom a écrit :'from scratch' = a partir de rien.

Je suis bien avancé la! :mrgreen:
quel type de code source veux tu compiler? "basic" ,"C", "nouveau truc sans terme saxon","un mouton".?
Répondre