EVAL FINAL ESAYYYYYYY

This commit is contained in:
2016-04-19 11:58:53 +02:00
parent 69f4de0a90
commit 4841633f92
60 changed files with 4031 additions and 7634 deletions

View File

@@ -0,0 +1,4 @@
main()
{
ecrire( 1 ? 0 ? 1 : 1 ? 0 );
}

View File

@@ -0,0 +1,6 @@
entier $a;
main()
{
$a = lire();
ecrire( $a < 10 ? 0 : 1);
}

View File

@@ -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);
}

View File

@@ -0,0 +1,6 @@
main()
{
ecrire( 1 ? 0 : 1 ? 0 : 1 );
ecrire( ( 1 ? 0 : 1 ) ? 0 : 1 );
ecrire( 1 ? 0 : ( 1 ? 0 : 1 ) );
}

View File

@@ -1,113 +1,37 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,118 +1,54 @@
<programme>
<optDecVariables>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>procedure</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionRetour>
<mot_clef>retour</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionRetour>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<appelFct>
<id_fonction>procedure</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,146 +1,52 @@
<programme>
<optDecVariables>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>procedure</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAppel>
<appelFct>
<id_fonction>procedure</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
<symbole>POINT_VIRGULE</symbole>
</instructionAppel>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,112 +1,40 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionSi>
<mot_clef>si</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>alors</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
<optSinon>
</optSinon>
</instructionSi>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,154 +1,51 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionSi>
<mot_clef>si</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>alors</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
<optSinon>
<mot_clef>sinon</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</optSinon>
</instructionSi>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,487 +1,140 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$tab</id_variable>
<optTailleTableau>
<symbole>CROCHET_OUVRANT</symbole>
<nombre>10</nombre>
<symbole>CROCHET_FERMANT</symbole>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionTantque>
<mot_clef>tantque</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
<symbole>INFERIEUR</symbole>
<expArith>
<terme>
<facteur>
<nombre>10</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>faire</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$tab</id_variable>
<optIndice>
<symbole>CROCHET_OUVRANT</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>CROCHET_FERMANT</symbole>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>PLUS</symbole>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</instructionTantque>
</instruction>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionTantque>
<mot_clef>tantque</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
<symbole>INFERIEUR</symbole>
<expArith>
<terme>
<facteur>
<nombre>10</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>faire</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$tab</id_variable>
<optIndice>
<symbole>CROCHET_OUVRANT</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>CROCHET_FERMANT</symbole>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>PLUS</symbole>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</instructionTantque>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,170 +1,51 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$tab</id_variable>
<optTailleTableau>
<symbole>CROCHET_OUVRANT</symbole>
<nombre>10</nombre>
<symbole>CROCHET_FERMANT</symbole>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$tab</id_variable>
<optIndice>
<symbole>CROCHET_OUVRANT</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>4</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>CROCHET_FERMANT</symbole>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>4</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$tab</id_variable>
<optIndice>
<symbole>CROCHET_OUVRANT</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>4</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>CROCHET_FERMANT</symbole>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,110 +1,40 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionTantque>
<mot_clef>tantque</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>faire</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</instructionTantque>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,222 +1,75 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionTantque>
<mot_clef>tantque</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
<symbole>INFERIEUR</symbole>
<expArith>
<terme>
<facteur>
<nombre>10</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>faire</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>PLUS</symbole>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</instructionTantque>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,401 +1,108 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$t0</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$t1</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$123</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$$</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$$$</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$f</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$_</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>f</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$$</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$$$</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$f</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$_</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$123</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>PLUS</symbole>
<terme>
<facteur>
<var>
<id_variable>$_</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>PLUS</symbole>
<terme>
<facteur>
<var>
<id_variable>$$</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$t0</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$123</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$t0</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>PLUS</symbole>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionAppel>
<appelFct>
<id_fonction>f</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$123</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
</listeExpressionsBis>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
<symbole>POINT_VIRGULE</symbole>
</instructionAppel>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -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

View File

@@ -1,80 +1,50 @@
<programme>
<optDecVariables>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
<symbole>ET</symbole>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>2</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,283 +1,93 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$i</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$carre</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$i</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionTantque>
<mot_clef>tantque</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$i</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
<symbole>INFERIEUR</symbole>
<expArith>
<terme>
<facteur>
<nombre>10</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>faire</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$carre</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$i</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
<symbole>FOIS</symbole>
<facteur>
<var>
<id_variable>$i</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$carre</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$i</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$i</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>PLUS</symbole>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</instructionTantque>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -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)

View File

