le soucis c'est que si ton code a parser comporte des erreurs de syntaxe, tu sera incapable de dire sur quelle ligne , ou , quoi.
Il faut que :
- Tu ignores les commentaire de ton script
- Tu stockes tout tes mots "brut" dans une liste , chaque mot possède 3 attributs important : le mot brut , la ligne ou il écrit , le nom du fichier
- A partir de la liste brute , tu détermine les symbole de chaque mot
- Tu appliques les instruction préprocesseur ( si tu en as ) macro , include , constante , etc...
- Tu créer les différentes table ( variable , nom des fontions , etc... )
- A ce stade , tout les symboles sont identifié ( variable , fonction , nombre , opérateur , etc... )
- Tu fait ton analyse syntaxique ( symbole inconnu = erreur )
- Tu fait ton analyse lexicale ( 2 symbole qui ne doivent pas être contiguë )
- Si il y a une erreur , tu as juste à lire à partir du symbole qui pose problème , ses attributs , et affiché un message d'erreur cohérent.
- Tu peu généré un byte-code maison pour chaque symbole
A ce stade , tu as un byte code (code intermédiaire) propre et sans erreur, c'est ce que l'on appelle une partie arrière d'un compilateur.
Ton byte code peu être de se style pour le code suivant :
MyVarA As integer
MyVarB As integer
MyVarA = 45
MyVarB = MyVarA * 2
le byte code :
;MyVarA = 45
$DD000000 ; Cherche dans table variable
$00000001 ; MyVarA ( position 1 )
$000000FF ; Operateur =
$FF000000 ; Valeur immédiate
$0000002D ; 45
$FFFFFFFF ; Fin instruction
;MyVarB = MyVarA * 2
$DD000000 ; Cherche dans table variable
$00000002 ; MyVarB ( position 2 dans table )
$000000FF ; Operateur =
$DD000000 ; Cherche dans table variable
$00000001 ; MyVarA
$000000FE ; Operateur *
$FF000000 ; Valeur immédiate
$00000002 ; 2
C'est un exemple, mais à partir de ce byte code , tu as une multitude d'options pour la suite :
- convertir ton byte code dans un autre langage
- créer du code pour un os/processeur spécifique
- créer une machine virtuelle ( un interpréteur )
Pour ton cas, c'est la solution numéro 3. ton byte code pourra être dans un fichier , en mémoire , etc...
Si tu as compris le principe du byte code, ce sera du gâteau à interprété , la correction du code à été faite en amont, on part donc du principe que le byte code est correct, l’exécution sera donc proche d'un exécutable natif.
Il ne faut pas se leurré , c'est une tâche difficile surtout l'analyse d'erreur, mais c'est faisable.
