40ms de différence entre les deux. c'est pas significatif.
j'essaye d'optimiser mon code d’interprétation de script, et je cherche un peu partout ou je peux faire des optimisations
L'écriture d'un compilo me prends énormément de temps, le code que j'utilise en PB peut être utilisé pour faire un interpréteur puissant , néanmoins , cela reste un code assez complexe à comprendre.
Grosso modo , voici comment je découpe le code :
Admettons ce code ci :
MaVariable.i = 55
MonResultat.i = MaVariable * 2
via un "nettoyeur" je supprimes les espaces superflu ( chr(32) & chr(9) )
ensuite , je commence à formé des jetons (token en anglais) , chaque jeton possède une expression. le jeton est structuré de manière à connaitre la ligne ou le mot est écrit ainsi que le fichier parent ( pratique pour afficher des erreurs )
le code est décomposé de cette manière :
MaVariable.i
=
55
<EOI>
MonResultat.i
=
MaVariable
*
2
<EOI>
<EOI> désigne la fin d'une instruction , ensuite je commence une analyse lexicale , je détermine le type de chaque jetons
via des regex , ou des procédures qui me sont utiles à cette tache
Par exemple , le premier jeton , on constate que l'on déclare une variable , grâce à une table des variables , je regarde ci celle ci est déjà déclaré , si oui & avec un autre type , je colle une erreur , sinon je valide le jeton et je passe au suivant...
en sortie , j'obtiens un code lexical de ce type :
INIT_VAR|0
EQUAL
55
EOI
INIT_VAR|1
EQUAL
VAR|0
OPMUL
2
EOI
'INIT_VAR|0' désigne que j'initialise une variable qui est présente dans la table à l'index 0
EQUAL est un operateur
etc...
Ensuite je passe le code lexical à l'analyseur syntaxique , c'est lui qui me dira si il y a des erreurs de syntaxes.
si je passe à mon analyseur ( qui est une machine à état ) le jeton suivant : 'INIT_VAR|xx' , le prochain jeton attendu
dois être l'opérateur d'affectation '=' , sinon il y a une erreur de syntaxe.
une fois toute les étapes passé tu n'a plus qu'a executé ton code sans te soucier de l'analyse , puisque c'est fait en amont via les analyseurs.
un jeton peut être représenté ainsi :
Code : Tout sélectionner
structure jeton
CodeOriginal.s
LexicalCode.s
Line.i
File.s
endstructure
si cela t’intéresse , je te fournirais du code pur & dur.
@++