Skip to content
This repository has been archived by the owner on Jan 7, 2025. It is now read-only.

A compiler for Python subset into assembly language

License

Notifications You must be signed in to change notification settings

Indyuce/mini-python-compiler

Repository files navigation

mini-python-compiler

A compiler for Python subset into assembly language

Setup IntelliJ

  • File > Project Structure > Librairies > Ajouter lib/java-cup-11a-runtime.jar
  • Clic-droit sur src > Mark Directory As... > Source Root
  • Clic-droit sur test > Mark Directory As... > Test Sources
  • Utiliser Java 17 en JDK
  • Créer une Run Configuration pour la classe Main, avec --debug test.py en arguments

Setup Windows

  • Télécharger MinGW32 Installer (minimalistic GNU for Windows) puis installer le compilateur
  • Pour maker les tests, utiliser mingw32-make -f .\Makefile_Windows

Tester du code assembleur généré

  • Se connecter en SSH à un ordi de la salle info
  • Compiler le code avec gcc -g -no-pie <fichier.s> -o fichier
  • Lancer le code avec GDB en utilisant gdb ./fichier

Compilation of built-in functions (unary operators, binary operators)

method %rdi %rsi
! (not) Object caller
- (neg) Object caller
+ (add) Object caller First argument
- (sub) Caller object First argument
* (mul) Caller object First argument
/ (div) Caller object First argument
% (mod) Caller object First argument

Allocating memory

Pas de call à v.malloc(int) sauf au début du programme ! Il faut utiliser v.newValue(Type, int), qui en plus d'allouer la mémoire et de setup le type identifier de notre nouvelle valeur, il empile tous les registres caller-saved. Attention aux registres %rdi et %rsi qui sont souvent utilisés et qui sont bien caller-saved !!

Registers

Autres astuces

  • Un bon compilateur C en ligne pour avoir de l'inspiration pour le code assembly : https://godbolt.org/

Possibles améliorations (non)

  • Créer un système qui permet de vérifier formellement qu'il n'y a pas de problèmes d'allocation des registres (genre quand on utilise %r10 ça vérifie au compile time qu'il est pas écrasé plus tard et qu'on a pas fait exprès)
  • Tuples python (unchangeable) ou classes

About

A compiler for Python subset into assembly language

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published