Giter VIP home page Giter VIP logo

info805-tp34's Introduction

TP Info805 - Compilation

Andrien MONTMAYEUR - Emilien BOITOUZET

Le but de ce TP était de générer du code assembleur à partir d'un arbre abstrait, puis d'exécuter le code généré.

Utilisation

Pour exécuter le code, commencez par exécuter la commande ./gradlew build. Cela génére les fichiers CUP et JFLEX. Ensuite, il faut exécuter le fichier main.java pour commencer à écrire le code à compiler. Pour finir le snippet de code, tapez un point et appuyez sur la touche Entrée. Cela générera l'arbre abstrait correspondant au code entré.

En voici un exemple :

let prixHt = 200;
let prixTtc = prixHt * 119 / 100 .

donne l'arbre

        prixHt
    LET
        200
PV
            prixHt
        LET
            200
    PV
            prixTtc
        LET
                    prixHt
                *
                    119
            /
                100

Pour générer le code assembleur correspondant, il faut appuyer sur les touches Ctrl + D. On obtient alors le code suivant

DATA SEGMENT
	prixHt DD
	prixTtc DD
DATA ENDS
CODE SEGMENT
	mov eax, 200
	mov prixHt, eax
	mov eax, 200
	mov prixHt, eax
	mov eax, prixHt
	push eax
	mov eax, 119
	pop ebx
	mul eax, ebx
	push eax
	mov eax, 100
	pop ebx
	div ebx, eax
	mov eax, ebx
	mov prixTtc, eax
CODE ENDS

Il ne reste plus qu'à récupérer le code généré et le coller dans le fichier pgcd.asm. On tape la commande java -jar vm-0.9.jar pgcd.asm et le fichier assembleur est exécuté. Pour aller plus loin, nous avons rajouté le traitement d'autres opérateurs tels que le while, le if then else, le moins unaire, les différents opérateurs de comparaison et les opérateurs arithmétiques basiques.

Exemples d'utilisation

let prixHt = 200;
let prixTtc = prixHt * 119 / 100;
output prixTtc .

Ce bout de code calcule le prix toutes taxes comprises d'un prix de base de 200 et l'affiche.

let a = input;
let b = input;
while (0 < b)
do (let aux=(a mod b); let a=b; let b=aux);
output a .

Ce bout de code permet de calculer le PGCD de deux nombres.

let a = input;
let b = input;
if (a > b)
then (output a)
else (output b)
endif .

Ici, on peut déterminer le plus grand de deux nombres.

info805-tp34's People

Contributors

andrienmont avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.