@@ -1,408 +1,155 @@
<programme>
<optDecVariables>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>fact</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$f</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionSi>
<mot_clef>si</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$f</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
<symbole>EGAL</symbole>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
<symbole>OU</symbole>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$f</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
<symbole>EGAL</symbole>
<expArith>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expressionBis>
</expression>
<mot_clef>alors</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionRetour>
<mot_clef>retour</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionRetour>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
<optSinon>
<mot_clef>sinon</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionRetour>
<mot_clef>retour</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<appelFct>
<id_fonction>fact</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$f</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>MOINS</symbole>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
</listeExpressionsBis>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
</facteur>
<termeBis>
<symbole>FOIS</symbole>
<facteur>
<var>
<id_variable>$f</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionRetour>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</optSinon>
</instructionSi>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<mot_clef>lire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<appelFct>
<id_fonction>fact</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
</listeExpressionsBis>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,360 +1,130 @@
<programme>
<optDecVariables>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>fibo</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$n</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionSi>
<mot_clef>si</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$n</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
<symbole>INFERIEUR</symbole>
<expArith>
<terme>
<facteur>
<nombre>2</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>alors</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionRetour>
<mot_clef>retour</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionRetour>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
<optSinon>
<mot_clef>sinon</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionRetour>
<mot_clef>retour</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<appelFct>
<id_fonction>fibo</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$n</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>MOINS</symbole>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
</listeExpressionsBis>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>PLUS</symbole>
<terme>
<facteur>
<appelFct>
<id_fonction>fibo</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$n</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>MOINS</symbole>
<terme>
<facteur>
<nombre>2</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
</listeExpressionsBis>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionRetour>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</optSinon>
</instructionSi>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<appelFct>
<id_fonction>fibo</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<mot_clef>lire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
</listeExpressionsBis>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,759 +1,197 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$b</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>pgcd</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$b</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$c</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$c</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>MOINS</symbole>
<terme>
<facteur>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
<symbole>DIVISE</symbole>
<facteur>
<var>
<id_variable>$b</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
<symbole>FOIS</symbole>
<facteur>
<var>
<id_variable>$b</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionSi>
<mot_clef>si</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$c</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
<symbole>EGAL</symbole>
<expArith>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>alors</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionRetour>
<mot_clef>retour</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$b</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionRetour>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
<optSinon>
<mot_clef>sinon</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionRetour>
<mot_clef>retour</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<appelFct>
<id_fonction>pgcd</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$b</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
<symbole>VIRGULE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$c</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
</listeExpressionsBis>
</listeExpressionsBis>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionRetour>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</optSinon>
</instructionSi>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<mot_clef>lire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$b</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<mot_clef>lire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionSi>
<mot_clef>si</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$b</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
<symbole>INFERIEUR</symbole>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>alors</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<appelFct>
<id_fonction>pgcd</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
<symbole>VIRGULE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$b</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
</listeExpressionsBis>
</listeExpressionsBis>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
<optSinon>
<mot_clef>sinon</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<appelFct>
<id_fonction>pgcd</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$b</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
<symbole>VIRGULE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
</listeExpressionsBis>
</listeExpressionsBis>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</optSinon>
</instructionSi>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -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

View File

@@ -1,127 +1,58 @@
<programme>
<optDecVariables>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionSi>
<mot_clef>si</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
<symbole>OU</symbole>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<mot_clef>lire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expressionBis>
</expression>
<mot_clef>alors</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>5</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
<optSinon>
</optSinon>
</instructionSi>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -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

View File

@@ -1,375 +1,204 @@
<programme>
<optDecVariables>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>3</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
<symbole>OU</symbole>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>4</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>3</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
<symbole>ET</symbole>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>6</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>3</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
<symbole>OU</symbole>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<mot_clef>lire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>3</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
<symbole>ET</symbole>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<mot_clef>lire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
<symbole>OU</symbole>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<mot_clef>lire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>0</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
<symbole>ET</symbole>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<mot_clef>lire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -0,0 +1,33 @@
<prog>
<l_dec>
<varDec>$a</varDec>
</l_dec>
<l_dec>
<foncDec>
main
<l_instr>
<instr_affect>
<var_simple>$a</var_simple>
<lireExp>
</lireExp>
</instr_affect>
<l_instr>
<instr_ecrire>
<opExp>
condexp
<opExp>
inf
<varExp>
<var_simple>$a</var_simple>
</varExp>
<intExp>10</intExp>
</opExp>
<intExp>0</intExp>
<intExp>1</intExp>
</opExp>
</instr_ecrire>
</l_instr>
</l_instr>
</foncDec>
</l_dec>
</prog>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,6 @@
------------------------------------------
base = 2
sommet = 2
0 $a GLOBALE ENTIER 0 -1
1 main GLOBALE FONCTION 0 0
------------------------------------------

