Compilateur

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

Re: Compilateur

Message par G-Rom »

tonton a écrit :
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".?

un basic , mais la question n'est pas là , je convertit mon langage en un code intermediaire de ce style ([VAR 0] [EQUAL] [VAR 1] [OPERATOR_MUL] [VALUE 2]) , ca peut être du brain fuck , du cobol , du mouton , c'est pas le problème.

les phases sont les suivantes:

Code Source -> Nettoyage & création des jetons-> Analyse syntaxique -> Création du langage intermédiaire -> (ASM ou C++ ou directement du code machine)
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Re: Compilateur

Message par tonton »

Ce n' est pas la question, mais, fallait le dire! Un basic donc!
...aucun intérêt, de convertir en C+ qui est comme reculer pour mieux sauter.
convertir en code machine direct est idéal mais, demande une activité cérébrale hors du commun....

Je sais faire ce que tu demandes , c' est faire tous le taf!
Voila pourquoi je dis qu' il est nécessaire de maitriser l' assembleur pour un tel projet.
Si Fred ou un autre ayant conçu un compilateur passe par la pour donner un avis!
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Compilateur

Message par G-Rom »

c' est faire tous le taf!
Tu rigoles , l'analyseur syntaxique est complexe aussi , la gestions des symboles , la création du langage intermédiaire , la gestion des erreurs...
si tu sais le faire , je te questionnerais donc le moment venu sur les parties qui me rebuterons. ;)
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Re: Compilateur

Message par tonton »

Je pense que je commencerais par décomposer les lignes de code par bloc d' instruction élémentaire pour ensuite les convertir en asm.

par exemple:

a=(b*3-c)/(d+123)

b*3 mul b,3
b-c sub b,c
d+123 add d,123
b/d div b,d
a=b mov a,b
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Compilateur

Message par dayvid »

Et ba moi qui voulais me lancer dans un projet comme sa, berk
moi je fait tous avec de la recherche, je décompose la ligne, exemple:

écrire "abc"

Je recherche en premier le mot clé et ensuite suivent celui ci je regarde ce qui y a âpres
Mais la ou sa ce complique:

abc = dfv + 1 + 4 * 8 / 7 -554 - fgh / lop + 2

Trop chaut là :(

J'ai bien essayer mais jamais réussi car j'ai même pas les bases :cry:
mais je suivrai ce que vous faite car sa peut peut-être m'aider :P
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: Compilateur

Message par Fred »

Le mieux (à mon avis) actuellement c'est de faire un backend LLVM. T'as une sorte de code assembleur portable entre tous les processeurs supportés par LLVM, et tu beneficies gratuitement de leur optimiseur (qui est tres performant). GCC sous Linux a maintenant une option pour utiliser le backend LLVM et ca l'air de donner de tres bons resultats. C'est pas impossible que le Pure propose cette option un jour ou l'autre..
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Compilateur

Message par Backup »

Fred a écrit : C'est pas impossible que le Pure propose cette option un jour ou l'autre..
rectification : "une année ou l'autre" :lol:
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: Compilateur

Message par Warkering »

C'est vrai que LLVM a l'air intéressant. Je ne connaissais pas, merci de l'information! :)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Compilateur

Message par G-Rom »

Fred a écrit :Le mieux (à mon avis) actuellement c'est de faire un backend LLVM. T'as une sorte de code assembleur portable entre tous les processeurs supportés par LLVM, et tu beneficies gratuitement de leur optimiseur (qui est tres performant). GCC sous Linux a maintenant une option pour utiliser le backend LLVM et ca l'air de donner de tres bons resultats. C'est pas impossible que le Pure propose cette option un jour ou l'autre..
J'ai du mal à saisir l'utilité LLVM dans se cas , autant convertir le code source en c++ , et le donner la LLVM pour la génération du bytecode.
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: Compilateur

Message par Warkering »

Regarde ici! :)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Compilateur

Message par G-Rom »

Pour le moment un code du style :
Main.i(Argc.i,Argv.i)

; Test
; Commentaire qui sert strictement à rien ! ; Coool ; Bug ? <EOI> ;
MyVar.ui =45 ; Commentaire
Zoob.ui = 0
MyVar = 89

If MyVar = 89
ZooB = 50
Else
ZOob = 22
EndIf


For(i.f=0,i<50,i+0.01)


Next


