SimPly est un compilateur d'un sous-ensemble très limité du langage Python vers le langage assembleur ARM.
./simply.py file.py file.S
Le fichier destination comprend :
- Le code source original
- L'arbre syntaxique au format ASCII
- Une partie compilée
- Les "fonctions" utilitaires pour
print
Exemple
Avec un d'exemple fourni :
./simply.py examples/factorial.py test.S
Sous Linux, le fichier peut alors être assemblé et exécuté avec les commandes suivantes :
- assembleur :
arm-linux-gnueabihf-gcc -ggdb3 -nostdlib -o test -static test.S
- exécution :
qemu-arm test
Tous les exemples
Pour tester tous les exemples sous Linux (nécessite l'installation de arm-linux-gnueabihf-gcc
et qemu-arm
):
./simply_test_all_examples.sh
- Type
int
:- Opérations associées :
+
,-
,*
,//
et%
(le-
unaire n'est pas reconnu) - Comparateurs :
<
,>
,<=
et>=
(non-associatifs)
- Opérations associées :
- Type
bool
:- Opérations assocées :
not
,and
,or
- Opérations assocées :
- Comparateurs
==
et!=
sur types identiques - Parenthésage
- Structures
while
etif
-elif
-else
- Affichage
print(var)
oùvar
est du typeint
oubool
- Entiers sur 32 bits
- Pas d'optimisation de la compilation
- Opérateurs bit-à-bit :
<<
,>>
,&
et|
- Chaînes de caractères
- Listes (avec restrictions de type "tableau" ?)
- Fonctions
Lors d'un premier passage, une modification du code est effectué afin d'inférer le type d'indentation utilisée et remplacer chaque indentation par une tabulation \t
, seule reconnue. Les espaces sont ignorés.
La classe SimplyLex est un "wrapper" du lexer lex. Elle permet :
- de rajouter artificiellement les tokens
INDENT
etDEDENT
, en particulier lesDEDENT
multiples qui, sinon, ne pourraient pas être ajoutés à la pile des tokens. - de garder trace du code source et de la position du lexer pour chaque token rencontré, afin de pouvoir réaliser une coloration syntaxique du code.
La racine de l'arbre est un objet de type ASTRoot
.