EVAL FINAL ESAYYYYYYY
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user