EndMain
génère ce type de jeton :
MAIN|TYPE|i|OPARENTHESIS|INIT_VAR|0|COMMA|INIT_VAR|1|CPARENTHESIS|<EOI>|<EOI>|<EOI>|INIT_VAR|2|EQUAL|45|<EOI>|INIT_VAR|3|EQUAL|0|<EOI>|myvar|EQUAL|89|<EOI>|<EOI>|IF|myvar|EQUAL|89|<EOI>|zoob|EQUAL|50|<EOI>|ELSE|<EOI>|zoob|EQUAL|22|<EOI>|ENDIF|<EOI>|<EOI>|<EOI>|FOR|OPARENTHESIS|INIT_VAR|4|EQUAL|0|COMMA|i|SMALLER|50|COMMA|i|PLUS|0.01|CPARENTHESIS|<EOI>|<EOI>|<EOI>|NEXT|<EOI>|ENDMAIN|<EOI>
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Compilateur

Message par G-Rom »

Je retiens donc le C++ comme langage intermédiaire.
ca ne changera rien au performances je pense , je ferais un benchmark dès que j'aurais créer le 1° exécutable.
L'avantage du C++ par rapport à tous les autres langages , c'est la portabilité entre OS & ce qui m'a fait basculé
vers le c++ , c'est le NDK de google pour android , développez en basic dessus dois être le pied :D
Pour les bibliothèques tierces , il y a un choix immense...


La syntaxe finale ressemble a cela :
;
;--------------------------------
;
; ADVANCED BASIC CODE
; FOR DEV TEST
;
;
;
;
;--------------------------------
;

Class MyClass

Public

; Define constructor
Constructor MyClass()

; Define destructor
Destructor MyClass()

Method Foo(param.i)


Private

MyVar.ui
*MyChildreen.MyClass

EndClass

Constructor MyClass::MyClass()
This\MyVar = 50
This\MyChildreen = New MyClass
EndConstructor

Destructor MyClass::MyClass()

EndDestructor

Method MyClass::Foo(param.i)
This\MyVar = param
EndMethod

Structure Point
x.f
y.f
EndStructure

Main.i()

Return 1
EndMain
Les mots clé sont :
IF
ENDIF
ELSE
FOR
NEXT
WHILE
WEND
REPEAT
FOREVER
SWITCH
CASE
ENDSWITCH
UNTIL
MAIN
ENDMAIN
PROCEDURE
ENDPROCEDURE
METHOD
ENDMETHOD
CLASS
ENDCLASS
STRUCTURE
ENDSTRUCTURE
PRIVATE
PUBLIC
CONSTRUCTOR
ENDCONSTRUCTOR
DESTRUCTOR
ENDDESTRUCTOR
PARENT
VIRTUAL
NEW
DELETE
BREAK
CONTINUE
ELSEIF
GOTO
RETURN
FRIEND
END
AND
OR
NOT
XOR
ENUMERATION
ENDENUMERATION
Les types de bases:
  • C = Char
    UC = Unsigned Char
    SI = Short Int
    USI = Unsigned Short Int
    I = Int
    UI = Unsigned Int
    LI = Long Int
    ULI = Unsigned Long Int
    F = Float
    D = Double
    LD = Long Double
    B = Bool

Vouali voualou.
tout ca reste bien entendu embryonnaire pour le moment , mais ca prends forme ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Compilateur

Message par Backup »

houla , pour les types tu devrai resté Raccords avec le Standards

.b ; .w ; .L ;

ou faire comme les anciens basic ajout de # ou % Etc .. aux noms des variables ..
pour différencier les types :)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Compilateur

Message par G-Rom »

Pourquoi ?

MaVariable.i = 245, c'est un integer comme purebasic
MaByte.b = 0 , idem que PB ;)
ou faire comme les anciens basic
Justement , je veut apporté un brin de modernité au 'basic' , par l'exemple , le support des objets , un interfaçage simple avec le c/c++

edit:

Tiens , toi qui voulais du for/next avec des floats , c'est pas le top cette syntaxe ?

Code : Tout sélectionner

For(  Iteration.f=0  ,  Iteration < 50 ,  Iteration + 0.01 )

Next
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Compilateur

Message par Backup »

G-Rom a écrit : Tiens , toi qui voulais du for/next avec des floats , c'est pas le top cette syntaxe ?

Code : Tout sélectionner

For(  Iteration.f=0  ,  Iteration < 50 ,  Iteration + 0.01 )

Next
arg !! sacrilege !

sorti de cette syntaxe :

For x.f = b.f to Y.f step Z.f
next x.f

point de salut :)
Répondre