View File

@@ -0,0 +1,126 @@
<prog>
<l_dec>
<foncDec>
main
<l_dec>
<varDec>$temp</varDec>
<l_dec>
<varDec>$g</varDec>
<l_dec>
<varDec>$l</varDec>
<l_dec>
<varDec>$v</varDec>
</l_dec>
</l_dec>
</l_dec>
</l_dec>
<l_instr>
<instr_affect>
<var_simple>$temp</var_simple>
<lireExp>
</lireExp>
</instr_affect>
<l_instr>
<instr_affect>
<var_simple>$g</var_simple>
<opExp>
condexp
<opExp>
ou
<opExp>
inf
<varExp>
<var_simple>$temp</var_simple>
</varExp>
<intExp>0</intExp>
</opExp>
<opExp>
egal
<varExp>
<var_simple>$temp</var_simple>
</varExp>
<intExp>0</intExp>
</opExp>
</opExp>
<intExp>1</intExp>
<intExp>0</intExp>
</opExp>
</instr_affect>
<l_instr>
<instr_affect>
<var_simple>$l</var_simple>
<opExp>
condexp
<opExp>
et
<opExp>
inf
<varExp>
<var_simple>$temp</var_simple>
</varExp>
<intExp>100</intExp>
</opExp>
<opExp>
inf
<intExp>0</intExp>
<varExp>
<var_simple>$temp</var_simple>
</varExp>
</opExp>
</opExp>
<intExp>1</intExp>
<intExp>0</intExp>
</opExp>
</instr_affect>
<l_instr>
<instr_affect>
<var_simple>$v</var_simple>
<opExp>
condexp
<opExp>
et
<opExp>
non
<varExp>
<var_simple>$g</var_simple>
</varExp>
</opExp>
<opExp>
non
<varExp>
<var_simple>$l</var_simple>
</varExp>
</opExp>
</opExp>
<intExp>1</intExp>
<intExp>0</intExp>
</opExp>
</instr_affect>
<l_instr>
<instr_ecrire>
<varExp>
<var_simple>$g</var_simple>
</varExp>
</instr_ecrire>
<l_instr>
<instr_ecrire>
<varExp>
<var_simple>$l</var_simple>
</varExp>
</instr_ecrire>
<l_instr>
<instr_ecrire>
<varExp>
<var_simple>$v</var_simple>
</varExp>
</instr_ecrire>
</l_instr>
</l_instr>
</l_instr>
</l_instr>
</l_instr>
</l_instr>
</l_instr>
</foncDec>
</l_dec>
</prog>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
------------------------------------------

View File

@@ -0,0 +1,52 @@
<prog>
<l_dec>
<foncDec>
main
<l_instr>
<instr_ecrire>
<opExp>
condexp
<intExp>1</intExp>
<intExp>0</intExp>
<opExp>
condexp
<intExp>1</intExp>
<intExp>0</intExp>
<intExp>1</intExp>
</opExp>
</opExp>
</instr_ecrire>
<l_instr>
<instr_ecrire>
<opExp>
condexp
<opExp>
condexp
<intExp>1</intExp>
<intExp>0</intExp>
<intExp>1</intExp>
</opExp>
<intExp>0</intExp>
<intExp>1</intExp>
</opExp>
</instr_ecrire>
<l_instr>
<instr_ecrire>
<opExp>
condexp
<intExp>1</intExp>
<intExp>0</intExp>
<opExp>
condexp
<intExp>1</intExp>
<intExp>0</intExp>
<intExp>1</intExp>
</opExp>
</opExp>
</instr_ecrire>
</l_instr>
</l_instr>
</l_instr>
</foncDec>
</l_dec>
</prog>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,5 @@
------------------------------------------
base = 1
sommet = 1
0 main GLOBALE FONCTION 0 0
------------------------------------------

View File

