Page 2 sur 3
Re: Compilateur
Publié : jeu. 26/mai/2011 18:59
par G-Rom
tonton a écrit :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".?
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)
Re: Compilateur
Publié : jeu. 26/mai/2011 20:07
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!
Re: Compilateur
Publié : jeu. 26/mai/2011 20:20
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.

Re: Compilateur
Publié : ven. 27/mai/2011 11:42
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
Re: Compilateur
Publié : ven. 27/mai/2011 13:06
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
mais je suivrai ce que vous faite car sa peut peut-être m'aider

Re: Compilateur
Publié : ven. 27/mai/2011 16:43
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..
Re: Compilateur
Publié : ven. 27/mai/2011 16:48
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"

Re: Compilateur
Publié : ven. 27/mai/2011 19:32
par Warkering
C'est vrai que LLVM a l'air intéressant. Je ne connaissais pas, merci de l'information!

Re: Compilateur
Publié : ven. 27/mai/2011 20:56
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.
Re: Compilateur
Publié : ven. 27/mai/2011 21:05
par Warkering
Regarde
ici!

Re: Compilateur
Publié : ven. 27/mai/2011 21:36
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>
Re: Compilateur
Publié : sam. 28/mai/2011 18:20
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

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

Re: Compilateur
Publié : sam. 28/mai/2011 21:24
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

Re: Compilateur
Publié : sam. 28/mai/2011 21:58
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
Re: Compilateur
Publié : sam. 28/mai/2011 23:11
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
