3.2) Le langage A2Z Basic
Le langage A2Z_Basic est inventé par mes soins, et volontairement différent de ce qui existe. D’abord pour le fun, mais aussi et surtout pour simplifier la vie au compilateur. La syntaxe ressemble à du C ou du Basic, mais en beaucoup moins riche.
Attention si vous codez
en A2Z_Basic, il existe beaucoup de contraintes qui sont là pour
faciliter la vie au compilateur.
Par
exemple, chaque instruction doit impérativement être sur une ligne
différente, y compris une fermeture d’accolade. Prenez exemple sur les
codes fournis.
Pour
mettre le résultat d’un calcul dans une variable, il faut
impérativement utiliser l’instruction « assign », là où tous les
compilateurs modernes devinent ça tout seul.
Enfin,
pour les expressions complexes (formules mathématiques, calcul de
condition), l’interpréteur d’expression n’est pas très intelligent, et
il attend obligatoirement des parenthèses pour regrouper les calculs
unitaires.
Attention,
si vous ne respectez pas ces règles, vous n’aurez pas forcément de
message d’erreur, et pourtant l’exécutable en sortie sera buggé.
Le
compilateur permet d’intégrer du langage assembleur au milieu du code
source Basic. Ca permet d’optimiser les tâches répétitives, et ça
permet de coder toutes les fonctions bas niveaux et autres drivers.
La
directive #appli_config permet de déclarer la taille maxi du code
source et des variables, et la position cible de l’exécutable en
RAM. La partie variables peut être séparée du code exécutable
via
le paramètre « separation = 2 », pour atteindre les 64ko maxi
allouables.
Limitations du langage et du
compilateur :
- Allocation mémoire statique, pas d’allocation dynamique
- Ne gère pas les fonctions récursives : une fonction ne peut pas s’appeler elle-même, directement ou indirectement, à cause de la limitation précédente
- Plage totale de variables limitée à 64ko par programme, vu les pointeurs 16bits. Mais accès à toute la plage mémoire via des instructions bas niveau.
- Tableaux à 2 dimensions maximum
- 1
seul fichier source par exécutable, pas de gestion des « include », des
librairies statique ou dynamique. Toutes les fonctions de bas niveau
utilisées doivent être directement intégrées au code source.