@@ -1,77 +1,42 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>5</nombre>
</facteur>
<termeBis>
<symbole>FOIS</symbole>
<facteur>
<nombre>2</nombre>
</facteur>
<termeBis>
</termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,513 +1,146 @@
<programme>
<optDecVariables>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>max</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$b</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionSi>
<mot_clef>si</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
<symbole>INFERIEUR</symbole>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$b</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>alors</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionRetour>
<mot_clef>retour</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$b</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionRetour>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
<optSinon>
</optSinon>
</instructionSi>
</instruction>
<listeInstructions>
<instruction>
<instructionRetour>
<mot_clef>retour</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionRetour>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$v_1</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
<symbole>VIRGULE</symbole>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$v_2</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$v_1</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<mot_clef>lire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionAffect>
<var>
<id_variable>$v_2</id_variable>
<optIndice>
</optIndice>
</var>
<symbole>EGAL</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<mot_clef>lire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<symbole>PARENTHESE_FERMANTE</symbole>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>POINT_VIRGULE</symbole>
</instructionAffect>
</instruction>
<listeInstructions>
<instruction>
<instructionSi>
<mot_clef>si</mot_clef>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<appelFct>
<id_fonction>max</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$v_1</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
<symbole>VIRGULE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$v_2</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
</listeExpressionsBis>
</listeExpressionsBis>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
<symbole>EGAL</symbole>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$v_1</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<mot_clef>alors</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$v_1</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
<optSinon>
<mot_clef>sinon</mot_clef>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$v_2</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</optSinon>
</instructionSi>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

File diff suppressed because it is too large Load Diff

View File

@@ -1,104 +1,46 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>procedure</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAppel>
<appelFct>
<id_fonction>procedure</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
<symbole>POINT_VIRGULE</symbole>
</instructionAppel>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,91 +1,51 @@
<programme>
<optDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
<symbole>POINT_VIRGULE</symbole>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>5</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>MOINS</symbole>
<terme>
<facteur>
<nombre>3</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
<symbole>PLUS</symbole>
<terme>
<facteur>
<nombre>2</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,134 +1,49 @@
<programme>
<optDecVariables>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>procedure</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
<listeDecVariables>
<declarationVariable>
<mot_clef>entier</mot_clef>
<id_variable>$a</id_variable>
<optTailleTableau>
</optTailleTableau>
</declarationVariable>
<listeDecVariablesBis>
</listeDecVariablesBis>
</listeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<var>
<id_variable>$a</id_variable>
<optIndice>
</optIndice>
</var>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAppel>
<appelFct>
<id_fonction>procedure</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>10</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<listeExpressionsBis>
</listeExpressionsBis>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
<symbole>POINT_VIRGULE</symbole>
</instructionAppel>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -1,93 +1,45 @@
<programme>
<optDecVariables>
</optDecVariables>
<listeDecFonctions>
<declarationFonction>
<id_fonction>procedure</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionEcriture>
<mot_clef>ecrire</mot_clef>
<symbole>PARENTHESE_OUVRANTE</symbole>
<expression>
<conjonction>
<negation>
<comparaison>
<expArith>
<terme>
<facteur>
<nombre>1</nombre>
</facteur>
<termeBis>
</termeBis>
</terme>
<expArithBis>
</expArithBis>
</expArith>
<comparaisonBis>
</comparaisonBis>
</comparaison>
</negation>
<conjonctionBis>
</conjonctionBis>
</conjonction>
<expressionBis>
</expressionBis>
</expression>
<symbole>PARENTHESE_FERMANTE</symbole>
<symbole>POINT_VIRGULE</symbole>
</instructionEcriture>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
<declarationFonction>
<id_fonction>main</id_fonction>
<listeParam>
<symbole>PARENTHESE_OUVRANTE</symbole>
<optListeDecVariables>
</optListeDecVariables>
<symbole>PARENTHESE_FERMANTE</symbole>
</listeParam>
<optDecVariables>
</optDecVariables>
<instructionBloc>
<symbole>ACCOLADE_OUVRANTE</symbole>
<listeInstructions>
<instruction>
<instructionAppel>
<appelFct>
<id_fonction>procedure</id_fonction>
<symbole>PARENTHESE_OUVRANTE</symbole>
<listeExpressions>
</listeExpressions>
<symbole>PARENTHESE_FERMANTE</symbole>
</appelFct>
<symbole>POINT_VIRGULE</symbole>
</instructionAppel>
</instruction>
<listeInstructions>
</listeInstructions>
</listeInstructions>
<symbole>ACCOLADE_FERMANTE</symbole>
</instructionBloc>
</declarationFonction>
<listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</listeDecFonctions>
</programme>
.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

View File

@@ -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

View File

@@ -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);

View File

@@ -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
@@ -82,3 +84,5 @@
#define FIN 29
#define VIRGULE 30
#define POUR 31
#define INTERROGATION 32
#define DEUXPOINTS 33

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -18,7 +18,7 @@ extern FILE *yyin;
char tableSymbole[] = {
';', ',', '(', ')', '[', ']', '{', '}', // Code
'+', '-', '*', '/', // Arithmetique
'<', '=', // Comparaison
'<', '=', '?', ':', // Comparaison
'&','|', '!', // Logique
'\0'
};
@@ -26,7 +26,7 @@ char tableSymbole[] = {
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" );

View File

@@ -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();

View File

@@ -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, "$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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}