Au pire, je pensais peut être faire un langage de script pré-interprété (le script passe par un programme qui le convertie en série de byte => plus petit en mémoire, et permettant au programme qui l’exécute de comprendre directement ce qu'il doit faire. De façon à être plus rapide qu'un programme qui interprète les lignes une par une, en directe).
Exact , c'est la solution la plus crédible , si c'est bien conçu , les perfs seront similaire à du java.
le principe est celui de la partie arrière d'un quelconque compilateur.
-> "Tokenisation"
-> Contrôle erreur de syntaxe
-> Génération du byte code
La tokenisation consiste à séparé tout les mots du code source ( le script )
et à leur attribuer une valeur en fonction du mot rencontré.
durant cette phase, on sauvegarde le mot lui même , sa valeur , la ligne ou il est écrit , et le fichier dans lequel il est écrit ( ca servira pour les erreurs de syntaxe )
par exemple le script :
A=23
B = A
deviens apres la tokenisation :
A
=
23
EOL
B
=
23
Chaque mot est sauvegardé en "brut" avec le numéro de ligne , et le nom du fichier
ex:
token()\word$ = "A"
token()\line = 1
token()\script$ = "MonScript.txt"
token()\value = ????
reste à déterminé la valeur du 'token' ( jeton ) , ( avec des expression régulière par exemple )
'A' est une suite de caractère , ca peut être une variable , un nom de structure , une fonction , un mot clé réservé à ton langage de script
'=' est un opérateur
'23' est une valeur immédiate
pour le 'A' , il faut que tu arrives à déterminer ce que c'est, si ton langage de script doit déclaré toute les variables avant d'être utilisé tu pourras vérifié dans une table si le nom est déjà présent. si le mot ne comporte pas de ( ) , il y a peu de chance que ce soit une fonction , en revanche pour un tableau , il faut vérifier que A() n'existe pas déjà, sinon erreur de sémantique.
pour la valeur de chaque token , c'est toi qui attribut selon ton envie :
Opérateur :
= valeur $10
+ valeur $11
- valeur $12
* valeur $13
/ valeur $14
Pour les variables , par exemple : $20 suivi d'un index (word par exemple) sur une table de variable ( $xx $xx )
pour les valeurs immédiate qui ont un type 32 bits : $50 suivi du nombre en bytecode aussi
ta serie de token est donc pour le code plus haut :
$20 [$xx $xx] : variable suivi de l'adresse ( l'index d'un tableau (word) )
$10 opérateur égal
$50 $00 $00 $00 $17 valeur immédiate , suivi de la valeur sur 4 octets
$FF fin de l'instruction ( très important ! )
$20 [$yy $yy] : variable 'B' suivi de l'adresse ( l'index d'un tableau (word) )
$10 opérateur égal
$20 [$xx $xx] : variable 'A' suivi de l'adresse ( l'index d'un tableau (word) )
$FF fin de l'instruction ( très important ! )
c'est la première phase , ensuite viens le contrôle de l'erreur de syntaxe, tu vas voir qu'avec un byte code , c'est bien plus simple de contrôler la syntaxe.
tu n'auras pas à le faire en runtime , donc gain de performance.
l'analyseur de syntaxe est une "machine à jeton" , quand elle démarre , elle est neutre , tu peut mettre n'importe quel jeton pour la démarrer, mais attention , une fois démarré , il faut pas lui donné n'importe quel jeton , sinon , erreur de syntaxe !!
dans notre cas, notre machine reçois en premier le jeton qui contient le mot 'A' , il lit la valeur : ( $20 )
a se moment là , la machine à jeton se met dans un état qui , pour le prochain jeton , attend une valeur particulière.
le prochain jeton est $10 ( un opérateur ) , la machine se met dans un autre état et attend le prochain jeton , etc...
si le second jeton était un autre $20 ou un $FF , il y aurais eu une erreur de syntaxe, ce n'était pas un jeton attendu, et comme tu as sauvegardé la ligne du script dans le jeton et le fichier , tu peu balancer une jolie erreur de syntaxe à l'utilisateur

la machine reviens à l'état neutre dès lors quelle tombe sur une fin d'instruction.
récapitulatif de tout ca :
-> tokenisation du script
-> on vérifie les noms de variables , de tableau , si elles sont déclaré , etc...
-> on analyse la syntaxe avec la "machine à jeton"
-> on génère le byte code
Voilà, si je n'est pas été clair , dis le moi , la création de langage ne me fait pas peur
