From 4841633f925156c558340719c885158c1a3785dd Mon Sep 17 00:00:00 2001 From: Xawirses Date: Tue, 19 Apr 2016 11:58:53 +0200 Subject: [PATCH] EVAL FINAL ESAYYYYYYY --- eval-final-projet/input.cond/eval13-err.l | 4 + eval-final-projet/input.cond/eval25.l | 6 + eval-final-projet/input.cond/eval26.l | 11 + eval-final-projet/input.cond/eval27.l | 6 + .../input/{eval20.l.d => eval20.l} | 0 eval-final-projet/output/eval1.synt | 150 +- eval-final-projet/output/eval10.synt | 172 +- eval-final-projet/output/eval11.synt | 198 +- eval-final-projet/output/eval12.synt | 152 +- eval-final-projet/output/eval13-err.synt.xml | 0 eval-final-projet/output/eval13.synt | 205 +- eval-final-projet/output/eval14.synt | 627 +--- eval-final-projet/output/eval15.synt | 221 +- eval-final-projet/output/eval16.synt | 150 +- eval-final-projet/output/eval17.synt | 297 +- eval-final-projet/output/eval18.synt | 509 +--- eval-final-projet/output/eval19.mips | 4 + eval-final-projet/output/eval19.synt | 130 +- eval-final-projet/output/eval2.synt | 376 +-- eval-final-projet/output/eval20.mips | 7 +- eval-final-projet/output/eval20.synt | 563 +--- eval-final-projet/output/eval21.synt | 490 +-- eval-final-projet/output/eval22.synt | 956 ++---- eval-final-projet/output/eval23.mips | 2 +- eval-final-projet/output/eval23.synt | 185 +- eval-final-projet/output/eval24.mips | 18 +- eval-final-projet/output/eval24.synt | 579 ++-- eval-final-projet/output/eval25.asynt | 33 + eval-final-projet/output/eval25.lex | 26 + eval-final-projet/output/eval25.mips | 70 + eval-final-projet/output/eval25.synt | 70 + eval-final-projet/output/eval25.tab | 6 + eval-final-projet/output/eval26.asynt | 126 + eval-final-projet/output/eval26.lex | 79 + eval-final-projet/output/eval26.mips | 255 ++ eval-final-projet/output/eval26.synt | 255 ++ eval-final-projet/output/eval26.tab | 9 + eval-final-projet/output/eval27.asynt | 52 + eval-final-projet/output/eval27.lex | 49 + eval-final-projet/output/eval27.mips | 160 + eval-final-projet/output/eval27.synt | 160 + eval-final-projet/output/eval27.tab | 5 + eval-final-projet/output/eval3.synt | 119 +- eval-final-projet/output/eval4.synt | 659 +--- eval-final-projet/output/eval5.synt | 2673 ++++------------- eval-final-projet/output/eval6.synt | 150 +- eval-final-projet/output/eval7.synt | 142 +- eval-final-projet/output/eval8.synt | 183 +- eval-final-projet/output/eval9.synt | 138 +- eval-final-projet/testAll.sh | 2 +- header/analyseur_syntaxyque.h | 3 +- header/symboles.h | 10 +- header/syntabs.h | 6 +- src/affiche_arbre_abstrait.c | 5 + src/analyseur_lexical.c | 8 +- src/analyseur_syntaxyque.c | 71 +- src/parcours.c | 62 +- src/premiers.c | 12 +- src/suivants.c | 46 + src/syntabs.c | 3 +- 60 files changed, 4031 insertions(+), 7634 deletions(-) create mode 100644 eval-final-projet/input.cond/eval13-err.l create mode 100644 eval-final-projet/input.cond/eval25.l create mode 100644 eval-final-projet/input.cond/eval26.l create mode 100644 eval-final-projet/input.cond/eval27.l rename eval-final-projet/input/{eval20.l.d => eval20.l} (100%) create mode 100644 eval-final-projet/output/eval13-err.synt.xml create mode 100644 eval-final-projet/output/eval25.asynt create mode 100644 eval-final-projet/output/eval25.lex create mode 100644 eval-final-projet/output/eval25.mips create mode 100644 eval-final-projet/output/eval25.tab create mode 100644 eval-final-projet/output/eval26.asynt create mode 100644 eval-final-projet/output/eval26.lex create mode 100644 eval-final-projet/output/eval26.mips create mode 100644 eval-final-projet/output/eval26.synt create mode 100644 eval-final-projet/output/eval26.tab create mode 100644 eval-final-projet/output/eval27.asynt create mode 100644 eval-final-projet/output/eval27.lex create mode 100644 eval-final-projet/output/eval27.mips create mode 100644 eval-final-projet/output/eval27.synt create mode 100644 eval-final-projet/output/eval27.tab diff --git a/eval-final-projet/input.cond/eval13-err.l b/eval-final-projet/input.cond/eval13-err.l new file mode 100644 index 0000000..9c1bfc9 --- /dev/null +++ b/eval-final-projet/input.cond/eval13-err.l @@ -0,0 +1,4 @@ +main() +{ + ecrire( 1 ? 0 ? 1 : 1 ? 0 ); +} diff --git a/eval-final-projet/input.cond/eval25.l b/eval-final-projet/input.cond/eval25.l new file mode 100644 index 0000000..67ae97e --- /dev/null +++ b/eval-final-projet/input.cond/eval25.l @@ -0,0 +1,6 @@ +entier $a; +main() +{ + $a = lire(); + ecrire( $a < 10 ? 0 : 1); +} diff --git a/eval-final-projet/input.cond/eval26.l b/eval-final-projet/input.cond/eval26.l new file mode 100644 index 0000000..67e433f --- /dev/null +++ b/eval-final-projet/input.cond/eval26.l @@ -0,0 +1,11 @@ +main() +entier $temp, entier $g, entier $l, entier $v; +{ + $temp = lire(); # temperature de l'eau + $g = $temp < 0 | $temp = 0 ? 1 : 0; # glace ? + $l = $temp < 100 & 0 < $temp ? 1 : 0; # liquide ? + $v = !$g & !$l ? 1 : 0; # vapeur ? + ecrire($g); + ecrire($l); + ecrire($v); +} diff --git a/eval-final-projet/input.cond/eval27.l b/eval-final-projet/input.cond/eval27.l new file mode 100644 index 0000000..b07dadc --- /dev/null +++ b/eval-final-projet/input.cond/eval27.l @@ -0,0 +1,6 @@ +main() +{ + ecrire( 1 ? 0 : 1 ? 0 : 1 ); + ecrire( ( 1 ? 0 : 1 ) ? 0 : 1 ); + ecrire( 1 ? 0 : ( 1 ? 0 : 1 ) ); +} diff --git a/eval-final-projet/input/eval20.l.d b/eval-final-projet/input/eval20.l similarity index 100% rename from eval-final-projet/input/eval20.l.d rename to eval-final-projet/input/eval20.l diff --git a/eval-final-projet/output/eval1.synt b/eval-final-projet/output/eval1.synt index 038df30..5f5f8c0 100644 --- a/eval-final-projet/output/eval1.synt +++ b/eval-final-projet/output/eval1.synt @@ -1,113 +1,37 @@ - - - - - entier - $a - - - - - - - POINT_VIRGULE - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - $a - - - - EGAL - - - - - - - - 1 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - $a - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +$$a: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$a +lw $t0, $$a +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval10.synt b/eval-final-projet/output/eval10.synt index 5a20a3e..870d3f4 100644 --- a/eval-final-projet/output/eval10.synt +++ b/eval-final-projet/output/eval10.synt @@ -1,118 +1,54 @@ - - - - - - procedure - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - retour - - - - - - - - 1 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - procedure - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - +.data +.text +__start: +jal main +li $v0, 10 +syscall +procedure : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0 4($fp) #Adresse de retour +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +jr $ra +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 #Val Retour +jal procedure +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval11.synt b/eval-final-projet/output/eval11.synt index 9147791..649b873 100644 --- a/eval-final-projet/output/eval11.synt +++ b/eval-final-projet/output/eval11.synt @@ -1,146 +1,52 @@ - - - - - - procedure - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - entier - $a - - - - - - - POINT_VIRGULE - - - ACCOLADE_OUVRANTE - - - - - $a - - - - EGAL - - - - - - - - 1 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - $a - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - procedure - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - +.data +.text +__start: +jal main +li $v0, 10 +syscall +procedure : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 4 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 #Val Retour +jal procedure +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval12.synt b/eval-final-projet/output/eval12.synt index c855a07..19de312 100644 --- a/eval-final-projet/output/eval12.synt +++ b/eval-final-projet/output/eval12.synt @@ -1,112 +1,40 @@ - - - - - entier - $a - - - - - - - POINT_VIRGULE - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - si - - - - - - - - 1 - - - - - - - - - - - - - - - - - - alors - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 1 - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +$$a: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $zero e0 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +j e1 +e0: +e1: +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval13-err.synt.xml b/eval-final-projet/output/eval13-err.synt.xml new file mode 100644 index 0000000..e69de29 diff --git a/eval-final-projet/output/eval13.synt b/eval-final-projet/output/eval13.synt index f049cf1..4b91b0c 100644 --- a/eval-final-projet/output/eval13.synt +++ b/eval-final-projet/output/eval13.synt @@ -1,154 +1,51 @@ - - - - - entier - $a - - - - - - - POINT_VIRGULE - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - si - - - - - - - - 0 - - - - - - - - - - - - - - - - - - alors - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 1 - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - sinon - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 0 - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +$$a: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $zero e0 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +j e1 +e0: +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +e1: +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval14.synt b/eval-final-projet/output/eval14.synt index d0d0c20..04753b1 100644 --- a/eval-final-projet/output/eval14.synt +++ b/eval-final-projet/output/eval14.synt @@ -1,487 +1,140 @@ - - - - - entier - $tab - - CROCHET_OUVRANT - 10 - CROCHET_FERMANT - - - - - - POINT_VIRGULE - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - entier - $a - - - - - - - POINT_VIRGULE - - - ACCOLADE_OUVRANTE - - - - - $a - - - - EGAL - - - - - - - - 0 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - tantque - - - - - - - - - $a - - - - - - - - - - - - INFERIEUR - - - - 10 - - - - - - - - - - - - - - - - - - - faire - - ACCOLADE_OUVRANTE - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - - $a - - - - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - - $a - - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $a - - - - EGAL - - - - - - - - - $a - - - - - - - - - PLUS - - - 1 - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - - - - $a - - - - EGAL - - - - - - - - 0 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - tantque - - - - - - - - - $a - - - - - - - - - - - - INFERIEUR - - - - 10 - - - - - - - - - - - - - - - - - - - faire - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - - $a - - - - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - - $a - - - - EGAL - - - - - - - - - $a - - - - - - - - - PLUS - - - 1 - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +$$tab: .space 40 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +e0: +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 10 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e2 +li $t0, 0 +e2: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $0 e1 +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +j e0 +e1: +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +e3: +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 10 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e5 +li $t0, 0 +e5: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $0 e4 +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, $$tab($t4) +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +j e3 +e4: +addi $sp, $sp 4 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval15.synt b/eval-final-projet/output/eval15.synt index f09da36..39381b4 100644 --- a/eval-final-projet/output/eval15.synt +++ b/eval-final-projet/output/eval15.synt @@ -1,170 +1,51 @@ - - - - - entier - $tab - - CROCHET_OUVRANT - 10 - CROCHET_FERMANT - - - - - - POINT_VIRGULE - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 4 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - 4 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 4 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +$$tab: .space 40 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 4 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 4 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +li $t0, 4 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, $$tab($t4) +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval16.synt b/eval-final-projet/output/eval16.synt index 7dcd9b3..28928f9 100644 --- a/eval-final-projet/output/eval16.synt +++ b/eval-final-projet/output/eval16.synt @@ -1,110 +1,40 @@ - - - - - entier - $a - - - - - - - POINT_VIRGULE - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - tantque - - - - - - - - 0 - - - - - - - - - - - - - - - - - - faire - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 1 - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +$$a: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +e0: +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $0 e1 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +j e0 +e1: +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval17.synt b/eval-final-projet/output/eval17.synt index 812c711..66b00b6 100644 --- a/eval-final-projet/output/eval17.synt +++ b/eval-final-projet/output/eval17.synt @@ -1,222 +1,75 @@ - - - - - entier - $a - - - - - - - POINT_VIRGULE - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - $a - - - - EGAL - - - - - - - - 0 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - tantque - - - - - - - - - $a - - - - - - - - - - - - INFERIEUR - - - - 10 - - - - - - - - - - - - - - - - - - - faire - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - $a - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - - $a - - - - EGAL - - - - - - - - - $a - - - - - - - - - PLUS - - - 1 - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +$$a: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$a +e0: +lw $t0, $$a +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 10 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e2 +li $t0, 0 +e2: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $0 e1 +lw $t0, $$a +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +lw $t0, $$a +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$a +j e0 +e1: +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval18.synt b/eval-final-projet/output/eval18.synt index 0adb6ca..aa464a5 100644 --- a/eval-final-projet/output/eval18.synt +++ b/eval-final-projet/output/eval18.synt @@ -1,401 +1,108 @@ - - - - - entier - $t0 - - - - - VIRGULE - - entier - $t1 - - - - - VIRGULE - - entier - $123 - - - - - VIRGULE - - entier - $ - - - - - VIRGULE - - entier - $$ - - - - - VIRGULE - - entier - $$$ - - - - - VIRGULE - - entier - $f - - - - - VIRGULE - - entier - $_ - - - - - - - - - - - - - - POINT_VIRGULE - - - - f - - PARENTHESE_OUVRANTE - - - - entier - $$ - - - - - - - - PARENTHESE_FERMANTE - - - - - entier - $$$ - - - - - VIRGULE - - entier - $f - - - - - VIRGULE - - entier - $_ - - - - - - - - - POINT_VIRGULE - - - ACCOLADE_OUVRANTE - - - - - $ - - - - EGAL - - - - - - - - - $123 - - - - - - - - - PLUS - - - - $_ - - - - - - - - - PLUS - - - - $$ - - - - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - $ - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - $t0 - - - - EGAL - - - - - - - - 1 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $123 - - - - EGAL - - - - - - - - - $t0 - - - - - - - - - PLUS - - - 0 - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - f - PARENTHESE_OUVRANTE - - - - - - - - - - $123 - - - - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - POINT_VIRGULE - - - - - - - - ACCOLADE_FERMANTE - - - - - - - +.data +$$t0: .space 4 +$$t1: .space 4 +$$123: .space 4 +$$: .space 4 +$$$: .space 4 +$$$$: .space 4 +$$f: .space 4 +$$_: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +f : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 +subi $sp, $sp, 4 +subi $sp, $sp, 4 +lw $t0, $$123 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, -16($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 4($fp) #variable argument $$ +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$ +lw $t0, $$ +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 12 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$t0 +lw $t0, $$t0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$123 +subi $sp, $sp, 4 #Val Retour +lw $t0, $$123 +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal f +addi $sp, $sp, 4 #désalocation des arguments +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval19.mips b/eval-final-projet/output/eval19.mips index 4c3f4c9..70547f5 100644 --- a/eval-final-projet/output/eval19.mips +++ b/eval-final-projet/output/eval19.mips @@ -16,11 +16,15 @@ sw $t0, 0($sp) lw $t1, 0($sp) addi $sp, $sp, 4 beq $zero, $t1, e1 +subi $sp, $sp, 4 +sw $t1, 0($sp) li $t0, 2 subi $sp, $sp, 4 sw $t0, 0($sp) lw $t2, 0($sp) addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 beq $zero, $t2, e1 and $t0, $t1, $t2 j e0 diff --git a/eval-final-projet/output/eval19.synt b/eval-final-projet/output/eval19.synt index 3f15bda..70547f5 100644 --- a/eval-final-projet/output/eval19.synt +++ b/eval-final-projet/output/eval19.synt @@ -1,80 +1,50 @@ - - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 1 - - - - - - - - - - - - - ET - - - - - - 2 - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e1 +subi $sp, $sp, 4 +sw $t1, 0($sp) +li $t0, 2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t2, e1 +and $t0, $t1, $t2 +j e0 + e1 : +li $t0 0 + e0 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval2.synt b/eval-final-projet/output/eval2.synt index c3cf0f2..56e0446 100644 --- a/eval-final-projet/output/eval2.synt +++ b/eval-final-projet/output/eval2.synt @@ -1,283 +1,93 @@ - - - - - entier - $i - - - - - VIRGULE - - entier - $carre - - - - - - - - POINT_VIRGULE - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - $i - - - - EGAL - - - - - - - - 0 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - tantque - - - - - - - - - $i - - - - - - - - - - - - INFERIEUR - - - - 10 - - - - - - - - - - - - - - - - - - - faire - - ACCOLADE_OUVRANTE - - - - - $carre - - - - EGAL - - - - - - - - - $i - - - - - - FOIS - - - $i - - - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - $carre - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - - $i - - - - EGAL - - - - - - - - - $i - - - - - - - - - PLUS - - - 1 - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - - ACCOLADE_FERMANTE - - - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +$$i: .space 4 +$$carre: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$i +e0: +lw $t0, $$i +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 10 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e2 +li $t0, 0 +e2: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $0 e1 +lw $t0, $$i +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, $$i +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +mult $t1, $t2 +mflo $t0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$carre +lw $t0, $$carre +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +lw $t0, $$i +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$i +j e0 +e1: +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval20.mips b/eval-final-projet/output/eval20.mips index 0cf87dd..fb89e6a 100644 --- a/eval-final-projet/output/eval20.mips +++ b/eval-final-projet/output/eval20.mips @@ -49,11 +49,10 @@ subi $sp, $sp, 4 sw $t0, 0($sp) lw $t2, 0($sp) addi $sp, $sp, 4 -e2 : -or $t0, $t1, $t2 +or $t0, $zero, $t2 j e3 -e1 : -or $t0, $t1, $t2 +e2 : +move $t0 $t1 e3 : subi $sp, $sp, 4 sw $t0, 0($sp) diff --git a/eval-final-projet/output/eval20.synt b/eval-final-projet/output/eval20.synt index 8c37de9..fb89e6a 100644 --- a/eval-final-projet/output/eval20.synt +++ b/eval-final-projet/output/eval20.synt @@ -1,408 +1,155 @@ - - - - - - fact - - PARENTHESE_OUVRANTE - - - - entier - $f - - - - - - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - si - - - - - - - - - $f - - - - - - - - - - - - EGAL - - - - 1 - - - - - - - - - - - - - - - - - OU - - - - - - - - $f - - - - - - - - - - - - EGAL - - - - 0 - - - - - - - - - - - - - - - - - - - - alors - - ACCOLADE_OUVRANTE - - - - retour - - - - - - - - 1 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - sinon - - ACCOLADE_OUVRANTE - - - - retour - - - - - - - - - fact - PARENTHESE_OUVRANTE - - - - - - - - - - $f - - - - - - - - - MOINS - - - 1 - - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - - - FOIS - - - $f - - - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - - ACCOLADE_FERMANTE - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - entier - $a - - - - - - - POINT_VIRGULE - - - ACCOLADE_OUVRANTE - - - - - $a - - - - EGAL - - - - - - - - lire - PARENTHESE_OUVRANTE - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - fact - PARENTHESE_OUVRANTE - - - - - - - - - - $a - - - - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - - - +.data +.text +__start: +jal main +li $v0, 10 +syscall +fact : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +lw $t0, 4($fp) #variable argument $f +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +beq $t1, $t2 e4 +li $t0, 0 +e4: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e0 +j e2 +e0 : +lw $t0, 4($fp) #variable argument $f +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +beq $t1, $t2 e5 +li $t0, 0 +e5: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +or $t0, $zero, $t2 +j e3 +e2 : +move $t0 $t1 +e3 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $zero e6 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0 8($fp) #Adresse de retour +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +jr $ra +j e7 +e6: +subi $sp, $sp, 4 #Val Retour +lw $t0, 4($fp) #variable argument $f +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +sub $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal fact +addi $sp, $sp, 4 #désalocation des arguments +lw $t0, 4($fp) #variable argument $f +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +mult $t1, $t2 +mflo $t0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0 8($fp) #Adresse de retour +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +jr $ra +e7: +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 #Val Retour +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal fact +addi $sp, $sp, 4 #désalocation des arguments +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 4 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval21.synt b/eval-final-projet/output/eval21.synt index 1ca6407..7d118aa 100644 --- a/eval-final-projet/output/eval21.synt +++ b/eval-final-projet/output/eval21.synt @@ -1,360 +1,130 @@ - - - - - - fibo - - PARENTHESE_OUVRANTE - - - - entier - $n - - - - - - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - si - - - - - - - - - $n - - - - - - - - - - - - INFERIEUR - - - - 2 - - - - - - - - - - - - - - - - - - - alors - - ACCOLADE_OUVRANTE - - - - retour - - - - - - - - 1 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - sinon - - ACCOLADE_OUVRANTE - - - - retour - - - - - - - - - fibo - PARENTHESE_OUVRANTE - - - - - - - - - - $n - - - - - - - - - MOINS - - - 1 - - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - - - - - - PLUS - - - - fibo - PARENTHESE_OUVRANTE - - - - - - - - - - $n - - - - - - - - - MOINS - - - 2 - - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - - ACCOLADE_FERMANTE - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - fibo - PARENTHESE_OUVRANTE - - - - - - - - - lire - PARENTHESE_OUVRANTE - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - +.data +.text +__start: +jal main +li $v0, 10 +syscall +fibo : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +lw $t0, 4($fp) #variable argument $n +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e0 +li $t0, 0 +e0: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $zero e1 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0 8($fp) #Adresse de retour +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +jr $ra +j e2 +e1: +subi $sp, $sp, 4 #Val Retour +lw $t0, 4($fp) #variable argument $n +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +sub $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal fibo +addi $sp, $sp, 4 #désalocation des arguments +subi $sp, $sp, 4 #Val Retour +lw $t0, 4($fp) #variable argument $n +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +sub $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal fibo +addi $sp, $sp, 4 #désalocation des arguments +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0 8($fp) #Adresse de retour +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +jr $ra +e2: +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 #Val Retour +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal fibo +addi $sp, $sp, 4 #désalocation des arguments +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval22.synt b/eval-final-projet/output/eval22.synt index 9f90605..89fd3f8 100644 --- a/eval-final-projet/output/eval22.synt +++ b/eval-final-projet/output/eval22.synt @@ -1,759 +1,197 @@ - - - - - entier - $a - - - - - VIRGULE - - entier - $b - - - - - - - - POINT_VIRGULE - - - - pgcd - - PARENTHESE_OUVRANTE - - - - entier - $a - - - - - VIRGULE - - entier - $b - - - - - - - - - PARENTHESE_FERMANTE - - - - - entier - $c - - - - - - - POINT_VIRGULE - - - ACCOLADE_OUVRANTE - - - - - $c - - - - EGAL - - - - - - - - - $a - - - - - - - - - MOINS - - - PARENTHESE_OUVRANTE - - - - - - - - - $a - - - - - - DIVISE - - - $b - - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - - FOIS - - - $b - - - - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - si - - - - - - - - - $c - - - - - - - - - - - - EGAL - - - - 0 - - - - - - - - - - - - - - - - - - - alors - - ACCOLADE_OUVRANTE - - - - retour - - - - - - - - - $b - - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - sinon - - ACCOLADE_OUVRANTE - - - - retour - - - - - - - - - pgcd - PARENTHESE_OUVRANTE - - - - - - - - - - $b - - - - - - - - - - - - - - - - - - - - - - VIRGULE - - - - - - - - - $c - - - - - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - - - ACCOLADE_FERMANTE - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - $a - - - - EGAL - - - - - - - - lire - PARENTHESE_OUVRANTE - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $b - - - - EGAL - - - - - - - - lire - PARENTHESE_OUVRANTE - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - si - - - - - - - - - $b - - - - - - - - - - - - INFERIEUR - - - - - $a - - - - - - - - - - - - - - - - - - - - - - alors - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - pgcd - PARENTHESE_OUVRANTE - - - - - - - - - - $a - - - - - - - - - - - - - - - - - - - - - - VIRGULE - - - - - - - - - $b - - - - - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - sinon - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - pgcd - PARENTHESE_OUVRANTE - - - - - - - - - - $b - - - - - - - - - - - - - - - - - - - - - - VIRGULE - - - - - - - - - $a - - - - - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - - - - ACCOLADE_FERMANTE - - - - - - - +.data +$$a: .space 4 +$$b: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +pgcd : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 +lw $t0, 8($fp) #variable argument $a +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 8($fp) #variable argument $a +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 4($fp) #variable argument $b +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +div $t1, $t2 +mflo $t0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 4($fp) #variable argument $b +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +mult $t1, $t2 +mflo $t0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +sub $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +beq $t1, $t2 e0 +li $t0, 0 +e0: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $zero e1 +lw $t0, 4($fp) #variable argument $b +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0 12($fp) #Adresse de retour +addi $sp, $sp 4 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +jr $ra +j e2 +e1: +subi $sp, $sp, 4 #Val Retour +lw $t0, 4($fp) #variable argument $b +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal pgcd +addi $sp, $sp, 8 #désalocation des arguments +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0 12($fp) #Adresse de retour +addi $sp, $sp 4 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +jr $ra +e2: +addi $sp, $sp 4 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$a +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$b +lw $t0, $$b +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, $$a +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e3 +li $t0, 0 +e3: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $zero e4 +subi $sp, $sp, 4 #Val Retour +lw $t0, $$a +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, $$b +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal pgcd +addi $sp, $sp, 8 #désalocation des arguments +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +j e5 +e4: +subi $sp, $sp, 4 #Val Retour +lw $t0, $$b +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, $$a +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal pgcd +addi $sp, $sp, 8 #désalocation des arguments +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +e5: +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval23.mips b/eval-final-projet/output/eval23.mips index 11fffbc..c108de2 100644 --- a/eval-final-projet/output/eval23.mips +++ b/eval-final-projet/output/eval23.mips @@ -25,7 +25,7 @@ subi $sp, $sp, 4 sw $t0, 0($sp) lw $t2, 0($sp) addi $sp, $sp, 4 -or $t0, $t1, $t2 +or $t0, $zero, $t2 j e3 e2 : move $t0 $t1 diff --git a/eval-final-projet/output/eval23.synt b/eval-final-projet/output/eval23.synt index 08c8ac7..c108de2 100644 --- a/eval-final-projet/output/eval23.synt +++ b/eval-final-projet/output/eval23.synt @@ -1,127 +1,58 @@ - - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - si - - - - - - - - 1 - - - - - - - - - - - - - - - - OU - - - - - - - lire - PARENTHESE_OUVRANTE - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - alors - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 5 - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e0 +j e2 +e0 : +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +or $t0, $zero, $t2 +j e3 +e2 : +move $t0 $t1 +e3 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $zero e4 +li $t0, 5 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +j e5 +e4: +e5: +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval24.mips b/eval-final-projet/output/eval24.mips index c010107..0fe2b31 100644 --- a/eval-final-projet/output/eval24.mips +++ b/eval-final-projet/output/eval24.mips @@ -23,7 +23,7 @@ subi $sp, $sp, 4 sw $t0, 0($sp) lw $t2, 0($sp) addi $sp, $sp, 4 -or $t0, $t1, $t2 +or $t0, $zero, $t2 j e3 e2 : move $t0 $t1 @@ -44,11 +44,15 @@ sw $t0, 0($sp) lw $t1, 0($sp) addi $sp, $sp, 4 beq $zero, $t1, e5 +subi $sp, $sp, 4 +sw $t1, 0($sp) li $t0, 6 subi $sp, $sp, 4 sw $t0, 0($sp) lw $t2, 0($sp) addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 beq $zero, $t2, e5 and $t0, $t1, $t2 j e4 @@ -80,7 +84,7 @@ subi $sp, $sp, 4 sw $t0, 0($sp) lw $t2, 0($sp) addi $sp, $sp, 4 -or $t0, $t1, $t2 +or $t0, $zero, $t2 j e9 e8 : move $t0 $t1 @@ -101,6 +105,8 @@ sw $t0, 0($sp) lw $t1, 0($sp) addi $sp, $sp, 4 beq $zero, $t1, e11 +subi $sp, $sp, 4 +sw $t1, 0($sp) li $v0 5 syscall move $t0, $v0 @@ -108,6 +114,8 @@ subi $sp, $sp, 4 sw $t0, 0($sp) lw $t2, 0($sp) addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 beq $zero, $t2, e11 and $t0, $t1, $t2 j e10 @@ -139,7 +147,7 @@ subi $sp, $sp, 4 sw $t0, 0($sp) lw $t2, 0($sp) addi $sp, $sp, 4 -or $t0, $t1, $t2 +or $t0, $zero, $t2 j e15 e14 : move $t0 $t1 @@ -160,6 +168,8 @@ sw $t0, 0($sp) lw $t1, 0($sp) addi $sp, $sp, 4 beq $zero, $t1, e17 +subi $sp, $sp, 4 +sw $t1, 0($sp) li $v0 5 syscall move $t0, $v0 @@ -167,6 +177,8 @@ subi $sp, $sp, 4 sw $t0, 0($sp) lw $t2, 0($sp) addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 beq $zero, $t2, e17 and $t0, $t1, $t2 j e16 diff --git a/eval-final-projet/output/eval24.synt b/eval-final-projet/output/eval24.synt index d08fc77..0fe2b31 100644 --- a/eval-final-projet/output/eval24.synt +++ b/eval-final-projet/output/eval24.synt @@ -1,375 +1,204 @@ - - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 3 - - - - - - - - - - - - - - - - OU - - - - - - - 4 - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 3 - - - - - - - - - - - - - ET - - - - - - 6 - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 3 - - - - - - - - - - - - - - - - OU - - - - - - - lire - PARENTHESE_OUVRANTE - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 3 - - - - - - - - - - - - - ET - - - - - - lire - PARENTHESE_OUVRANTE - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 0 - - - - - - - - - - - - - - - - OU - - - - - - - lire - PARENTHESE_OUVRANTE - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 0 - - - - - - - - - - - - - ET - - - - - - lire - PARENTHESE_OUVRANTE - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 3 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e0 +j e2 +e0 : +li $t0, 4 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +or $t0, $zero, $t2 +j e3 +e2 : +move $t0 $t1 +e3 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +li $t0, 3 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e5 +subi $sp, $sp, 4 +sw $t1, 0($sp) +li $t0, 6 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t2, e5 +and $t0, $t1, $t2 +j e4 + e5 : +li $t0 0 + e4 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +li $t0, 3 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e6 +j e8 +e6 : +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +or $t0, $zero, $t2 +j e9 +e8 : +move $t0 $t1 +e9 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +li $t0, 3 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e11 +subi $sp, $sp, 4 +sw $t1, 0($sp) +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t2, e11 +and $t0, $t1, $t2 +j e10 + e11 : +li $t0 0 + e10 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e12 +j e14 +e12 : +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +or $t0, $zero, $t2 +j e15 +e14 : +move $t0 $t1 +e15 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e17 +subi $sp, $sp, 4 +sw $t1, 0($sp) +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t2, e17 +and $t0, $t1, $t2 +j e16 + e17 : +li $t0 0 + e16 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval25.asynt b/eval-final-projet/output/eval25.asynt new file mode 100644 index 0000000..0c1876f --- /dev/null +++ b/eval-final-projet/output/eval25.asynt @@ -0,0 +1,33 @@ + + + $a + + + + main + + + $a + + + + + + + condexp + + inf + + $a + + 10 + + 0 + 1 + + + + + + + diff --git a/eval-final-projet/output/eval25.lex b/eval-final-projet/output/eval25.lex new file mode 100644 index 0000000..6eb4a13 --- /dev/null +++ b/eval-final-projet/output/eval25.lex @@ -0,0 +1,26 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$a id_variable $a += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +< symbole INFERIEUR +10 nombre 10 +? symbole INTERROGATION +0 nombre 0 +: symbole DEUXPOINTS +1 nombre 1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-final-projet/output/eval25.mips b/eval-final-projet/output/eval25.mips new file mode 100644 index 0000000..a19008d --- /dev/null +++ b/eval-final-projet/output/eval25.mips @@ -0,0 +1,70 @@ +.data +$$a: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$a +lw $t0, $$a +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 10 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e2 +li $t0, 0 +e2: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e0 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e1 +e0 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e1 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval25.synt b/eval-final-projet/output/eval25.synt index e69de29..a19008d 100644 --- a/eval-final-projet/output/eval25.synt +++ b/eval-final-projet/output/eval25.synt @@ -0,0 +1,70 @@ +.data +$$a: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$a +lw $t0, $$a +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 10 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e2 +li $t0, 0 +e2: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e0 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e1 +e0 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e1 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval25.tab b/eval-final-projet/output/eval25.tab new file mode 100644 index 0000000..91bc69d --- /dev/null +++ b/eval-final-projet/output/eval25.tab @@ -0,0 +1,6 @@ +------------------------------------------ +base = 2 +sommet = 2 +0 $a GLOBALE ENTIER 0 -1 +1 main GLOBALE FONCTION 0 0 +------------------------------------------ diff --git a/eval-final-projet/output/eval26.asynt b/eval-final-projet/output/eval26.asynt new file mode 100644 index 0000000..161447c --- /dev/null +++ b/eval-final-projet/output/eval26.asynt @@ -0,0 +1,126 @@ + + + + main + + $temp + + $g + + $l + + $v + + + + + + + $temp + + + + + + $g + + condexp + + ou + + inf + + $temp + + 0 + + + egal + + $temp + + 0 + + + 1 + 0 + + + + + $l + + condexp + + et + + inf + + $temp + + 100 + + + inf + 0 + + $temp + + + + 1 + 0 + + + + + $v + + condexp + + et + + non + + $g + + + + non + + $l + + + + 1 + 0 + + + + + + $g + + + + + + $l + + + + + + $v + + + + + + + + + + + + diff --git a/eval-final-projet/output/eval26.lex b/eval-final-projet/output/eval26.lex new file mode 100644 index 0000000..022387b --- /dev/null +++ b/eval-final-projet/output/eval26.lex @@ -0,0 +1,79 @@ +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +entier mot_clef entier +$temp id_variable $temp +, symbole VIRGULE +entier mot_clef entier +$g id_variable $g +, symbole VIRGULE +entier mot_clef entier +$l id_variable $l +, symbole VIRGULE +entier mot_clef entier +$v id_variable $v +; symbole POINT_VIRGULE +{ symbole ACCOLADE_OUVRANTE +$temp id_variable $temp += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$g id_variable $g += symbole EGAL +$temp id_variable $temp +< symbole INFERIEUR +0 nombre 0 +| symbole OU +$temp id_variable $temp += symbole EGAL +0 nombre 0 +? symbole INTERROGATION +1 nombre 1 +: symbole DEUXPOINTS +0 nombre 0 +; symbole POINT_VIRGULE +$l id_variable $l += symbole EGAL +$temp id_variable $temp +< symbole INFERIEUR +100 nombre 100 +& symbole ET +0 nombre 0 +< symbole INFERIEUR +$temp id_variable $temp +? symbole INTERROGATION +1 nombre 1 +: symbole DEUXPOINTS +0 nombre 0 +; symbole POINT_VIRGULE +$v id_variable $v += symbole EGAL +! symbole NON +$g id_variable $g +& symbole ET +! symbole NON +$l id_variable $l +? symbole INTERROGATION +1 nombre 1 +: symbole DEUXPOINTS +0 nombre 0 +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$g id_variable $g +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$l id_variable $l +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$v id_variable $v +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-final-projet/output/eval26.mips b/eval-final-projet/output/eval26.mips new file mode 100644 index 0000000..91d4da3 --- /dev/null +++ b/eval-final-projet/output/eval26.mips @@ -0,0 +1,255 @@ +.data +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 +subi $sp, $sp, 4 +subi $sp, $sp, 4 +subi $sp, $sp, 4 +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e6 +li $t0, 0 +e6: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e2 +j e4 +e2 : +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +beq $t1, $t2 e7 +li $t0, 0 +e7: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +or $t0, $zero, $t2 +j e5 +e4 : +move $t0 $t1 +e5 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e0 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e1 +e0 : +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e1 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -12($fp) #variable locale +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 100 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e12 +li $t0, 0 +e12: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e11 +subi $sp, $sp, 4 +sw $t1, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e13 +li $t0, 0 +e13: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t2, e11 +and $t0, $t1, $t2 +j e10 + e11 : +li $t0 0 + e10 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e8 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e9 +e8 : +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e9 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -16($fp) #variable locale +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +not $t0 $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e17 +subi $sp, $sp, 4 +sw $t1, 0($sp) +lw $t0, -16($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +not $t0 $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t2, e17 +and $t0, $t1, $t2 +j e16 + e17 : +li $t0 0 + e16 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e14 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e15 +e14 : +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e15 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -20($fp) #variable locale +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +lw $t0, -16($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +lw $t0, -20($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 16 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval26.synt b/eval-final-projet/output/eval26.synt new file mode 100644 index 0000000..91d4da3 --- /dev/null +++ b/eval-final-projet/output/eval26.synt @@ -0,0 +1,255 @@ +.data +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 +subi $sp, $sp, 4 +subi $sp, $sp, 4 +subi $sp, $sp, 4 +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e6 +li $t0, 0 +e6: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e2 +j e4 +e2 : +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +beq $t1, $t2 e7 +li $t0, 0 +e7: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +or $t0, $zero, $t2 +j e5 +e4 : +move $t0 $t1 +e5 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e0 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e1 +e0 : +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e1 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -12($fp) #variable locale +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 100 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e12 +li $t0, 0 +e12: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e11 +subi $sp, $sp, 4 +sw $t1, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e13 +li $t0, 0 +e13: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t2, e11 +and $t0, $t1, $t2 +j e10 + e11 : +li $t0 0 + e10 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e8 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e9 +e8 : +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e9 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -16($fp) #variable locale +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +not $t0 $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t1, e17 +subi $sp, $sp, 4 +sw $t1, 0($sp) +lw $t0, -16($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +not $t0 $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $zero, $t2, e17 +and $t0, $t1, $t2 +j e16 + e17 : +li $t0 0 + e16 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e14 +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e15 +e14 : +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e15 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -20($fp) #variable locale +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +lw $t0, -16($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +lw $t0, -20($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 16 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval26.tab b/eval-final-projet/output/eval26.tab new file mode 100644 index 0000000..39e036b --- /dev/null +++ b/eval-final-projet/output/eval26.tab @@ -0,0 +1,9 @@ +------------------------------------------ +base = 1 +sommet = 5 +0 main GLOBALE FONCTION 0 0 +1 $temp LOCALE ENTIER 0 -1 +2 $g LOCALE ENTIER 4 -1 +3 $l LOCALE ENTIER 8 -1 +4 $v LOCALE ENTIER 12 -1 +------------------------------------------ diff --git a/eval-final-projet/output/eval27.asynt b/eval-final-projet/output/eval27.asynt new file mode 100644 index 0000000..40ef8a3 --- /dev/null +++ b/eval-final-projet/output/eval27.asynt @@ -0,0 +1,52 @@ + + + + main + + + + condexp + 1 + 0 + + condexp + 1 + 0 + 1 + + + + + + + condexp + + condexp + 1 + 0 + 1 + + 0 + 1 + + + + + + condexp + 1 + 0 + + condexp + 1 + 0 + 1 + + + + + + + + + diff --git a/eval-final-projet/output/eval27.lex b/eval-final-projet/output/eval27.lex new file mode 100644 index 0000000..f92a2e9 --- /dev/null +++ b/eval-final-projet/output/eval27.lex @@ -0,0 +1,49 @@ +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +1 nombre 1 +? symbole INTERROGATION +0 nombre 0 +: symbole DEUXPOINTS +1 nombre 1 +? symbole INTERROGATION +0 nombre 0 +: symbole DEUXPOINTS +1 nombre 1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +( symbole PARENTHESE_OUVRANTE +1 nombre 1 +? symbole INTERROGATION +0 nombre 0 +: symbole DEUXPOINTS +1 nombre 1 +) symbole PARENTHESE_FERMANTE +? symbole INTERROGATION +0 nombre 0 +: symbole DEUXPOINTS +1 nombre 1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +1 nombre 1 +? symbole INTERROGATION +0 nombre 0 +: symbole DEUXPOINTS +( symbole PARENTHESE_OUVRANTE +1 nombre 1 +? symbole INTERROGATION +0 nombre 0 +: symbole DEUXPOINTS +1 nombre 1 +) symbole PARENTHESE_FERMANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-final-projet/output/eval27.mips b/eval-final-projet/output/eval27.mips new file mode 100644 index 0000000..d0619ce --- /dev/null +++ b/eval-final-projet/output/eval27.mips @@ -0,0 +1,160 @@ +.data +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e0 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e1 +e0 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e2 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e3 +e2 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e3 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e1 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e6 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e7 +e6 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e7 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e4 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e5 +e4 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e5 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e8 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e9 +e8 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e10 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e11 +e10 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e11 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e9 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval27.synt b/eval-final-projet/output/eval27.synt new file mode 100644 index 0000000..d0619ce --- /dev/null +++ b/eval-final-projet/output/eval27.synt @@ -0,0 +1,160 @@ +.data +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e0 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e1 +e0 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e2 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e3 +e2 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e3 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e1 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e6 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e7 +e6 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e7 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e4 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e5 +e4 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e5 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e8 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e9 +e8 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t1, 0($sp) +addi $sp, $sp, 4 +beq $t1, $zero e10 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +j e11 +e10 : +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e11 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +e9 : +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval27.tab b/eval-final-projet/output/eval27.tab new file mode 100644 index 0000000..2a3c2e8 --- /dev/null +++ b/eval-final-projet/output/eval27.tab @@ -0,0 +1,5 @@ +------------------------------------------ +base = 1 +sommet = 1 +0 main GLOBALE FONCTION 0 0 +------------------------------------------ diff --git a/eval-final-projet/output/eval3.synt b/eval-final-projet/output/eval3.synt index 4d058f0..74cae41 100644 --- a/eval-final-projet/output/eval3.synt +++ b/eval-final-projet/output/eval3.synt @@ -1,77 +1,42 @@ - - - - - entier - $a - - - - - - - POINT_VIRGULE - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 5 - - - FOIS - - 2 - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +$$a: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 5 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +mult $t1, $t2 +mflo $t0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval4.synt b/eval-final-projet/output/eval4.synt index 08f06d7..187d585 100644 --- a/eval-final-projet/output/eval4.synt +++ b/eval-final-projet/output/eval4.synt @@ -1,513 +1,146 @@ - - - - - - max - - PARENTHESE_OUVRANTE - - - - entier - $a - - - - - VIRGULE - - entier - $b - - - - - - - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - si - - - - - - - - - $a - - - - - - - - - - - - INFERIEUR - - - - - $b - - - - - - - - - - - - - - - - - - - - - - alors - - ACCOLADE_OUVRANTE - - - - retour - - - - - - - - - $b - - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - - - retour - - - - - - - - - $a - - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - entier - $v_1 - - - - - VIRGULE - - entier - $v_2 - - - - - - - - POINT_VIRGULE - - - ACCOLADE_OUVRANTE - - - - - $v_1 - - - - EGAL - - - - - - - - lire - PARENTHESE_OUVRANTE - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $v_2 - - - - EGAL - - - - - - - - lire - PARENTHESE_OUVRANTE - PARENTHESE_FERMANTE - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - si - - - - - - - - - max - PARENTHESE_OUVRANTE - - - - - - - - - - $v_1 - - - - - - - - - - - - - - - - - - - - - - VIRGULE - - - - - - - - - $v_2 - - - - - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - - - - - - - - - EGAL - - - - - $v_1 - - - - - - - - - - - - - - - - - - - - - - alors - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - $v_1 - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - sinon - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - $v_2 - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - - - - ACCOLADE_FERMANTE - - - - - - - +.data +.text +__start: +jal main +li $v0, 10 +syscall +max : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +lw $t0, 8($fp) #variable argument $a +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 4($fp) #variable argument $b +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e0 +li $t0, 0 +e0: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $zero e1 +lw $t0, 4($fp) #variable argument $b +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0 12($fp) #Adresse de retour +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +jr $ra +j e2 +e1: +e2: +lw $t0, 8($fp) #variable argument $a +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0 12($fp) #Adresse de retour +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +jr $ra +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 +subi $sp, $sp, 4 +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +li $v0 5 +syscall +move $t0, $v0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 #Val Retour +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal max +addi $sp, $sp, 8 #désalocation des arguments +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +beq $t1, $t2 e3 +li $t0, 0 +e3: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $zero e4 +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +j e5 +e4: +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +e5: +addi $sp, $sp 8 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval5.synt b/eval-final-projet/output/eval5.synt index 77a518b..3557338 100644 --- a/eval-final-projet/output/eval5.synt +++ b/eval-final-projet/output/eval5.synt @@ -1,2146 +1,527 @@ - - - - - entier - $tab - - CROCHET_OUVRANT - 10 - CROCHET_FERMANT - - - - - - POINT_VIRGULE - - - - initialiser - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 0 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - 8 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 1 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - 6 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 2 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - 9 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 3 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - 9 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 4 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - 4 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 5 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - 2 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 6 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - 3 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 7 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - 1 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 8 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - 4 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - 9 - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - 5 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - - - - - - - - - ACCOLADE_FERMANTE - - - - - afficher - - PARENTHESE_OUVRANTE - - - - entier - $n - - - - - - - - PARENTHESE_FERMANTE - - - - - entier - $i - - - - - - - POINT_VIRGULE - - - ACCOLADE_OUVRANTE - - - - - $i - - - - EGAL - - - - - - - - 0 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - tantque - - - - - - - - - $i - - - - - - - - - - - - INFERIEUR - - - - - $n - - - - - - - - - - - - - - - - - - - - - - faire - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - - $i - - - - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - - $i - - - - EGAL - - - - - - - - - $i - - - - - - - - - PLUS - - - 1 - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 0 - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - - - ACCOLADE_FERMANTE - - - - - echanger - - PARENTHESE_OUVRANTE - - - - entier - $i - - - - - VIRGULE - - entier - $j - - - - - - - - - PARENTHESE_FERMANTE - - - - - entier - $temp - - - - - - - POINT_VIRGULE - - - ACCOLADE_OUVRANTE - - - - - $temp - - - - EGAL - - - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - - $j - - - - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - - $j - - - - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - - $i - - - - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - - $i - - - - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - EGAL - - - - - - - - - $temp - - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - - ACCOLADE_FERMANTE - - - - - trier - - PARENTHESE_OUVRANTE - - - - entier - $n - - - - - - - - PARENTHESE_FERMANTE - - - - - entier - $echange - - - - - VIRGULE - - entier - $j - - - - - VIRGULE - - entier - $m - - - - - - - - - POINT_VIRGULE - - - ACCOLADE_OUVRANTE - - - - - $m - - - - EGAL - - - - - - - - - $n - - - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $echange - - - - EGAL - - - - - - - - 1 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - tantque - - - - - - - - - $echange - - - - - - - - - - - - EGAL - - - - 1 - - - - - - - - - - - - - - - - - - - faire - - ACCOLADE_OUVRANTE - - - - - $echange - - - - EGAL - - - - - - - - 0 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - $j - - - - EGAL - - - - - - - - 0 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - tantque - - - - - - - - - $j - - - - - - - - - - - - INFERIEUR - - - - - $m - - - - - - - - - MOINS - - - 1 - - - - - - - - - - - - - - - - - - - - faire - - ACCOLADE_OUVRANTE - - - - si - - - - - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - - $j - - - - - - - - - PLUS - - - 1 - - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - - - - - - - - - INFERIEUR - - - - - $tab - - CROCHET_OUVRANT - - - - - - - - - $j - - - - - - - - - - - - - - - - - - - - - CROCHET_FERMANT - - - - - - - - - - - - - - - - - - - - - alors - - ACCOLADE_OUVRANTE - - - - - echanger - PARENTHESE_OUVRANTE - - - - - - - - - - $j - - - - - - - - - - - - - - - - - - - - - - VIRGULE - - - - - - - - - $j - - - - - - - - - PLUS - - - 1 - - - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - POINT_VIRGULE - - - - - - - $echange - - - - EGAL - - - - - - - - 1 - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - - - - - - $j - - - - EGAL - - - - - - - - - $j - - - - - - - - - PLUS - - - 1 - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - ACCOLADE_FERMANTE - - - - - - - - $m - - - - EGAL - - - - - - - - - $m - - - - - - - - - MOINS - - - 1 - - - - - - - - - - - - - - - - - - - POINT_VIRGULE - - - - - - - - - ACCOLADE_FERMANTE - - - - - - - - - ACCOLADE_FERMANTE - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - initialiser - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - POINT_VIRGULE - - - - - - - afficher - PARENTHESE_OUVRANTE - - - - - - - - - 10 - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - POINT_VIRGULE - - - - - - - trier - PARENTHESE_OUVRANTE - - - - - - - - - 10 - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - POINT_VIRGULE - - - - - - - afficher - PARENTHESE_OUVRANTE - - - - - - - - - 10 - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - POINT_VIRGULE - - - - - - - - - ACCOLADE_FERMANTE - - - - - - - - - - +.data +$$tab: .space 40 +.text +__start: +jal main +li $v0, 10 +syscall +initialiser : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 8 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +li $t0, 6 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +li $t0, 9 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +li $t0, 9 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 3 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +li $t0, 4 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 4 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +li $t0, 2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 5 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +li $t0, 3 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 6 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 7 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +li $t0, 4 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 8 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +li $t0, 5 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 9 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +afficher : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +e0: +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 4($fp) #variable argument $n +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e2 +li $t0, 0 +e2: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $0 e1 +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, $$tab($t4) +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +j e0 +e1: +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 4 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +echanger : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 +lw $t0, 4($fp) #variable argument $j +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, $$tab($t4) +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +lw $t0, 8($fp) #variable argument $i +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, $$tab($t4) +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 4($fp) #variable argument $j +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 8($fp) #variable argument $i +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, $$tab($t4) +addi $sp, $sp 4 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +trier : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 +subi $sp, $sp, 4 +subi $sp, $sp, 4 +lw $t0, 4($fp) #variable argument $n +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -16($fp) #variable locale +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +e3: +lw $t0, -8($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +beq $t1, $t2 e5 +li $t0, 0 +e5: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $0 e4 +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +li $t0, 0 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -12($fp) #variable locale +e6: +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, -16($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +sub $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e8 +li $t0, 0 +e8: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $0 e7 +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, $$tab($t4) +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t4, 0($sp) +addi $sp, $sp, 4 +add $t4,$t4,$t4 +add $t4,$t4,$t4 +lw $t0, $$tab($t4) +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +li $t0, 1 +blt $t1, $t2 e9 +li $t0, 0 +e9: +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +beq $t0 $zero e10 +subi $sp, $sp, 4 #Val Retour +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal echanger +addi $sp, $sp, 8 #désalocation des arguments +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -8($fp) #variable locale +j e11 +e10: +e11: +lw $t0, -12($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -12($fp) #variable locale +j e6 +e7: +lw $t0, -16($fp) #variable locale +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +sub $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +sw $t0, -16($fp) #variable locale +j e3 +e4: +addi $sp, $sp 12 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 #Val Retour +jal initialiser +subi $sp, $sp, 4 #Val Retour +li $t0, 10 +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal afficher +addi $sp, $sp, 4 #désalocation des arguments +subi $sp, $sp, 4 #Val Retour +li $t0, 10 +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal trier +addi $sp, $sp, 4 #désalocation des arguments +subi $sp, $sp, 4 #Val Retour +li $t0, 10 +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal afficher +addi $sp, $sp, 4 #désalocation des arguments +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval6.synt b/eval-final-projet/output/eval6.synt index 8451b47..afeb2bf 100644 --- a/eval-final-projet/output/eval6.synt +++ b/eval-final-projet/output/eval6.synt @@ -1,104 +1,46 @@ - - - - - entier - $a - - - - - - - POINT_VIRGULE - - - - procedure - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 1 - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - procedure - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - +.data +$$a: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +procedure : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 #Val Retour +jal procedure +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval7.synt b/eval-final-projet/output/eval7.synt index 62e65c9..bc714e6 100644 --- a/eval-final-projet/output/eval7.synt +++ b/eval-final-projet/output/eval7.synt @@ -1,91 +1,51 @@ - - - - - entier - $a - - - - - - - POINT_VIRGULE - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 5 - - - - - - MOINS - - - 3 - - - - - - PLUS - - - 2 - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - +.data +$$a: .space 4 +.text +__start: +jal main +li $v0, 10 +syscall +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 5 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 3 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +sub $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +li $t0, 2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t2, 0($sp) +addi $sp, $sp, 4 +lw $t1, 0($sp) +addi $sp, $sp, 4 +add $t0, $t1, $t2 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval8.synt b/eval-final-projet/output/eval8.synt index ab621d9..a04e648 100644 --- a/eval-final-projet/output/eval8.synt +++ b/eval-final-projet/output/eval8.synt @@ -1,134 +1,49 @@ - - - - - - procedure - - PARENTHESE_OUVRANTE - - - - entier - $a - - - - - - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - - $a - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - procedure - PARENTHESE_OUVRANTE - - - - - - - - - 10 - - - - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - +.data +.text +__start: +jal main +li $v0, 10 +syscall +procedure : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +lw $t0, 4($fp) #variable argument $a +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 #Val Retour +li $t0, 10 +subi $sp, $sp, 4 +sw $t0, 0($sp) +jal procedure +addi $sp, $sp, 4 #désalocation des arguments +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/output/eval9.synt b/eval-final-projet/output/eval9.synt index cf9f1f3..a661af0 100644 --- a/eval-final-projet/output/eval9.synt +++ b/eval-final-projet/output/eval9.synt @@ -1,93 +1,45 @@ - - - - - - procedure - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - ecrire - PARENTHESE_OUVRANTE - - - - - - - - 1 - - - - - - - - - - - - - - - - - - PARENTHESE_FERMANTE - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - main - - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - - - - ACCOLADE_OUVRANTE - - - - - procedure - PARENTHESE_OUVRANTE - - - PARENTHESE_FERMANTE - - POINT_VIRGULE - - - - - - ACCOLADE_FERMANTE - - - - - - - +.data +.text +__start: +jal main +li $v0, 10 +syscall +procedure : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +li $t0, 1 +subi $sp, $sp, 4 +sw $t0, 0($sp) +lw $t0, 0($sp) +addi $sp, $sp, 4 +move $a0, $t0 +li $v0, 1 +syscall +li $a0, '\n' +li $v0, 11 +syscall +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra +main : +subi $sp, $sp, 4 +sw $fp, 0($sp) +move $fp, $sp +subi $sp, $sp, 4 +sw $ra, 0($sp) +subi $sp, $sp, 4 #Val Retour +jal procedure +addi $sp, $sp 0 # desallocation variables locales +lw $ra, 0($sp) +addi $sp, $sp, 4 +lw $fp, 0($sp) +addi $sp, $sp, 4 +addi $sp, $sp, 4 #ignore valeur de retour +jr $ra diff --git a/eval-final-projet/testAll.sh b/eval-final-projet/testAll.sh index b811c47..315f349 100755 --- a/eval-final-projet/testAll.sh +++ b/eval-final-projet/testAll.sh @@ -36,7 +36,7 @@ MYCOMPILO="../compilateur-l" MYCOMPILODEFAULT="${MYCOMPILO}" # utilisé pour test reconnaissance et erreur MYCOMPILOLEX="${MYCOMPILO} -l" # exécuter l'analyseur lexical -MYCOMPILOSYNT="${MYCOMPILO} -s" # exécuter l'analyseur syntaxique +#MYCOMPILOSYNT="${MYCOMPILO} -s" # exécuter l'analyseur syntaxique MYCOMPILOASYNT="${MYCOMPILO} -a" # afficher l'arbre abstrait MYCOMPILOTAB="${MYCOMPILO} -t" # afficher les tables des symboles MYCOMPILOMIPS="${MYCOMPILO} -m" # générer code MIPS diff --git a/header/analyseur_syntaxyque.h b/header/analyseur_syntaxyque.h index 361ba37..f581417 100644 --- a/header/analyseur_syntaxyque.h +++ b/header/analyseur_syntaxyque.h @@ -44,12 +44,13 @@ n_instr *instructionPour (void); n_instr *instructionVide (void); n_exp *expression (void); n_exp *expressionBis (n_exp *herite); +n_exp *condition (void); +n_exp *conditionBis(n_exp *herite); n_exp *conjonction (void); n_exp *conjonctionBis(n_exp *herite); n_exp *negation (void); n_exp *comparaison (void); n_exp *comparaisonBis (n_exp *herite); -n_exp *expression (void); n_exp *expArith (void); n_exp *expArithBis(n_exp *herite); n_exp *terme (void); diff --git a/header/symboles.h b/header/symboles.h index 2501b9a..ba0da0a 100644 --- a/header/symboles.h +++ b/header/symboles.h @@ -2,7 +2,7 @@ #define EPSILON 0 -#define NB_NON_TERMINAUX 43 +#define NB_NON_TERMINAUX 45 #define _listeDecVariables_ 1 #define _listeDecFonctions_ 2 @@ -45,11 +45,13 @@ #define _instructionFaire_ 40 #define _optListeDecVariables_ 41 #define _instructionPour_ 42 +#define _condition_ 43 +#define _conditionBis_ 44 /* symboles terminaux */ -#define NB_TERMINAUX 32 +#define NB_TERMINAUX 34 #define POINT_VIRGULE 1 #define PLUS 2 @@ -81,4 +83,6 @@ #define NOMBRE 28 #define FIN 29 #define VIRGULE 30 -#define POUR 31 \ No newline at end of file +#define POUR 31 +#define INTERROGATION 32 +#define DEUXPOINTS 33 \ No newline at end of file diff --git a/header/syntabs.h b/header/syntabs.h index fbfd414..8f4896a 100644 --- a/header/syntabs.h +++ b/header/syntabs.h @@ -39,12 +39,12 @@ n_dec *cree_n_dec_fonc(char *nom, n_l_dec *param, n_l_dec *variables, n_instr *c /* ATTENTION : negatif => - unaire, comme dans -5 non => négation logique Le opérateurs unaires ont op2 = NULL par convention */ -typedef enum {plus, moins, fois, divise, modulo, egal, diff, inf, sup, infeg, supeg, ou, et, non, negatif} operation; +typedef enum {plus, moins, fois, divise, modulo, egal, diff, inf, sup, infeg, supeg, ou, et, non, negatif, cond} operation; struct n_exp_ { enum{varExp, opExp, intExp, appelExp, lireExp, incrExp} type; union{ - struct{operation op; struct n_exp_ *op1; struct n_exp_ *op2;} opExp_; + struct{operation op; struct n_exp_ *op1; struct n_exp_ *op2; struct n_exp_ *op3;} opExp_; n_var *var; n_var *incr; int entier; @@ -52,7 +52,7 @@ struct n_exp_ { }u; }; -n_exp *cree_n_exp_op(operation type, n_exp *op1, n_exp *op2); +n_exp *cree_n_exp_op(operation type, n_exp *op1, n_exp *op2, n_exp *op3); n_exp *cree_n_exp_entier(int entier); n_exp *cree_n_exp_var(n_var *var); n_exp *cree_n_exp_appel(n_appel *app); diff --git a/src/affiche_arbre_abstrait.c b/src/affiche_arbre_abstrait.c index 27bf654..41abed9 100644 --- a/src/affiche_arbre_abstrait.c +++ b/src/affiche_arbre_abstrait.c @@ -207,12 +207,17 @@ void affiche_opExp(n_exp *n) else if(n->u.opExp_.op == ou) affiche_texte("ou", trace_abs); else if(n->u.opExp_.op == et) affiche_texte("et", trace_abs); else if(n->u.opExp_.op == non) affiche_texte("non", trace_abs); + else if(n->u.opExp_.op == cond) affiche_texte("condexp", trace_abs); + if( n->u.opExp_.op1 != NULL ) { affiche_exp(n->u.opExp_.op1); } if( n->u.opExp_.op2 != NULL ) { affiche_exp(n->u.opExp_.op2); } + if( n->u.opExp_.op3 != NULL ) { + affiche_exp(n->u.opExp_.op3); + } affiche_balise_fermante(fct, trace_abs); } diff --git a/src/analyseur_lexical.c b/src/analyseur_lexical.c index 334860e..e18b103 100644 --- a/src/analyseur_lexical.c +++ b/src/analyseur_lexical.c @@ -18,15 +18,15 @@ extern FILE *yyin; char tableSymbole[] = { ';', ',', '(', ')', '[', ']', '{', '}', // Code '+', '-', '*', '/', // Arithmetique - '<', '=', // Comparaison - '&','|', '!' , // Logique + '<', '=', '?', ':', // Comparaison + '&','|', '!', // Logique '\0' }; int codeSymbole[] = { POINT_VIRGULE, VIRGULE, PARENTHESE_OUVRANTE, PARENTHESE_FERMANTE, CROCHET_OUVRANT, CROCHET_FERMANT, ACCOLADE_OUVRANTE, ACCOLADE_FERMANTE, PLUS, MOINS, FOIS, DIVISE, - INFERIEUR, EGAL, + INFERIEUR, EGAL, INTERROGATION, DEUXPOINTS, ET, OU, NON }; @@ -209,6 +209,8 @@ void nom_token( int token, char *nom, char *valeur ) { else if(token == NON) strcpy(valeur, "NON"); else if(token == FIN) strcpy(valeur, "FIN"); else if(token == VIRGULE) strcpy(valeur, "VIRGULE"); + else if(token == INTERROGATION) strcpy(valeur, "INTERROGATION"); + else if(token == DEUXPOINTS) strcpy(valeur, "DEUXPOINTS"); else if( token == ID_VAR ) { strcpy( nom, "id_variable" ); diff --git a/src/analyseur_syntaxyque.c b/src/analyseur_syntaxyque.c index ab69bc8..590ae79 100644 --- a/src/analyseur_syntaxyque.c +++ b/src/analyseur_syntaxyque.c @@ -592,8 +592,8 @@ n_exp *expression() { openSection( __func__ ); n_exp *herite_conj = NULL; n_exp *sreturn = NULL; - if( est_premier( _conjonction_, uniteCourante ) ) { - herite_conj = conjonction(); + if( est_premier( _condition_, uniteCourante ) ) { + herite_conj = condition(); sreturn = expressionBis(herite_conj); } else { syntaxError(); @@ -603,6 +603,51 @@ n_exp *expression() { } n_exp *expressionBis(n_exp *herite) { + openSection( __func__ ); + n_exp *expression1 = NULL; + n_exp *expression2 = NULL; + n_exp *sreturn = herite; + + if( uniteCourante == INTERROGATION ) { + elementConsome(); + uniteCourante = yylex(); + + expression1 = expression(); + + if( uniteCourante == DEUXPOINTS ) { + elementConsome(); + uniteCourante = yylex(); + + expression2 = expression(); + + sreturn = cree_n_exp_op(cond, herite, expression1, expression2); + } else { + syntaxErrorMsg( "':' été attendu" ); + } + + } else if( !est_suivant( _expressionBis_, uniteCourante ) ) { + syntaxError(); + } + + closeSection( __func__ ); + return sreturn; +} + +n_exp *condition() { + openSection( __func__ ); + n_exp *herite_conj = NULL; + n_exp *sreturn = NULL; + if( est_premier( _conjonction_, uniteCourante ) ) { + herite_conj = conjonction(); + sreturn = conditionBis(herite_conj); + } else { + syntaxError(); + } + closeSection( __func__ ); + return sreturn; +} + +n_exp *conditionBis(n_exp *herite) { openSection( __func__ ); n_exp *conj = NULL; n_exp *sreturn = herite; @@ -612,9 +657,9 @@ n_exp *expressionBis(n_exp *herite) { uniteCourante = yylex(); conj = conjonction(); - herite = cree_n_exp_op(ou, herite,conj); - sreturn = expressionBis(herite); - } else if( !est_suivant( _expressionBis_, uniteCourante ) ) { + herite = cree_n_exp_op(ou, herite,conj, NULL); + sreturn = conditionBis(herite); + } else if( !est_suivant( _conditionBis_, uniteCourante ) ) { syntaxError(); } @@ -646,7 +691,7 @@ n_exp *conjonctionBis(n_exp *herite) { elementConsome(); uniteCourante = yylex(); herite_neg = negation(); - herite_neg = cree_n_exp_op(et, herite, herite_neg); + herite_neg = cree_n_exp_op(et, herite, herite_neg, NULL); sreturn = conjonctionBis(herite_neg); } else if( !est_suivant( _conjonctionBis_, uniteCourante ) ) { syntaxError(); @@ -666,7 +711,7 @@ n_exp *negation() { uniteCourante = yylex(); expression = comparaison(); - sreturn = cree_n_exp_op(non,expression,NULL); + sreturn = cree_n_exp_op(non,expression,NULL, NULL); } else if (est_premier( _comparaison_, uniteCourante )) { sreturn = comparaison(); } else { @@ -700,14 +745,14 @@ n_exp *comparaisonBis(n_exp *herite) { uniteCourante = yylex(); herite_exp = expArith(); - herite_exp = cree_n_exp_op(egal,herite,herite_exp); + herite_exp = cree_n_exp_op(egal,herite,herite_exp, NULL); sreturn = comparaisonBis(herite_exp); } else if( uniteCourante == INFERIEUR) { elementConsome(); uniteCourante = yylex(); herite_exp = expArith(); - herite_exp = cree_n_exp_op(inf,herite,herite_exp); + herite_exp = cree_n_exp_op(inf,herite,herite_exp, NULL); sreturn = comparaisonBis(herite_exp); } else if( !est_suivant( _comparaisonBis_, uniteCourante ) ) { @@ -748,14 +793,14 @@ n_exp *expArithBis(n_exp *herite) { uniteCourante = yylex(); s = terme(); - herite_fils = cree_n_exp_op(plus, herite, s); + herite_fils = cree_n_exp_op(plus, herite, s, NULL); sreturn = expArithBis(herite_fils); } else if( uniteCourante == MOINS) { elementConsome(); uniteCourante = yylex(); s = terme(); - herite_fils = cree_n_exp_op(moins, herite, s); + herite_fils = cree_n_exp_op(moins, herite, s, NULL); sreturn = expArithBis(herite_fils); } else if( !est_suivant( _expArithBis_, uniteCourante ) ) { syntaxError(); @@ -796,14 +841,14 @@ n_exp *termeBis(n_exp *herite) { uniteCourante = yylex(); s = facteur(); - herite_fils = cree_n_exp_op(fois, herite, s); + herite_fils = cree_n_exp_op(fois, herite, s, NULL); sreturn = termeBis(herite_fils); } else if( uniteCourante == DIVISE) { elementConsome(); uniteCourante = yylex(); s = facteur(); - herite_fils = cree_n_exp_op(divise, herite, s); + herite_fils = cree_n_exp_op(divise, herite, s, NULL); sreturn = termeBis(herite_fils); } else if( !est_suivant( _termeBis_, uniteCourante ) ) { syntaxError(); diff --git a/src/parcours.c b/src/parcours.c index 20826fc..590f419 100644 --- a/src/parcours.c +++ b/src/parcours.c @@ -510,7 +510,7 @@ void parcours_opExp(n_exp *n) sprintf(tmp, "$t%d", iRegistre3); depile(tmp); - sprintf(tmp,"or $t%d, $t%d, $t%d",iRegistre, iRegistre2, iRegistre3); + sprintf(tmp,"or $t%d, $zero, $t%d",iRegistre, iRegistre3); printMips(tmp); sprintf(tmp,"j %s",empile); @@ -523,31 +523,36 @@ void parcours_opExp(n_exp *n) sprintf(tmp,"%s : ", empile); printMips(tmp); } else if(n->u.opExp_.op == et) { - char empile[256]; + char fin[256]; char faux[256]; - new_tag(empile); + new_tag(fin); new_tag(faux); parcours_exp(n->u.opExp_.op1); sprintf(tmp, "$t%d", iRegistre2); depile(tmp); - //sprintf(tmp,"li $t%d, 1",iRegistre); - //printMips(tmp); + sprintf(tmp,"beq $zero, $t%d, %s",iRegistre2,faux); printMips(tmp); - + + sprintf(tmp, "$t%d", iRegistre2); + empile(tmp); + parcours_exp(n->u.opExp_.op2); sprintf(tmp, "$t%d", iRegistre3); depile(tmp); - sprintf(tmp,"beq $zero, $t%d, %s",iRegistre3,faux); + + sprintf(tmp, "$t%d", iRegistre2); + depile(tmp); + + sprintf(tmp,"beq $zero, $t%d, %s", iRegistre3, faux); printMips(tmp); + - //-- sprintf(tmp,"and $t%d, $t%d, $t%d",iRegistre, iRegistre2, iRegistre3); printMips(tmp); - //-- - sprintf(tmp,"j %s", empile); + sprintf(tmp,"j %s", fin); printMips(tmp); sprintf(tmp," %s :",faux); @@ -555,23 +560,46 @@ void parcours_opExp(n_exp *n) sprintf(tmp,"li $t%d 0",iRegistre); printMips(tmp); - sprintf(tmp ," %s :",empile); + sprintf(tmp ," %s :",fin); printMips(tmp); } else if(n->u.opExp_.op == non) { parcours_exp(n->u.opExp_.op1); - char fin[256]; - new_tag(fin); + sprintf(tmp, "$t%d", iRegistre3); depile(tmp); - sprintf(tmp,"li $t%d 1",iRegistre); + + sprintf(tmp,"not $t%d $t%d",iRegistre,iRegistre3); printMips(tmp); - sprintf(tmp,"beq $t%d, $zero %s",iRegistre3,fin); + } else if(n->u.opExp_.op == cond) { + char tmp[256]; + char faux[256]; + char empile[256]; + new_tag(faux); + new_tag(empile); + + parcours_exp(n->u.opExp_.op1); + + sprintf(tmp, "$t%d", iRegistre2); + depile(tmp); + sprintf(tmp,"beq $t%d, $zero %s",iRegistre2, faux); printMips(tmp); - sprintf(tmp,"li $t%d 0",iRegistre); + + parcours_exp(n->u.opExp_.op2); + + sprintf(tmp, "$t%d", iRegistre); + depile(tmp); + sprintf(tmp,"j %s", empile); printMips(tmp); - sprintf(tmp, "%s :",fin); + + sprintf(tmp, "%s :", faux); + printMips(tmp); + parcours_exp(n->u.opExp_.op3); + sprintf(tmp, "$t%d", iRegistre); + depile(tmp); + + sprintf(tmp, "%s :", empile); printMips(tmp); } sprintf(tmp, "$t%d", iRegistre); diff --git a/src/premiers.c b/src/premiers.c index a9b7292..05795bd 100644 --- a/src/premiers.c +++ b/src/premiers.c @@ -85,9 +85,19 @@ void initialise_premiers(void){ premiers[_expression_][ID_VAR] = 1; premiers[_expression_][LIRE] = 1; - premiers[_expressionBis_][OU] = 1; + premiers[_expressionBis_][INTERROGATION] = 1; premiers[_expressionBis_][EPSILON] = 1; + premiers[_condition_][NON] = 1; + premiers[_condition_][PARENTHESE_OUVRANTE] = 1; + premiers[_condition_][NOMBRE] = 1; + premiers[_condition_][ID_FCT] = 1; + premiers[_condition_][ID_VAR] = 1; + premiers[_condition_][LIRE] = 1; + + premiers[_conditionBis_][OU] = 1; + premiers[_conditionBis_][EPSILON] = 1; + premiers[_conjonction_][NON] = 1; premiers[_conjonction_][PARENTHESE_OUVRANTE] = 1; premiers[_conjonction_][NOMBRE] = 1; diff --git a/src/suivants.c b/src/suivants.c index c158faa..b5c606c 100644 --- a/src/suivants.c +++ b/src/suivants.c @@ -170,6 +170,7 @@ void initialise_suivants(void){ suivants[_expression_][PARENTHESE_FERMANTE] = 1; suivants[_expression_][CROCHET_FERMANT] = 1; suivants[_expression_][VIRGULE] = 1; + suivants[_expression_][DEUXPOINTS] = 1; suivants[_expressionBis_][POINT_VIRGULE] = 1; suivants[_expressionBis_][ALORS] = 1; @@ -177,6 +178,25 @@ void initialise_suivants(void){ suivants[_expressionBis_][PARENTHESE_FERMANTE] = 1; suivants[_expressionBis_][CROCHET_FERMANT] = 1; suivants[_expressionBis_][VIRGULE] = 1; + suivants[_expressionBis_][DEUXPOINTS] = 1; + + suivants[_condition_][POINT_VIRGULE] = 1; + suivants[_condition_][ALORS] = 1; + suivants[_condition_][FAIRE] = 1; + suivants[_condition_][PARENTHESE_FERMANTE] = 1; + suivants[_condition_][CROCHET_FERMANT] = 1; + suivants[_condition_][VIRGULE] = 1; + suivants[_condition_][INTERROGATION] = 1; + suivants[_condition_][DEUXPOINTS] = 1; + + suivants[_conditionBis_][POINT_VIRGULE] = 1; + suivants[_conditionBis_][ALORS] = 1; + suivants[_conditionBis_][FAIRE] = 1; + suivants[_conditionBis_][PARENTHESE_FERMANTE] = 1; + suivants[_conditionBis_][CROCHET_FERMANT] = 1; + suivants[_conditionBis_][VIRGULE] = 1; + suivants[_conditionBis_][INTERROGATION] = 1; + suivants[_conditionBis_][DEUXPOINTS] = 1; suivants[_conjonction_][OU] = 1; suivants[_conjonction_][POINT_VIRGULE] = 1; @@ -185,6 +205,8 @@ void initialise_suivants(void){ suivants[_conjonction_][PARENTHESE_FERMANTE] = 1; suivants[_conjonction_][CROCHET_FERMANT] = 1; suivants[_conjonction_][VIRGULE] = 1; + suivants[_conjonction_][INTERROGATION] = 1; + suivants[_conjonction_][DEUXPOINTS] = 1; suivants[_conjonctionBis_][OU] = 1; suivants[_conjonctionBis_][POINT_VIRGULE] = 1; @@ -193,6 +215,8 @@ void initialise_suivants(void){ suivants[_conjonctionBis_][PARENTHESE_FERMANTE] = 1; suivants[_conjonctionBis_][CROCHET_FERMANT] = 1; suivants[_conjonctionBis_][VIRGULE] = 1; + suivants[_conjonctionBis_][INTERROGATION] = 1; + suivants[_conjonctionBis_][DEUXPOINTS] = 1; suivants[_negation_][ET] = 1; suivants[_negation_][OU] = 1; @@ -202,6 +226,8 @@ void initialise_suivants(void){ suivants[_negation_][PARENTHESE_FERMANTE] = 1; suivants[_negation_][CROCHET_FERMANT] = 1; suivants[_negation_][VIRGULE] = 1; + suivants[_negation_][INTERROGATION] = 1; + suivants[_negation_][DEUXPOINTS] = 1; suivants[_comparaison_][ET] = 1; suivants[_comparaison_][OU] = 1; @@ -211,6 +237,8 @@ void initialise_suivants(void){ suivants[_comparaison_][PARENTHESE_FERMANTE] = 1; suivants[_comparaison_][CROCHET_FERMANT] = 1; suivants[_comparaison_][VIRGULE] = 1; + suivants[_comparaison_][INTERROGATION] = 1; + suivants[_comparaison_][DEUXPOINTS] = 1; suivants[_comparaisonBis_][ET] = 1; suivants[_comparaisonBis_][OU] = 1; @@ -220,6 +248,8 @@ void initialise_suivants(void){ suivants[_comparaisonBis_][PARENTHESE_FERMANTE] = 1; suivants[_comparaisonBis_][CROCHET_FERMANT] = 1; suivants[_comparaisonBis_][VIRGULE] = 1; + suivants[_comparaisonBis_][INTERROGATION] = 1; + suivants[_comparaisonBis_][DEUXPOINTS] = 1; suivants[_expArith_][EGAL] = 1; suivants[_expArith_][INFERIEUR] = 1; @@ -231,6 +261,8 @@ void initialise_suivants(void){ suivants[_expArith_][PARENTHESE_FERMANTE] = 1; suivants[_expArith_][CROCHET_FERMANT] = 1; suivants[_expArith_][VIRGULE] = 1; + suivants[_expArith_][INTERROGATION] = 1; + suivants[_expArith_][DEUXPOINTS] = 1; suivants[_expArithBis_][EGAL] = 1; suivants[_expArithBis_][INFERIEUR] = 1; @@ -242,6 +274,8 @@ void initialise_suivants(void){ suivants[_expArithBis_][PARENTHESE_FERMANTE] = 1; suivants[_expArithBis_][CROCHET_FERMANT] = 1; suivants[_expArithBis_][VIRGULE] = 1; + suivants[_expArithBis_][INTERROGATION] = 1; + suivants[_expArithBis_][DEUXPOINTS] = 1; suivants[_terme_][PLUS] = 1; suivants[_terme_][MOINS] = 1; @@ -255,6 +289,8 @@ void initialise_suivants(void){ suivants[_terme_][PARENTHESE_FERMANTE] = 1; suivants[_terme_][CROCHET_FERMANT] = 1; suivants[_terme_][VIRGULE] = 1; + suivants[_terme_][INTERROGATION] = 1; + suivants[_terme_][DEUXPOINTS] = 1; suivants[_termeBis_][PLUS] = 1; suivants[_termeBis_][MOINS] = 1; @@ -268,6 +304,8 @@ void initialise_suivants(void){ suivants[_termeBis_][PARENTHESE_FERMANTE] = 1; suivants[_termeBis_][CROCHET_FERMANT] = 1; suivants[_termeBis_][VIRGULE] = 1; + suivants[_termeBis_][INTERROGATION] = 1; + suivants[_termeBis_][DEUXPOINTS] = 1; suivants[_facteur_][FOIS] = 1; suivants[_facteur_][DIVISE] = 1; @@ -283,6 +321,8 @@ void initialise_suivants(void){ suivants[_facteur_][PARENTHESE_FERMANTE] = 1; suivants[_facteur_][CROCHET_FERMANT] = 1; suivants[_facteur_][VIRGULE] = 1; + suivants[_facteur_][INTERROGATION] = 1; + suivants[_facteur_][DEUXPOINTS] = 1; suivants[_var_][FOIS] = 1; suivants[_var_][DIVISE] = 1; @@ -298,6 +338,8 @@ void initialise_suivants(void){ suivants[_var_][PARENTHESE_FERMANTE] = 1; suivants[_var_][CROCHET_FERMANT] = 1; suivants[_var_][VIRGULE] = 1; + suivants[_var_][INTERROGATION] = 1; + suivants[_var_][DEUXPOINTS] = 1; suivants[_optIndice_][FOIS] = 1; suivants[_optIndice_][DIVISE] = 1; @@ -313,6 +355,8 @@ void initialise_suivants(void){ suivants[_optIndice_][PARENTHESE_FERMANTE] = 1; suivants[_optIndice_][CROCHET_FERMANT] = 1; suivants[_optIndice_][VIRGULE] = 1; + suivants[_optIndice_][INTERROGATION] = 1; + suivants[_optIndice_][DEUXPOINTS] = 1; suivants[_appelFct_][FOIS] = 1; suivants[_appelFct_][DIVISE] = 1; @@ -328,6 +372,8 @@ void initialise_suivants(void){ suivants[_appelFct_][PARENTHESE_FERMANTE] = 1; suivants[_appelFct_][CROCHET_FERMANT] = 1; suivants[_appelFct_][VIRGULE] = 1; + suivants[_appelFct_][INTERROGATION] = 1; + suivants[_appelFct_][DEUXPOINTS] = 1; suivants[_listeExpressions_][PARENTHESE_FERMANTE] = 1; diff --git a/src/syntabs.c b/src/syntabs.c index 7c4bc07..47dbd08 100644 --- a/src/syntabs.c +++ b/src/syntabs.c @@ -36,13 +36,14 @@ n_var *cree_n_var_indicee(char *nom, n_exp *indice) return n; } -n_exp *cree_n_exp_op(operation op, n_exp *op1, n_exp *op2) +n_exp *cree_n_exp_op(operation op, n_exp *op1, n_exp *op2, n_exp *op3) { n_exp *n = malloc(sizeof(n_exp)); n->type = opExp; n->u.opExp_.op = op; n->u.opExp_.op1 = op1; n->u.opExp_.op2 = op2; + n->u.opExp_.op3 = op3; return n; }