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> .data
<optDecVariables> $$a: .space 4
<listeDecVariables> .text
<declarationVariable> __start:
<mot_clef>entier</mot_clef> jal main
<id_variable>$a</id_variable> li $v0, 10
<optTailleTableau> syscall
</optTailleTableau> main :
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $fp, 0($sp)
</listeDecVariablesBis> move $fp, $sp
</listeDecVariables> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $ra, 0($sp)
</optDecVariables> li $t0, 1
<listeDecFonctions> subi $sp, $sp, 4
<declarationFonction> sw $t0, 0($sp)
<id_fonction>main</id_fonction> lw $t0, 0($sp)
<listeParam> addi $sp, $sp, 4
<symbole>PARENTHESE_OUVRANTE</symbole> sw $t0, $$a
<optListeDecVariables> lw $t0, $$a
</optListeDecVariables> subi $sp, $sp, 4
<symbole>PARENTHESE_FERMANTE</symbole> sw $t0, 0($sp)
</listeParam> lw $t0, 0($sp)
<optDecVariables> addi $sp, $sp, 4
</optDecVariables> move $a0, $t0
<instructionBloc> li $v0, 1
<symbole>ACCOLADE_OUVRANTE</symbole> syscall
<listeInstructions> li $a0, '\n'
<instruction> li $v0, 11
<instructionAffect> syscall
<var> addi $sp, $sp 0 # desallocation variables locales
<id_variable>$a</id_variable> lw $ra, 0($sp)
<optIndice> addi $sp, $sp, 4
</optIndice> lw $fp, 0($sp)
</var> addi $sp, $sp, 4
<symbole>EGAL</symbole> addi $sp, $sp, 4 #ignore valeur de retour
<expression> jr $ra
<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>

View File

@@ -1,118 +1,54 @@
<programme> .data
<optDecVariables> .text
</optDecVariables> __start:
<listeDecFonctions> jal main
<declarationFonction> li $v0, 10
<id_fonction>procedure</id_fonction> syscall
<listeParam> procedure :
<symbole>PARENTHESE_OUVRANTE</symbole> subi $sp, $sp, 4
<optListeDecVariables> sw $fp, 0($sp)
</optListeDecVariables> move $fp, $sp
<symbole>PARENTHESE_FERMANTE</symbole> subi $sp, $sp, 4
</listeParam> sw $ra, 0($sp)
<optDecVariables> li $t0, 1
</optDecVariables> subi $sp, $sp, 4
<instructionBloc> sw $t0, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> lw $t0, 0($sp)
<listeInstructions> addi $sp, $sp, 4
<instruction> sw $t0 4($fp) #Adresse de retour
<instructionRetour> addi $sp, $sp 0 # desallocation variables locales
<mot_clef>retour</mot_clef> lw $ra, 0($sp)
<expression> addi $sp, $sp, 4
<conjonction> lw $fp, 0($sp)
<negation> addi $sp, $sp, 4
<comparaison> jr $ra
<expArith> addi $sp, $sp 0 # desallocation variables locales
<terme> lw $ra, 0($sp)
<facteur> addi $sp, $sp, 4
<nombre>1</nombre> lw $fp, 0($sp)
</facteur> addi $sp, $sp, 4
<termeBis> addi $sp, $sp, 4 #ignore valeur de retour
</termeBis> jr $ra
</terme> main :
<expArithBis> subi $sp, $sp, 4
</expArithBis> sw $fp, 0($sp)
</expArith> move $fp, $sp
<comparaisonBis> subi $sp, $sp, 4
</comparaisonBis> sw $ra, 0($sp)
</comparaison> subi $sp, $sp, 4 #Val Retour
</negation> jal procedure
<conjonctionBis> lw $t0, 0($sp)
</conjonctionBis> addi $sp, $sp, 4
</conjonction> move $a0, $t0
<expressionBis> li $v0, 1
</expressionBis> syscall
</expression> li $a0, '\n'
<symbole>POINT_VIRGULE</symbole> li $v0, 11
</instructionRetour> syscall
</instruction> addi $sp, $sp 0 # desallocation variables locales
<listeInstructions> lw $ra, 0($sp)
</listeInstructions> addi $sp, $sp, 4
</listeInstructions> lw $fp, 0($sp)
<symbole>ACCOLADE_FERMANTE</symbole> addi $sp, $sp, 4
</instructionBloc> addi $sp, $sp, 4 #ignore valeur de retour
</declarationFonction> jr $ra
<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>

View File

@@ -1,146 +1,52 @@
<programme> .data
<optDecVariables> .text
</optDecVariables> __start:
<listeDecFonctions> jal main
<declarationFonction> li $v0, 10
<id_fonction>procedure</id_fonction> syscall
<listeParam> procedure :
<symbole>PARENTHESE_OUVRANTE</symbole> subi $sp, $sp, 4
<optListeDecVariables> sw $fp, 0($sp)
</optListeDecVariables> move $fp, $sp
<symbole>PARENTHESE_FERMANTE</symbole> subi $sp, $sp, 4
</listeParam> sw $ra, 0($sp)
<optDecVariables> subi $sp, $sp, 4
<listeDecVariables> li $t0, 1
<declarationVariable> subi $sp, $sp, 4
<mot_clef>entier</mot_clef> sw $t0, 0($sp)
<id_variable>$a</id_variable> lw $t0, 0($sp)
<optTailleTableau> addi $sp, $sp, 4
</optTailleTableau> sw $t0, -8($fp) #variable locale
</declarationVariable> lw $t0, -8($fp) #variable locale
<listeDecVariablesBis> subi $sp, $sp, 4
</listeDecVariablesBis> sw $t0, 0($sp)
</listeDecVariables> lw $t0, 0($sp)
<symbole>POINT_VIRGULE</symbole> addi $sp, $sp, 4
</optDecVariables> move $a0, $t0
<instructionBloc> li $v0, 1
<symbole>ACCOLADE_OUVRANTE</symbole> syscall
<listeInstructions> li $a0, '\n'
<instruction> li $v0, 11
<instructionAffect> syscall
<var> addi $sp, $sp 4 # desallocation variables locales
<id_variable>$a</id_variable> lw $ra, 0($sp)
<optIndice> addi $sp, $sp, 4
</optIndice> lw $fp, 0($sp)
</var> addi $sp, $sp, 4
<symbole>EGAL</symbole> addi $sp, $sp, 4 #ignore valeur de retour
<expression> jr $ra
<conjonction> main :
<negation> subi $sp, $sp, 4
<comparaison> sw $fp, 0($sp)
<expArith> move $fp, $sp
<terme> subi $sp, $sp, 4
<facteur> sw $ra, 0($sp)
<nombre>1</nombre> subi $sp, $sp, 4 #Val Retour
</facteur> jal procedure
<termeBis> addi $sp, $sp 0 # desallocation variables locales
</termeBis> lw $ra, 0($sp)
</terme> addi $sp, $sp, 4
<expArithBis> lw $fp, 0($sp)
</expArithBis> addi $sp, $sp, 4
</expArith> addi $sp, $sp, 4 #ignore valeur de retour
<comparaisonBis> jr $ra
</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>

View File

@@ -1,112 +1,40 @@
<programme> .data
<optDecVariables> $$a: .space 4
<listeDecVariables> .text
<declarationVariable> __start:
<mot_clef>entier</mot_clef> jal main
<id_variable>$a</id_variable> li $v0, 10
<optTailleTableau> syscall
</optTailleTableau> main :
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $fp, 0($sp)
</listeDecVariablesBis> move $fp, $sp
</listeDecVariables> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $ra, 0($sp)
</optDecVariables> li $t0, 1
<listeDecFonctions> subi $sp, $sp, 4
<declarationFonction> sw $t0, 0($sp)
<id_fonction>main</id_fonction> lw $t0, 0($sp)
<listeParam> addi $sp, $sp, 4
<symbole>PARENTHESE_OUVRANTE</symbole> beq $t0 $zero e0
<optListeDecVariables> li $t0, 1
</optListeDecVariables> subi $sp, $sp, 4
<symbole>PARENTHESE_FERMANTE</symbole> sw $t0, 0($sp)
</listeParam> lw $t0, 0($sp)
<optDecVariables> addi $sp, $sp, 4
</optDecVariables> move $a0, $t0
<instructionBloc> li $v0, 1
<symbole>ACCOLADE_OUVRANTE</symbole> syscall
<listeInstructions> li $a0, '\n'
<instruction> li $v0, 11
<instructionSi> syscall
<mot_clef>si</mot_clef> j e1
<expression> e0:
<conjonction> e1:
<negation> addi $sp, $sp 0 # desallocation variables locales
<comparaison> lw $ra, 0($sp)
<expArith> addi $sp, $sp, 4
<terme> lw $fp, 0($sp)
<facteur> addi $sp, $sp, 4
<nombre>1</nombre> addi $sp, $sp, 4 #ignore valeur de retour
</facteur> jr $ra
<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>

View File

@@ -1,154 +1,51 @@
<programme> .data
<optDecVariables> $$a: .space 4
<listeDecVariables> .text
<declarationVariable> __start:
<mot_clef>entier</mot_clef> jal main
<id_variable>$a</id_variable> li $v0, 10
<optTailleTableau> syscall
</optTailleTableau> main :
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $fp, 0($sp)
</listeDecVariablesBis> move $fp, $sp
</listeDecVariables> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $ra, 0($sp)
</optDecVariables> li $t0, 0
<listeDecFonctions> subi $sp, $sp, 4
<declarationFonction> sw $t0, 0($sp)
<id_fonction>main</id_fonction> lw $t0, 0($sp)
<listeParam> addi $sp, $sp, 4
<symbole>PARENTHESE_OUVRANTE</symbole> beq $t0 $zero e0
<optListeDecVariables> li $t0, 1
</optListeDecVariables> subi $sp, $sp, 4
<symbole>PARENTHESE_FERMANTE</symbole> sw $t0, 0($sp)
</listeParam> lw $t0, 0($sp)
<optDecVariables> addi $sp, $sp, 4
</optDecVariables> move $a0, $t0
<instructionBloc> li $v0, 1
<symbole>ACCOLADE_OUVRANTE</symbole> syscall
<listeInstructions> li $a0, '\n'
<instruction> li $v0, 11
<instructionSi> syscall
<mot_clef>si</mot_clef> j e1
<expression> e0:
<conjonction> li $t0, 0
<negation> subi $sp, $sp, 4
<comparaison> sw $t0, 0($sp)
<expArith> lw $t0, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> move $a0, $t0
<nombre>0</nombre> li $v0, 1
</facteur> syscall
<termeBis> li $a0, '\n'
</termeBis> li $v0, 11
</terme> syscall
<expArithBis> e1:
</expArithBis> addi $sp, $sp 0 # desallocation variables locales
</expArith> lw $ra, 0($sp)
<comparaisonBis> addi $sp, $sp, 4
</comparaisonBis> lw $fp, 0($sp)
</comparaison> addi $sp, $sp, 4
</negation> addi $sp, $sp, 4 #ignore valeur de retour
<conjonctionBis> jr $ra
</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>

View File

@@ -1,487 +1,140 @@
<programme> .data
<optDecVariables> $$tab: .space 40
<listeDecVariables> .text
<declarationVariable> __start:
<mot_clef>entier</mot_clef> jal main
<id_variable>$tab</id_variable> li $v0, 10
<optTailleTableau> syscall
<symbole>CROCHET_OUVRANT</symbole> main :
<nombre>10</nombre> subi $sp, $sp, 4
<symbole>CROCHET_FERMANT</symbole> sw $fp, 0($sp)
</optTailleTableau> move $fp, $sp
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $ra, 0($sp)
</listeDecVariablesBis> subi $sp, $sp, 4
</listeDecVariables> li $t0, 0
<symbole>POINT_VIRGULE</symbole> subi $sp, $sp, 4
</optDecVariables> sw $t0, 0($sp)
<listeDecFonctions> lw $t0, 0($sp)
<declarationFonction> addi $sp, $sp, 4
<id_fonction>main</id_fonction> sw $t0, -8($fp) #variable locale
<listeParam> e0:
<symbole>PARENTHESE_OUVRANTE</symbole> lw $t0, -8($fp) #variable locale
<optListeDecVariables> subi $sp, $sp, 4
</optListeDecVariables> sw $t0, 0($sp)
<symbole>PARENTHESE_FERMANTE</symbole> li $t0, 10
</listeParam> subi $sp, $sp, 4
<optDecVariables> sw $t0, 0($sp)
<listeDecVariables> lw $t2, 0($sp)
<declarationVariable> addi $sp, $sp, 4
<mot_clef>entier</mot_clef> lw $t1, 0($sp)
<id_variable>$a</id_variable> addi $sp, $sp, 4
<optTailleTableau> li $t0, 1
</optTailleTableau> blt $t1, $t2 e2
</declarationVariable> li $t0, 0
<listeDecVariablesBis> e2:
</listeDecVariablesBis> subi $sp, $sp, 4
</listeDecVariables> sw $t0, 0($sp)
<symbole>POINT_VIRGULE</symbole> lw $t0, 0($sp)
</optDecVariables> addi $sp, $sp, 4
<instructionBloc> beq $t0 $0 e1
<symbole>ACCOLADE_OUVRANTE</symbole> lw $t0, -8($fp) #variable locale
<listeInstructions> subi $sp, $sp, 4
<instruction> sw $t0, 0($sp)
<instructionAffect> lw $t0, -8($fp) #variable locale
<var> subi $sp, $sp, 4
<id_variable>$a</id_variable> sw $t0, 0($sp)
<optIndice> lw $t4, 0($sp)
</optIndice> addi $sp, $sp, 4
</var> add $t4,$t4,$t4
<symbole>EGAL</symbole> add $t4,$t4,$t4
<expression> lw $t0, 0($sp)
<conjonction> addi $sp, $sp, 4
<negation> sw $t0, $$tab($t4)
<comparaison> lw $t0, -8($fp) #variable locale
<expArith> subi $sp, $sp, 4
<terme> sw $t0, 0($sp)
<facteur> li $t0, 1
<nombre>0</nombre> subi $sp, $sp, 4
</facteur> sw $t0, 0($sp)
<termeBis> lw $t2, 0($sp)
</termeBis> addi $sp, $sp, 4
</terme> lw $t1, 0($sp)
<expArithBis> addi $sp, $sp, 4
</expArithBis> add $t0, $t1, $t2
</expArith> subi $sp, $sp, 4
<comparaisonBis> sw $t0, 0($sp)
</comparaisonBis> lw $t0, 0($sp)
</comparaison> addi $sp, $sp, 4
</negation> sw $t0, -8($fp) #variable locale
<conjonctionBis> j e0
</conjonctionBis> e1:
</conjonction> li $t0, 0
<expressionBis> subi $sp, $sp, 4
</expressionBis> sw $t0, 0($sp)
</expression> lw $t0, 0($sp)
<symbole>POINT_VIRGULE</symbole> addi $sp, $sp, 4
</instructionAffect> sw $t0, -8($fp) #variable locale
</instruction> e3:
<listeInstructions> lw $t0, -8($fp) #variable locale
<instruction> subi $sp, $sp, 4
<instructionTantque> sw $t0, 0($sp)
<mot_clef>tantque</mot_clef> li $t0, 10
<expression> subi $sp, $sp, 4
<conjonction> sw $t0, 0($sp)
<negation> lw $t2, 0($sp)
<comparaison> addi $sp, $sp, 4
<expArith> lw $t1, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> li $t0, 1
<var> blt $t1, $t2 e5
<id_variable>$a</id_variable> li $t0, 0
<optIndice> e5:
</optIndice> subi $sp, $sp, 4
</var> sw $t0, 0($sp)
</facteur> lw $t0, 0($sp)
<termeBis> addi $sp, $sp, 4
</termeBis> beq $t0 $0 e4
</terme> lw $t0, -8($fp) #variable locale
<expArithBis> subi $sp, $sp, 4
</expArithBis> sw $t0, 0($sp)
</expArith> lw $t4, 0($sp)
<comparaisonBis> addi $sp, $sp, 4
<symbole>INFERIEUR</symbole> add $t4,$t4,$t4
<expArith> add $t4,$t4,$t4
<terme> lw $t0, $$tab($t4)
<facteur> subi $sp, $sp, 4
<nombre>10</nombre> sw $t0, 0($sp)
</facteur> lw $t0, 0($sp)
<termeBis> addi $sp, $sp, 4
</termeBis> move $a0, $t0
</terme> li $v0, 1
<expArithBis> syscall
</expArithBis> li $a0, '\n'
</expArith> li $v0, 11
<comparaisonBis> syscall
</comparaisonBis> lw $t0, -8($fp) #variable locale
</comparaisonBis> subi $sp, $sp, 4
</comparaison> sw $t0, 0($sp)
</negation> li $t0, 1
<conjonctionBis> subi $sp, $sp, 4
</conjonctionBis> sw $t0, 0($sp)
</conjonction> lw $t2, 0($sp)
<expressionBis> addi $sp, $sp, 4
</expressionBis> lw $t1, 0($sp)
</expression> addi $sp, $sp, 4
<mot_clef>faire</mot_clef> add $t0, $t1, $t2
<instructionBloc> subi $sp, $sp, 4
<symbole>ACCOLADE_OUVRANTE</symbole> sw $t0, 0($sp)
<listeInstructions> lw $t0, 0($sp)
<instruction> addi $sp, $sp, 4
<instructionAffect> sw $t0, -8($fp) #variable locale
<var> j e3
<id_variable>$tab</id_variable> e4:
<optIndice> addi $sp, $sp 4 # desallocation variables locales
<symbole>CROCHET_OUVRANT</symbole> lw $ra, 0($sp)
<expression> addi $sp, $sp, 4
<conjonction> lw $fp, 0($sp)
<negation> addi $sp, $sp, 4
<comparaison> addi $sp, $sp, 4 #ignore valeur de retour
<expArith> jr $ra
<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>

View File

@@ -1,170 +1,51 @@
<programme> .data
<optDecVariables> $$tab: .space 40
<listeDecVariables> .text
<declarationVariable> __start:
<mot_clef>entier</mot_clef> jal main
<id_variable>$tab</id_variable> li $v0, 10
<optTailleTableau> syscall
<symbole>CROCHET_OUVRANT</symbole> main :
<nombre>10</nombre> subi $sp, $sp, 4
<symbole>CROCHET_FERMANT</symbole> sw $fp, 0($sp)
</optTailleTableau> move $fp, $sp
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $ra, 0($sp)
</listeDecVariablesBis> li $t0, 4
</listeDecVariables> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $t0, 0($sp)
</optDecVariables> li $t0, 4
<listeDecFonctions> subi $sp, $sp, 4
<declarationFonction> sw $t0, 0($sp)
<id_fonction>main</id_fonction> lw $t4, 0($sp)
<listeParam> addi $sp, $sp, 4
<symbole>PARENTHESE_OUVRANTE</symbole> add $t4,$t4,$t4
<optListeDecVariables> add $t4,$t4,$t4
</optListeDecVariables> lw $t0, 0($sp)
<symbole>PARENTHESE_FERMANTE</symbole> addi $sp, $sp, 4
</listeParam> sw $t0, $$tab($t4)
<optDecVariables> li $t0, 4
</optDecVariables> subi $sp, $sp, 4
<instructionBloc> sw $t0, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> lw $t4, 0($sp)
<listeInstructions> addi $sp, $sp, 4
<instruction> add $t4,$t4,$t4
<instructionAffect> add $t4,$t4,$t4
<var> lw $t0, $$tab($t4)
<id_variable>$tab</id_variable> subi $sp, $sp, 4
<optIndice> sw $t0, 0($sp)
<symbole>CROCHET_OUVRANT</symbole> lw $t0, 0($sp)
<expression> addi $sp, $sp, 4
<conjonction> move $a0, $t0
<negation> li $v0, 1
<comparaison> syscall
<expArith> li $a0, '\n'
<terme> li $v0, 11
<facteur> syscall
<nombre>4</nombre> addi $sp, $sp 0 # desallocation variables locales
</facteur> lw $ra, 0($sp)
<termeBis> addi $sp, $sp, 4
</termeBis> lw $fp, 0($sp)
</terme> addi $sp, $sp, 4
<expArithBis> addi $sp, $sp, 4 #ignore valeur de retour
</expArithBis> jr $ra
</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>

View File

@@ -1,110 +1,40 @@
<programme> .data
<optDecVariables> $$a: .space 4
<listeDecVariables> .text
<declarationVariable> __start:
<mot_clef>entier</mot_clef> jal main
<id_variable>$a</id_variable> li $v0, 10
<optTailleTableau> syscall
</optTailleTableau> main :
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $fp, 0($sp)
</listeDecVariablesBis> move $fp, $sp
</listeDecVariables> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $ra, 0($sp)
</optDecVariables> e0:
<listeDecFonctions> li $t0, 0
<declarationFonction> subi $sp, $sp, 4
<id_fonction>main</id_fonction> sw $t0, 0($sp)
<listeParam> lw $t0, 0($sp)
<symbole>PARENTHESE_OUVRANTE</symbole> addi $sp, $sp, 4
<optListeDecVariables> beq $t0 $0 e1
</optListeDecVariables> li $t0, 1
<symbole>PARENTHESE_FERMANTE</symbole> subi $sp, $sp, 4
</listeParam> sw $t0, 0($sp)
<optDecVariables> lw $t0, 0($sp)
</optDecVariables> addi $sp, $sp, 4
<instructionBloc> move $a0, $t0
<symbole>ACCOLADE_OUVRANTE</symbole> li $v0, 1
<listeInstructions> syscall
<instruction> li $a0, '\n'
<instructionTantque> li $v0, 11
<mot_clef>tantque</mot_clef> syscall
<expression> j e0
<conjonction> e1:
<negation> addi $sp, $sp 0 # desallocation variables locales
<comparaison> lw $ra, 0($sp)
<expArith> addi $sp, $sp, 4
<terme> lw $fp, 0($sp)
<facteur> addi $sp, $sp, 4
<nombre>0</nombre> addi $sp, $sp, 4 #ignore valeur de retour
</facteur> jr $ra
<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>

View File

@@ -1,222 +1,75 @@
<programme> .data
<optDecVariables> $$a: .space 4
<listeDecVariables> .text
<declarationVariable> __start:
<mot_clef>entier</mot_clef> jal main
<id_variable>$a</id_variable> li $v0, 10
<optTailleTableau> syscall
</optTailleTableau> main :
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $fp, 0($sp)
</listeDecVariablesBis> move $fp, $sp
</listeDecVariables> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $ra, 0($sp)
</optDecVariables> li $t0, 0
<listeDecFonctions> subi $sp, $sp, 4
<declarationFonction> sw $t0, 0($sp)
<id_fonction>main</id_fonction> lw $t0, 0($sp)
<listeParam> addi $sp, $sp, 4
<symbole>PARENTHESE_OUVRANTE</symbole> sw $t0, $$a
<optListeDecVariables> e0:
</optListeDecVariables> lw $t0, $$a
<symbole>PARENTHESE_FERMANTE</symbole> subi $sp, $sp, 4
</listeParam> sw $t0, 0($sp)
<optDecVariables> li $t0, 10
</optDecVariables> subi $sp, $sp, 4
<instructionBloc> sw $t0, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> lw $t2, 0($sp)
<listeInstructions> addi $sp, $sp, 4
<instruction> lw $t1, 0($sp)
<instructionAffect> addi $sp, $sp, 4
<var> li $t0, 1
<id_variable>$a</id_variable> blt $t1, $t2 e2
<optIndice> li $t0, 0
</optIndice> e2:
</var> subi $sp, $sp, 4
<symbole>EGAL</symbole> sw $t0, 0($sp)
<expression> lw $t0, 0($sp)
<conjonction> addi $sp, $sp, 4
<negation> beq $t0 $0 e1
<comparaison> lw $t0, $$a
<expArith> subi $sp, $sp, 4
<terme> sw $t0, 0($sp)
<facteur> lw $t0, 0($sp)
<nombre>0</nombre> addi $sp, $sp, 4
</facteur> move $a0, $t0
<termeBis> li $v0, 1
</termeBis> syscall
</terme> li $a0, '\n'
<expArithBis> li $v0, 11
</expArithBis> syscall
</expArith> lw $t0, $$a
<comparaisonBis> subi $sp, $sp, 4
</comparaisonBis> sw $t0, 0($sp)
</comparaison> li $t0, 1
</negation> subi $sp, $sp, 4
<conjonctionBis> sw $t0, 0($sp)
</conjonctionBis> lw $t2, 0($sp)
</conjonction> addi $sp, $sp, 4
<expressionBis> lw $t1, 0($sp)
</expressionBis> addi $sp, $sp, 4
</expression> add $t0, $t1, $t2
<symbole>POINT_VIRGULE</symbole> subi $sp, $sp, 4
</instructionAffect> sw $t0, 0($sp)
</instruction> lw $t0, 0($sp)
<listeInstructions> addi $sp, $sp, 4
<instruction> sw $t0, $$a
<instructionTantque> j e0
<mot_clef>tantque</mot_clef> e1:
<expression> addi $sp, $sp 0 # desallocation variables locales
<conjonction> lw $ra, 0($sp)
<negation> addi $sp, $sp, 4
<comparaison> lw $fp, 0($sp)
<expArith> addi $sp, $sp, 4
<terme> addi $sp, $sp, 4 #ignore valeur de retour
<facteur> jr $ra
<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>

View File

@@ -1,401 +1,108 @@
<programme> .data
<optDecVariables> $$t0: .space 4
<listeDecVariables> $$t1: .space 4
<declarationVariable> $$123: .space 4
<mot_clef>entier</mot_clef> $$: .space 4
<id_variable>$t0</id_variable> $$$: .space 4
<optTailleTableau> $$$$: .space 4
</optTailleTableau> $$f: .space 4
</declarationVariable> $$_: .space 4
<listeDecVariablesBis> .text
<symbole>VIRGULE</symbole> __start:
<declarationVariable> jal main
<mot_clef>entier</mot_clef> li $v0, 10
<id_variable>$t1</id_variable> syscall
<optTailleTableau> f :
</optTailleTableau> subi $sp, $sp, 4
</declarationVariable> sw $fp, 0($sp)
<listeDecVariablesBis> move $fp, $sp
<symbole>VIRGULE</symbole> subi $sp, $sp, 4
<declarationVariable> sw $ra, 0($sp)
<mot_clef>entier</mot_clef> subi $sp, $sp, 4
<id_variable>$123</id_variable> subi $sp, $sp, 4
<optTailleTableau> subi $sp, $sp, 4
</optTailleTableau> lw $t0, $$123
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $t0, 0($sp)
<symbole>VIRGULE</symbole> lw $t0, -16($fp) #variable locale
<declarationVariable> subi $sp, $sp, 4
<mot_clef>entier</mot_clef> sw $t0, 0($sp)
<id_variable>$</id_variable> lw $t2, 0($sp)
<optTailleTableau> addi $sp, $sp, 4
</optTailleTableau> lw $t1, 0($sp)
</declarationVariable> addi $sp, $sp, 4
<listeDecVariablesBis> add $t0, $t1, $t2
<symbole>VIRGULE</symbole> subi $sp, $sp, 4
<declarationVariable> sw $t0, 0($sp)
<mot_clef>entier</mot_clef> lw $t0, 4($fp) #variable argument $$
<id_variable>$$</id_variable> subi $sp, $sp, 4
<optTailleTableau> sw $t0, 0($sp)
</optTailleTableau> lw $t2, 0($sp)
</declarationVariable> addi $sp, $sp, 4
<listeDecVariablesBis> lw $t1, 0($sp)
<symbole>VIRGULE</symbole> addi $sp, $sp, 4
<declarationVariable> add $t0, $t1, $t2
<mot_clef>entier</mot_clef> subi $sp, $sp, 4
<id_variable>$$$</id_variable> sw $t0, 0($sp)
<optTailleTableau> lw $t0, 0($sp)
</optTailleTableau> addi $sp, $sp, 4
</declarationVariable> sw $t0, $$
<listeDecVariablesBis> lw $t0, $$
<symbole>VIRGULE</symbole> subi $sp, $sp, 4
<declarationVariable> sw $t0, 0($sp)
<mot_clef>entier</mot_clef> lw $t0, 0($sp)
<id_variable>$f</id_variable> addi $sp, $sp, 4
<optTailleTableau> move $a0, $t0
</optTailleTableau> li $v0, 1
</declarationVariable> syscall
<listeDecVariablesBis> li $a0, '\n'
<symbole>VIRGULE</symbole> li $v0, 11
<declarationVariable> syscall
<mot_clef>entier</mot_clef> addi $sp, $sp 12 # desallocation variables locales
<id_variable>$_</id_variable> lw $ra, 0($sp)
<optTailleTableau> addi $sp, $sp, 4
</optTailleTableau> lw $fp, 0($sp)
</declarationVariable> addi $sp, $sp, 4
<listeDecVariablesBis> addi $sp, $sp, 4 #ignore valeur de retour
</listeDecVariablesBis> jr $ra
</listeDecVariablesBis> main :
</listeDecVariablesBis> subi $sp, $sp, 4
</listeDecVariablesBis> sw $fp, 0($sp)
</listeDecVariablesBis> move $fp, $sp
</listeDecVariablesBis> subi $sp, $sp, 4
</listeDecVariablesBis> sw $ra, 0($sp)
</listeDecVariablesBis> li $t0, 1
</listeDecVariables> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $t0, 0($sp)
</optDecVariables> lw $t0, 0($sp)
<listeDecFonctions> addi $sp, $sp, 4
<declarationFonction> sw $t0, $$t0
<id_fonction>f</id_fonction> lw $t0, $$t0
<listeParam> subi $sp, $sp, 4
<symbole>PARENTHESE_OUVRANTE</symbole> sw $t0, 0($sp)
<optListeDecVariables> li $t0, 0
<listeDecVariables> subi $sp, $sp, 4
<declarationVariable> sw $t0, 0($sp)
<mot_clef>entier</mot_clef> lw $t2, 0($sp)
<id_variable>$$</id_variable> addi $sp, $sp, 4
<optTailleTableau> lw $t1, 0($sp)
</optTailleTableau> addi $sp, $sp, 4
</declarationVariable> add $t0, $t1, $t2
<listeDecVariablesBis> subi $sp, $sp, 4
</listeDecVariablesBis> sw $t0, 0($sp)
</listeDecVariables> lw $t0, 0($sp)
</optListeDecVariables> addi $sp, $sp, 4
<symbole>PARENTHESE_FERMANTE</symbole> sw $t0, $$123
</listeParam> subi $sp, $sp, 4 #Val Retour
<optDecVariables> lw $t0, $$123
<listeDecVariables> subi $sp, $sp, 4
<declarationVariable> sw $t0, 0($sp)
<mot_clef>entier</mot_clef> jal f
<id_variable>$$$</id_variable> addi $sp, $sp, 4 #désalocation des arguments
<optTailleTableau> addi $sp, $sp 0 # desallocation variables locales
</optTailleTableau> lw $ra, 0($sp)
</declarationVariable> addi $sp, $sp, 4
<listeDecVariablesBis> lw $fp, 0($sp)
<symbole>VIRGULE</symbole> addi $sp, $sp, 4
<declarationVariable> addi $sp, $sp, 4 #ignore valeur de retour
<mot_clef>entier</mot_clef> jr $ra
<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>

View File

@@ -16,11 +16,15 @@ sw $t0, 0($sp)
lw $t1, 0($sp) lw $t1, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
beq $zero, $t1, e1 beq $zero, $t1, e1
subi $sp, $sp, 4
sw $t1, 0($sp)
li $t0, 2 li $t0, 2
subi $sp, $sp, 4 subi $sp, $sp, 4
sw $t0, 0($sp) sw $t0, 0($sp)
lw $t2, 0($sp) lw $t2, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
lw $t1, 0($sp)
addi $sp, $sp, 4
beq $zero, $t2, e1 beq $zero, $t2, e1
and $t0, $t1, $t2 and $t0, $t1, $t2
j e0 j e0

View File

@@ -1,80 +1,50 @@
<programme> .data
<optDecVariables> .text
</optDecVariables> __start:
<listeDecFonctions> jal main
<declarationFonction> li $v0, 10
<id_fonction>main</id_fonction> syscall
<listeParam> main :
<symbole>PARENTHESE_OUVRANTE</symbole> subi $sp, $sp, 4
<optListeDecVariables> sw $fp, 0($sp)
</optListeDecVariables> move $fp, $sp
<symbole>PARENTHESE_FERMANTE</symbole> subi $sp, $sp, 4
</listeParam> sw $ra, 0($sp)
<optDecVariables> li $t0, 1
</optDecVariables> subi $sp, $sp, 4
<instructionBloc> sw $t0, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> lw $t1, 0($sp)
<listeInstructions> addi $sp, $sp, 4
<instruction> beq $zero, $t1, e1
<instructionEcriture> subi $sp, $sp, 4
<mot_clef>ecrire</mot_clef> sw $t1, 0($sp)
<symbole>PARENTHESE_OUVRANTE</symbole> li $t0, 2
<expression> subi $sp, $sp, 4
<conjonction> sw $t0, 0($sp)
<negation> lw $t2, 0($sp)
<comparaison> addi $sp, $sp, 4
<expArith> lw $t1, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> beq $zero, $t2, e1
<nombre>1</nombre> and $t0, $t1, $t2
</facteur> j e0
<termeBis> e1 :
</termeBis> li $t0 0
</terme> e0 :
<expArithBis> subi $sp, $sp, 4
</expArithBis> sw $t0, 0($sp)
</expArith> lw $t0, 0($sp)
<comparaisonBis> addi $sp, $sp, 4
</comparaisonBis> move $a0, $t0
</comparaison> li $v0, 1
</negation> syscall
<conjonctionBis> li $a0, '\n'
<symbole>ET</symbole> li $v0, 11
<negation> syscall
<comparaison> addi $sp, $sp 0 # desallocation variables locales
<expArith> lw $ra, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> lw $fp, 0($sp)
<nombre>2</nombre> addi $sp, $sp, 4
</facteur> addi $sp, $sp, 4 #ignore valeur de retour
<termeBis> jr $ra
</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>

View File

@@ -1,283 +1,93 @@
<programme> .data
<optDecVariables> $$i: .space 4
<listeDecVariables> $$carre: .space 4
<declarationVariable> .text
<mot_clef>entier</mot_clef> __start:
<id_variable>$i</id_variable> jal main
<optTailleTableau> li $v0, 10
</optTailleTableau> syscall
</declarationVariable> main :
<listeDecVariablesBis> subi $sp, $sp, 4
<symbole>VIRGULE</symbole> sw $fp, 0($sp)
<declarationVariable> move $fp, $sp
<mot_clef>entier</mot_clef> subi $sp, $sp, 4
<id_variable>$carre</id_variable> sw $ra, 0($sp)
<optTailleTableau> li $t0, 0
</optTailleTableau> subi $sp, $sp, 4
</declarationVariable> sw $t0, 0($sp)
<listeDecVariablesBis> lw $t0, 0($sp)
</listeDecVariablesBis> addi $sp, $sp, 4
</listeDecVariablesBis> sw $t0, $$i
</listeDecVariables> e0:
<symbole>POINT_VIRGULE</symbole> lw $t0, $$i
</optDecVariables> subi $sp, $sp, 4
<listeDecFonctions> sw $t0, 0($sp)
<declarationFonction> li $t0, 10
<id_fonction>main</id_fonction> subi $sp, $sp, 4
<listeParam> sw $t0, 0($sp)
<symbole>PARENTHESE_OUVRANTE</symbole> lw $t2, 0($sp)
<optListeDecVariables> addi $sp, $sp, 4
</optListeDecVariables> lw $t1, 0($sp)
<symbole>PARENTHESE_FERMANTE</symbole> addi $sp, $sp, 4
</listeParam> li $t0, 1
<optDecVariables> blt $t1, $t2 e2
</optDecVariables> li $t0, 0
<instructionBloc> e2:
<symbole>ACCOLADE_OUVRANTE</symbole> subi $sp, $sp, 4
<listeInstructions> sw $t0, 0($sp)
<instruction> lw $t0, 0($sp)
<instructionAffect> addi $sp, $sp, 4
<var> beq $t0 $0 e1
<id_variable>$i</id_variable> lw $t0, $$i
<optIndice> subi $sp, $sp, 4
</optIndice> sw $t0, 0($sp)
</var> lw $t0, $$i
<symbole>EGAL</symbole> subi $sp, $sp, 4
<expression> sw $t0, 0($sp)
<conjonction> lw $t2, 0($sp)
<negation> addi $sp, $sp, 4
<comparaison> lw $t1, 0($sp)
<expArith> addi $sp, $sp, 4
<terme> mult $t1, $t2
<facteur> mflo $t0
<nombre>0</nombre> subi $sp, $sp, 4
</facteur> sw $t0, 0($sp)
<termeBis> lw $t0, 0($sp)
</termeBis> addi $sp, $sp, 4
</terme> sw $t0, $$carre
<expArithBis> lw $t0, $$carre
</expArithBis> subi $sp, $sp, 4
</expArith> sw $t0, 0($sp)
<comparaisonBis> lw $t0, 0($sp)
</comparaisonBis> addi $sp, $sp, 4
</comparaison> move $a0, $t0
</negation> li $v0, 1
<conjonctionBis> syscall
</conjonctionBis> li $a0, '\n'
</conjonction> li $v0, 11
<expressionBis> syscall
</expressionBis> lw $t0, $$i
</expression> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $t0, 0($sp)
</instructionAffect> li $t0, 1
</instruction> subi $sp, $sp, 4
<listeInstructions> sw $t0, 0($sp)
<instruction> lw $t2, 0($sp)
<instructionTantque> addi $sp, $sp, 4
<mot_clef>tantque</mot_clef> lw $t1, 0($sp)
<expression> addi $sp, $sp, 4
<conjonction> add $t0, $t1, $t2
<negation> subi $sp, $sp, 4
<comparaison> sw $t0, 0($sp)
<expArith> lw $t0, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> sw $t0, $$i
<var> j e0
<id_variable>$i</id_variable> e1:
<optIndice> addi $sp, $sp 0 # desallocation variables locales
</optIndice> lw $ra, 0($sp)
</var> addi $sp, $sp, 4
</facteur> lw $fp, 0($sp)
<termeBis> addi $sp, $sp, 4
</termeBis> addi $sp, $sp, 4 #ignore valeur de retour
</terme> jr $ra
<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>

View File

@@ -49,11 +49,10 @@ subi $sp, $sp, 4
sw $t0, 0($sp) sw $t0, 0($sp)
lw $t2, 0($sp) lw $t2, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
e2 : or $t0, $zero, $t2
or $t0, $t1, $t2
j e3 j e3
e1 : e2 :
or $t0, $t1, $t2 move $t0 $t1
e3 : e3 :
subi $sp, $sp, 4 subi $sp, $sp, 4
sw $t0, 0($sp) sw $t0, 0($sp)

View File

@@ -1,408 +1,155 @@
<programme> .data
<optDecVariables> .text
</optDecVariables> __start:
<listeDecFonctions> jal main
<declarationFonction> li $v0, 10
<id_fonction>fact</id_fonction> syscall
<listeParam> fact :
<symbole>PARENTHESE_OUVRANTE</symbole> subi $sp, $sp, 4
<optListeDecVariables> sw $fp, 0($sp)
<listeDecVariables> move $fp, $sp
<declarationVariable> subi $sp, $sp, 4
<mot_clef>entier</mot_clef> sw $ra, 0($sp)
<id_variable>$f</id_variable> lw $t0, 4($fp) #variable argument $f
<optTailleTableau> subi $sp, $sp, 4
</optTailleTableau> sw $t0, 0($sp)
</declarationVariable> li $t0, 1
<listeDecVariablesBis> subi $sp, $sp, 4
</listeDecVariablesBis> sw $t0, 0($sp)
</listeDecVariables> lw $t2, 0($sp)
</optListeDecVariables> addi $sp, $sp, 4
<symbole>PARENTHESE_FERMANTE</symbole> lw $t1, 0($sp)
</listeParam> addi $sp, $sp, 4
<optDecVariables> li $t0, 1
</optDecVariables> beq $t1, $t2 e4
<instructionBloc> li $t0, 0
<symbole>ACCOLADE_OUVRANTE</symbole> e4:
<listeInstructions> subi $sp, $sp, 4
<instruction> sw $t0, 0($sp)
<instructionSi> lw $t1, 0($sp)
<mot_clef>si</mot_clef> addi $sp, $sp, 4
<expression> beq $zero, $t1, e0
<conjonction> j e2
<negation> e0 :
<comparaison> lw $t0, 4($fp) #variable argument $f
<expArith> subi $sp, $sp, 4
<terme> sw $t0, 0($sp)
<facteur> li $t0, 0
<var> subi $sp, $sp, 4
<id_variable>$f</id_variable> sw $t0, 0($sp)
<optIndice> lw $t2, 0($sp)
</optIndice> addi $sp, $sp, 4
</var> lw $t1, 0($sp)
</facteur> addi $sp, $sp, 4
<termeBis> li $t0, 1
</termeBis> beq $t1, $t2 e5
</terme> li $t0, 0
<expArithBis> e5:
</expArithBis> subi $sp, $sp, 4
</expArith> sw $t0, 0($sp)
<comparaisonBis> lw $t2, 0($sp)
<symbole>EGAL</symbole> addi $sp, $sp, 4
<expArith> or $t0, $zero, $t2
<terme> j e3
<facteur> e2 :
<nombre>1</nombre> move $t0 $t1
</facteur> e3 :
<termeBis> subi $sp, $sp, 4
</termeBis> sw $t0, 0($sp)
</terme> lw $t0, 0($sp)
<expArithBis> addi $sp, $sp, 4
</expArithBis> beq $t0 $zero e6
</expArith> li $t0, 1
<comparaisonBis> subi $sp, $sp, 4
</comparaisonBis> sw $t0, 0($sp)
</comparaisonBis> lw $t0, 0($sp)
</comparaison> addi $sp, $sp, 4
</negation> sw $t0 8($fp) #Adresse de retour
<conjonctionBis> addi $sp, $sp 0 # desallocation variables locales
</conjonctionBis> lw $ra, 0($sp)
</conjonction> addi $sp, $sp, 4
<expressionBis> lw $fp, 0($sp)
<symbole>OU</symbole> addi $sp, $sp, 4
<conjonction> jr $ra
<negation> j e7
<comparaison> e6:
<expArith> subi $sp, $sp, 4 #Val Retour
<terme> lw $t0, 4($fp) #variable argument $f
<facteur> subi $sp, $sp, 4
<var> sw $t0, 0($sp)
<id_variable>$f</id_variable> li $t0, 1
<optIndice> subi $sp, $sp, 4
</optIndice> sw $t0, 0($sp)
</var> lw $t2, 0($sp)
</facteur> addi $sp, $sp, 4
<termeBis> lw $t1, 0($sp)
</termeBis> addi $sp, $sp, 4
</terme> sub $t0, $t1, $t2
<expArithBis> subi $sp, $sp, 4
</expArithBis> sw $t0, 0($sp)
</expArith> jal fact
<comparaisonBis> addi $sp, $sp, 4 #désalocation des arguments
<symbole>EGAL</symbole> lw $t0, 4($fp) #variable argument $f
<expArith> subi $sp, $sp, 4
<terme> sw $t0, 0($sp)
<facteur> lw $t2, 0($sp)
<nombre>0</nombre> addi $sp, $sp, 4
</facteur> lw $t1, 0($sp)
<termeBis> addi $sp, $sp, 4
</termeBis> mult $t1, $t2
</terme> mflo $t0
<expArithBis> subi $sp, $sp, 4
</expArithBis> sw $t0, 0($sp)
</expArith> lw $t0, 0($sp)
<comparaisonBis> addi $sp, $sp, 4
</comparaisonBis> sw $t0 8($fp) #Adresse de retour
</comparaisonBis> addi $sp, $sp 0 # desallocation variables locales
</comparaison> lw $ra, 0($sp)
</negation> addi $sp, $sp, 4
<conjonctionBis> lw $fp, 0($sp)
</conjonctionBis> addi $sp, $sp, 4
</conjonction> jr $ra
<expressionBis> e7:
</expressionBis> addi $sp, $sp 0 # desallocation variables locales
</expressionBis> lw $ra, 0($sp)
</expression> addi $sp, $sp, 4
<mot_clef>alors</mot_clef> lw $fp, 0($sp)
<instructionBloc> addi $sp, $sp, 4
<symbole>ACCOLADE_OUVRANTE</symbole> addi $sp, $sp, 4 #ignore valeur de retour
<listeInstructions> jr $ra
<instruction> main :
<instructionRetour> subi $sp, $sp, 4
<mot_clef>retour</mot_clef> sw $fp, 0($sp)
<expression> move $fp, $sp
<conjonction> subi $sp, $sp, 4
<negation> sw $ra, 0($sp)
<comparaison> subi $sp, $sp, 4
<expArith> li $v0 5
<terme> syscall
<facteur> move $t0, $v0
<nombre>1</nombre> subi $sp, $sp, 4
</facteur> sw $t0, 0($sp)
<termeBis> lw $t0, 0($sp)
</termeBis> addi $sp, $sp, 4
</terme> sw $t0, -8($fp) #variable locale
<expArithBis> subi $sp, $sp, 4 #Val Retour
</expArithBis> lw $t0, -8($fp) #variable locale
</expArith> subi $sp, $sp, 4
<comparaisonBis> sw $t0, 0($sp)
</comparaisonBis> jal fact
</comparaison> addi $sp, $sp, 4 #désalocation des arguments
</negation> lw $t0, 0($sp)
<conjonctionBis> addi $sp, $sp, 4
</conjonctionBis> move $a0, $t0
</conjonction> li $v0, 1
<expressionBis> syscall
</expressionBis> li $a0, '\n'
</expression> li $v0, 11
<symbole>POINT_VIRGULE</symbole> syscall
</instructionRetour> addi $sp, $sp 4 # desallocation variables locales
</instruction> lw $ra, 0($sp)
<listeInstructions> addi $sp, $sp, 4
</listeInstructions> lw $fp, 0($sp)
</listeInstructions> addi $sp, $sp, 4
<symbole>ACCOLADE_FERMANTE</symbole> addi $sp, $sp, 4 #ignore valeur de retour
</instructionBloc> jr $ra
<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>

View File

@@ -1,360 +1,130 @@
<programme> .data
<optDecVariables> .text
</optDecVariables> __start:
<listeDecFonctions> jal main
<declarationFonction> li $v0, 10
<id_fonction>fibo</id_fonction> syscall
<listeParam> fibo :
<symbole>PARENTHESE_OUVRANTE</symbole> subi $sp, $sp, 4
<optListeDecVariables> sw $fp, 0($sp)
<listeDecVariables> move $fp, $sp
<declarationVariable> subi $sp, $sp, 4
<mot_clef>entier</mot_clef> sw $ra, 0($sp)
<id_variable>$n</id_variable> lw $t0, 4($fp) #variable argument $n
<optTailleTableau> subi $sp, $sp, 4
</optTailleTableau> sw $t0, 0($sp)
</declarationVariable> li $t0, 2
<listeDecVariablesBis> subi $sp, $sp, 4
</listeDecVariablesBis> sw $t0, 0($sp)
</listeDecVariables> lw $t2, 0($sp)
</optListeDecVariables> addi $sp, $sp, 4
<symbole>PARENTHESE_FERMANTE</symbole> lw $t1, 0($sp)
</listeParam> addi $sp, $sp, 4
<optDecVariables> li $t0, 1
</optDecVariables> blt $t1, $t2 e0
<instructionBloc> li $t0, 0
<symbole>ACCOLADE_OUVRANTE</symbole> e0:
<listeInstructions> subi $sp, $sp, 4
<instruction> sw $t0, 0($sp)
<instructionSi> lw $t0, 0($sp)
<mot_clef>si</mot_clef> addi $sp, $sp, 4
<expression> beq $t0 $zero e1
<conjonction> li $t0, 1
<negation> subi $sp, $sp, 4
<comparaison> sw $t0, 0($sp)
<expArith> lw $t0, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> sw $t0 8($fp) #Adresse de retour
<var> addi $sp, $sp 0 # desallocation variables locales
<id_variable>$n</id_variable> lw $ra, 0($sp)
<optIndice> addi $sp, $sp, 4
</optIndice> lw $fp, 0($sp)
</var> addi $sp, $sp, 4
</facteur> jr $ra
<termeBis> j e2
</termeBis> e1:
</terme> subi $sp, $sp, 4 #Val Retour
<expArithBis> lw $t0, 4($fp) #variable argument $n
</expArithBis> subi $sp, $sp, 4
</expArith> sw $t0, 0($sp)
<comparaisonBis> li $t0, 1
<symbole>INFERIEUR</symbole> subi $sp, $sp, 4
<expArith> sw $t0, 0($sp)
<terme> lw $t2, 0($sp)
<facteur> addi $sp, $sp, 4
<nombre>2</nombre> lw $t1, 0($sp)
</facteur> addi $sp, $sp, 4
<termeBis> sub $t0, $t1, $t2
</termeBis> subi $sp, $sp, 4
</terme> sw $t0, 0($sp)
<expArithBis> jal fibo
</expArithBis> addi $sp, $sp, 4 #désalocation des arguments
</expArith> subi $sp, $sp, 4 #Val Retour
<comparaisonBis> lw $t0, 4($fp) #variable argument $n
</comparaisonBis> subi $sp, $sp, 4
</comparaisonBis> sw $t0, 0($sp)
</comparaison> li $t0, 2
</negation> subi $sp, $sp, 4
<conjonctionBis> sw $t0, 0($sp)
</conjonctionBis> lw $t2, 0($sp)
</conjonction> addi $sp, $sp, 4
<expressionBis> lw $t1, 0($sp)
</expressionBis> addi $sp, $sp, 4
</expression> sub $t0, $t1, $t2
<mot_clef>alors</mot_clef> subi $sp, $sp, 4
<instructionBloc> sw $t0, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> jal fibo
<listeInstructions> addi $sp, $sp, 4 #désalocation des arguments
<instruction> lw $t2, 0($sp)
<instructionRetour> addi $sp, $sp, 4
<mot_clef>retour</mot_clef> lw $t1, 0($sp)
<expression> addi $sp, $sp, 4
<conjonction> add $t0, $t1, $t2
<negation> subi $sp, $sp, 4
<comparaison> sw $t0, 0($sp)
<expArith> lw $t0, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> sw $t0 8($fp) #Adresse de retour
<nombre>1</nombre> addi $sp, $sp 0 # desallocation variables locales
</facteur> lw $ra, 0($sp)
<termeBis> addi $sp, $sp, 4
</termeBis> lw $fp, 0($sp)
</terme> addi $sp, $sp, 4
<expArithBis> jr $ra
</expArithBis> e2:
</expArith> addi $sp, $sp 0 # desallocation variables locales
<comparaisonBis> lw $ra, 0($sp)
</comparaisonBis> addi $sp, $sp, 4
</comparaison> lw $fp, 0($sp)
</negation> addi $sp, $sp, 4
<conjonctionBis> addi $sp, $sp, 4 #ignore valeur de retour
</conjonctionBis> jr $ra
</conjonction> main :
<expressionBis> subi $sp, $sp, 4
</expressionBis> sw $fp, 0($sp)
</expression> move $fp, $sp
<symbole>POINT_VIRGULE</symbole> subi $sp, $sp, 4
</instructionRetour> sw $ra, 0($sp)
</instruction> subi $sp, $sp, 4 #Val Retour
<listeInstructions> li $v0 5
</listeInstructions> syscall
</listeInstructions> move $t0, $v0
<symbole>ACCOLADE_FERMANTE</symbole> subi $sp, $sp, 4
</instructionBloc> sw $t0, 0($sp)
<optSinon> jal fibo
<mot_clef>sinon</mot_clef> addi $sp, $sp, 4 #désalocation des arguments
<instructionBloc> lw $t0, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> addi $sp, $sp, 4
<listeInstructions> move $a0, $t0
<instruction> li $v0, 1
<instructionRetour> syscall
<mot_clef>retour</mot_clef> li $a0, '\n'
<expression> li $v0, 11
<conjonction> syscall
<negation> addi $sp, $sp 0 # desallocation variables locales
<comparaison> lw $ra, 0($sp)
<expArith> addi $sp, $sp, 4
<terme> lw $fp, 0($sp)
<facteur> addi $sp, $sp, 4
<appelFct> addi $sp, $sp, 4 #ignore valeur de retour
<id_fonction>fibo</id_fonction> jr $ra
<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>

View File

@@ -1,759 +1,197 @@
<programme> .data
<optDecVariables> $$a: .space 4
<listeDecVariables> $$b: .space 4
<declarationVariable> .text
<mot_clef>entier</mot_clef> __start:
<id_variable>$a</id_variable> jal main
<optTailleTableau> li $v0, 10
</optTailleTableau> syscall
</declarationVariable> pgcd :
<listeDecVariablesBis> subi $sp, $sp, 4
<symbole>VIRGULE</symbole> sw $fp, 0($sp)
<declarationVariable> move $fp, $sp
<mot_clef>entier</mot_clef> subi $sp, $sp, 4
<id_variable>$b</id_variable> sw $ra, 0($sp)
<optTailleTableau> subi $sp, $sp, 4
</optTailleTableau> lw $t0, 8($fp) #variable argument $a
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $t0, 0($sp)
</listeDecVariablesBis> lw $t0, 8($fp) #variable argument $a
</listeDecVariablesBis> subi $sp, $sp, 4
</listeDecVariables> sw $t0, 0($sp)
<symbole>POINT_VIRGULE</symbole> lw $t0, 4($fp) #variable argument $b
</optDecVariables> subi $sp, $sp, 4
<listeDecFonctions> sw $t0, 0($sp)
<declarationFonction> lw $t2, 0($sp)
<id_fonction>pgcd</id_fonction> addi $sp, $sp, 4
<listeParam> lw $t1, 0($sp)
<symbole>PARENTHESE_OUVRANTE</symbole> addi $sp, $sp, 4
<optListeDecVariables> div $t1, $t2
<listeDecVariables> mflo $t0
<declarationVariable> subi $sp, $sp, 4
<mot_clef>entier</mot_clef> sw $t0, 0($sp)
<id_variable>$a</id_variable> lw $t0, 4($fp) #variable argument $b
<optTailleTableau> subi $sp, $sp, 4
</optTailleTableau> sw $t0, 0($sp)
</declarationVariable> lw $t2, 0($sp)
<listeDecVariablesBis> addi $sp, $sp, 4
<symbole>VIRGULE</symbole> lw $t1, 0($sp)
<declarationVariable> addi $sp, $sp, 4
<mot_clef>entier</mot_clef> mult $t1, $t2
<id_variable>$b</id_variable> mflo $t0
<optTailleTableau> subi $sp, $sp, 4
</optTailleTableau> sw $t0, 0($sp)
</declarationVariable> lw $t2, 0($sp)
<listeDecVariablesBis> addi $sp, $sp, 4
</listeDecVariablesBis> lw $t1, 0($sp)
</listeDecVariablesBis> addi $sp, $sp, 4
</listeDecVariables> sub $t0, $t1, $t2
</optListeDecVariables> subi $sp, $sp, 4
<symbole>PARENTHESE_FERMANTE</symbole> sw $t0, 0($sp)
</listeParam> lw $t0, 0($sp)
<optDecVariables> addi $sp, $sp, 4
<listeDecVariables> sw $t0, -8($fp) #variable locale
<declarationVariable> lw $t0, -8($fp) #variable locale
<mot_clef>entier</mot_clef> subi $sp, $sp, 4
<id_variable>$c</id_variable> sw $t0, 0($sp)
<optTailleTableau> li $t0, 0
</optTailleTableau> subi $sp, $sp, 4
</declarationVariable> sw $t0, 0($sp)
<listeDecVariablesBis> lw $t2, 0($sp)
</listeDecVariablesBis> addi $sp, $sp, 4
</listeDecVariables> lw $t1, 0($sp)
<symbole>POINT_VIRGULE</symbole> addi $sp, $sp, 4
</optDecVariables> li $t0, 1
<instructionBloc> beq $t1, $t2 e0
<symbole>ACCOLADE_OUVRANTE</symbole> li $t0, 0
<listeInstructions> e0:
<instruction> subi $sp, $sp, 4
<instructionAffect> sw $t0, 0($sp)
<var> lw $t0, 0($sp)
<id_variable>$c</id_variable> addi $sp, $sp, 4
<optIndice> beq $t0 $zero e1
</optIndice> lw $t0, 4($fp) #variable argument $b
</var> subi $sp, $sp, 4
<symbole>EGAL</symbole> sw $t0, 0($sp)
<expression> lw $t0, 0($sp)
<conjonction> addi $sp, $sp, 4
<negation> sw $t0 12($fp) #Adresse de retour
<comparaison> addi $sp, $sp 4 # desallocation variables locales
<expArith> lw $ra, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> lw $fp, 0($sp)
<var> addi $sp, $sp, 4
<id_variable>$a</id_variable> jr $ra
<optIndice> j e2
</optIndice> e1:
</var> subi $sp, $sp, 4 #Val Retour
</facteur> lw $t0, 4($fp) #variable argument $b
<termeBis> subi $sp, $sp, 4
</termeBis> sw $t0, 0($sp)
</terme> lw $t0, -8($fp) #variable locale
<expArithBis> subi $sp, $sp, 4
<symbole>MOINS</symbole> sw $t0, 0($sp)
<terme> jal pgcd
<facteur> addi $sp, $sp, 8 #désalocation des arguments
<symbole>PARENTHESE_OUVRANTE</symbole> lw $t0, 0($sp)
<expression> addi $sp, $sp, 4
<conjonction> sw $t0 12($fp) #Adresse de retour
<negation> addi $sp, $sp 4 # desallocation variables locales
<comparaison> lw $ra, 0($sp)
<expArith> addi $sp, $sp, 4
<terme> lw $fp, 0($sp)
<facteur> addi $sp, $sp, 4
<var> jr $ra
<id_variable>$a</id_variable> e2:
<optIndice> addi $sp, $sp 4 # desallocation variables locales
</optIndice> lw $ra, 0($sp)
</var> addi $sp, $sp, 4
</facteur> lw $fp, 0($sp)
<termeBis> addi $sp, $sp, 4
<symbole>DIVISE</symbole> addi $sp, $sp, 4 #ignore valeur de retour
<facteur> jr $ra
<var> main :
<id_variable>$b</id_variable> subi $sp, $sp, 4
<optIndice> sw $fp, 0($sp)
</optIndice> move $fp, $sp
</var> subi $sp, $sp, 4
</facteur> sw $ra, 0($sp)
<termeBis> li $v0 5
</termeBis> syscall
</termeBis> move $t0, $v0
</terme> subi $sp, $sp, 4
<expArithBis> sw $t0, 0($sp)
</expArithBis> lw $t0, 0($sp)
</expArith> addi $sp, $sp, 4
<comparaisonBis> sw $t0, $$a
</comparaisonBis> li $v0 5
</comparaison> syscall
</negation> move $t0, $v0
<conjonctionBis> subi $sp, $sp, 4
</conjonctionBis> sw $t0, 0($sp)
</conjonction> lw $t0, 0($sp)
<expressionBis> addi $sp, $sp, 4
</expressionBis> sw $t0, $$b
</expression> lw $t0, $$b
<symbole>PARENTHESE_FERMANTE</symbole> subi $sp, $sp, 4
</facteur> sw $t0, 0($sp)
<termeBis> lw $t0, $$a
<symbole>FOIS</symbole> subi $sp, $sp, 4
<facteur> sw $t0, 0($sp)
<var> lw $t2, 0($sp)
<id_variable>$b</id_variable> addi $sp, $sp, 4
<optIndice> lw $t1, 0($sp)
</optIndice> addi $sp, $sp, 4
</var> li $t0, 1
</facteur> blt $t1, $t2 e3
<termeBis> li $t0, 0
</termeBis> e3:
</termeBis> subi $sp, $sp, 4
</terme> sw $t0, 0($sp)
<expArithBis> lw $t0, 0($sp)
</expArithBis> addi $sp, $sp, 4
</expArithBis> beq $t0 $zero e4
</expArith> subi $sp, $sp, 4 #Val Retour
<comparaisonBis> lw $t0, $$a
</comparaisonBis> subi $sp, $sp, 4
</comparaison> sw $t0, 0($sp)
</negation> lw $t0, $$b
<conjonctionBis> subi $sp, $sp, 4
</conjonctionBis> sw $t0, 0($sp)
</conjonction> jal pgcd
<expressionBis> addi $sp, $sp, 8 #désalocation des arguments
</expressionBis> lw $t0, 0($sp)
</expression> addi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> move $a0, $t0
</instructionAffect> li $v0, 1
</instruction> syscall
<listeInstructions> li $a0, '\n'
<instruction> li $v0, 11
<instructionSi> syscall
<mot_clef>si</mot_clef> j e5
<expression> e4:
<conjonction> subi $sp, $sp, 4 #Val Retour
<negation> lw $t0, $$b
<comparaison> subi $sp, $sp, 4
<expArith> sw $t0, 0($sp)
<terme> lw $t0, $$a
<facteur> subi $sp, $sp, 4
<var> sw $t0, 0($sp)
<id_variable>$c</id_variable> jal pgcd
<optIndice> addi $sp, $sp, 8 #désalocation des arguments
</optIndice> lw $t0, 0($sp)
</var> addi $sp, $sp, 4
</facteur> move $a0, $t0
<termeBis> li $v0, 1
</termeBis> syscall
</terme> li $a0, '\n'
<expArithBis> li $v0, 11
</expArithBis> syscall
</expArith> e5:
<comparaisonBis> addi $sp, $sp 0 # desallocation variables locales
<symbole>EGAL</symbole> lw $ra, 0($sp)
<expArith> addi $sp, $sp, 4
<terme> lw $fp, 0($sp)
<facteur> addi $sp, $sp, 4
<nombre>0</nombre> addi $sp, $sp, 4 #ignore valeur de retour
</facteur> jr $ra
<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>

View File

@@ -25,7 +25,7 @@ subi $sp, $sp, 4
sw $t0, 0($sp) sw $t0, 0($sp)
lw $t2, 0($sp) lw $t2, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
or $t0, $t1, $t2 or $t0, $zero, $t2
j e3 j e3
e2 : e2 :
move $t0 $t1 move $t0 $t1

View File

@@ -1,127 +1,58 @@
<programme> .data
<optDecVariables> .text
</optDecVariables> __start:
<listeDecFonctions> jal main
<declarationFonction> li $v0, 10
<id_fonction>main</id_fonction> syscall
<listeParam> main :
<symbole>PARENTHESE_OUVRANTE</symbole> subi $sp, $sp, 4
<optListeDecVariables> sw $fp, 0($sp)
</optListeDecVariables> move $fp, $sp
<symbole>PARENTHESE_FERMANTE</symbole> subi $sp, $sp, 4
</listeParam> sw $ra, 0($sp)
<optDecVariables> li $t0, 1
</optDecVariables> subi $sp, $sp, 4
<instructionBloc> sw $t0, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> lw $t1, 0($sp)
<listeInstructions> addi $sp, $sp, 4
<instruction> beq $zero, $t1, e0
<instructionSi> j e2
<mot_clef>si</mot_clef> e0 :
<expression> li $v0 5
<conjonction> syscall
<negation> move $t0, $v0
<comparaison> subi $sp, $sp, 4
<expArith> sw $t0, 0($sp)
<terme> lw $t2, 0($sp)
<facteur> addi $sp, $sp, 4
<nombre>1</nombre> or $t0, $zero, $t2
</facteur> j e3
<termeBis> e2 :
</termeBis> move $t0 $t1
</terme> e3 :
<expArithBis> subi $sp, $sp, 4
</expArithBis> sw $t0, 0($sp)
</expArith> lw $t0, 0($sp)
<comparaisonBis> addi $sp, $sp, 4
</comparaisonBis> beq $t0 $zero e4
</comparaison> li $t0, 5
</negation> subi $sp, $sp, 4
<conjonctionBis> sw $t0, 0($sp)
</conjonctionBis> lw $t0, 0($sp)
</conjonction> addi $sp, $sp, 4
<expressionBis> move $a0, $t0
<symbole>OU</symbole> li $v0, 1
<conjonction> syscall
<negation> li $a0, '\n'
<comparaison> li $v0, 11
<expArith> syscall
<terme> j e5
<facteur> e4:
<mot_clef>lire</mot_clef> e5:
<symbole>PARENTHESE_OUVRANTE</symbole> addi $sp, $sp 0 # desallocation variables locales
<symbole>PARENTHESE_FERMANTE</symbole> lw $ra, 0($sp)
</facteur> addi $sp, $sp, 4
<termeBis> lw $fp, 0($sp)
</termeBis> addi $sp, $sp, 4
</terme> addi $sp, $sp, 4 #ignore valeur de retour
<expArithBis> jr $ra
</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>

View File

@@ -23,7 +23,7 @@ subi $sp, $sp, 4
sw $t0, 0($sp) sw $t0, 0($sp)
lw $t2, 0($sp) lw $t2, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
or $t0, $t1, $t2 or $t0, $zero, $t2
j e3 j e3
e2 : e2 :
move $t0 $t1 move $t0 $t1
@@ -44,11 +44,15 @@ sw $t0, 0($sp)
lw $t1, 0($sp) lw $t1, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
beq $zero, $t1, e5 beq $zero, $t1, e5
subi $sp, $sp, 4
sw $t1, 0($sp)
li $t0, 6 li $t0, 6
subi $sp, $sp, 4 subi $sp, $sp, 4
sw $t0, 0($sp) sw $t0, 0($sp)
lw $t2, 0($sp) lw $t2, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
lw $t1, 0($sp)
addi $sp, $sp, 4
beq $zero, $t2, e5 beq $zero, $t2, e5
and $t0, $t1, $t2 and $t0, $t1, $t2
j e4 j e4
@@ -80,7 +84,7 @@ subi $sp, $sp, 4
sw $t0, 0($sp) sw $t0, 0($sp)
lw $t2, 0($sp) lw $t2, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
or $t0, $t1, $t2 or $t0, $zero, $t2
j e9 j e9
e8 : e8 :
move $t0 $t1 move $t0 $t1
@@ -101,6 +105,8 @@ sw $t0, 0($sp)
lw $t1, 0($sp) lw $t1, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
beq $zero, $t1, e11 beq $zero, $t1, e11
subi $sp, $sp, 4
sw $t1, 0($sp)
li $v0 5 li $v0 5
syscall syscall
move $t0, $v0 move $t0, $v0
@@ -108,6 +114,8 @@ subi $sp, $sp, 4
sw $t0, 0($sp) sw $t0, 0($sp)
lw $t2, 0($sp) lw $t2, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
lw $t1, 0($sp)
addi $sp, $sp, 4
beq $zero, $t2, e11 beq $zero, $t2, e11
and $t0, $t1, $t2 and $t0, $t1, $t2
j e10 j e10
@@ -139,7 +147,7 @@ subi $sp, $sp, 4
sw $t0, 0($sp) sw $t0, 0($sp)
lw $t2, 0($sp) lw $t2, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
or $t0, $t1, $t2 or $t0, $zero, $t2
j e15 j e15
e14 : e14 :
move $t0 $t1 move $t0 $t1
@@ -160,6 +168,8 @@ sw $t0, 0($sp)
lw $t1, 0($sp) lw $t1, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
beq $zero, $t1, e17 beq $zero, $t1, e17
subi $sp, $sp, 4
sw $t1, 0($sp)
li $v0 5 li $v0 5
syscall syscall
move $t0, $v0 move $t0, $v0
@@ -167,6 +177,8 @@ subi $sp, $sp, 4
sw $t0, 0($sp) sw $t0, 0($sp)
lw $t2, 0($sp) lw $t2, 0($sp)
addi $sp, $sp, 4 addi $sp, $sp, 4
lw $t1, 0($sp)
addi $sp, $sp, 4
beq $zero, $t2, e17 beq $zero, $t2, e17
and $t0, $t1, $t2 and $t0, $t1, $t2
j e16 j e16

View File

@@ -1,375 +1,204 @@
<programme> .data
<optDecVariables> .text
</optDecVariables> __start:
<listeDecFonctions> jal main
<declarationFonction> li $v0, 10
<id_fonction>main</id_fonction> syscall
<listeParam> main :
<symbole>PARENTHESE_OUVRANTE</symbole> subi $sp, $sp, 4
<optListeDecVariables> sw $fp, 0($sp)
</optListeDecVariables> move $fp, $sp
<symbole>PARENTHESE_FERMANTE</symbole> subi $sp, $sp, 4
</listeParam> sw $ra, 0($sp)
<optDecVariables> li $t0, 3
</optDecVariables> subi $sp, $sp, 4
<instructionBloc> sw $t0, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> lw $t1, 0($sp)
<listeInstructions> addi $sp, $sp, 4
<instruction> beq $zero, $t1, e0
<instructionEcriture> j e2
<mot_clef>ecrire</mot_clef> e0 :
<symbole>PARENTHESE_OUVRANTE</symbole> li $t0, 4
<expression> subi $sp, $sp, 4
<conjonction> sw $t0, 0($sp)
<negation> lw $t2, 0($sp)
<comparaison> addi $sp, $sp, 4
<expArith> or $t0, $zero, $t2
<terme> j e3
<facteur> e2 :
<nombre>3</nombre> move $t0 $t1
</facteur> e3 :
<termeBis> subi $sp, $sp, 4
</termeBis> sw $t0, 0($sp)
</terme> lw $t0, 0($sp)
<expArithBis> addi $sp, $sp, 4
</expArithBis> move $a0, $t0
</expArith> li $v0, 1
<comparaisonBis> syscall
</comparaisonBis> li $a0, '\n'
</comparaison> li $v0, 11
</negation> syscall
<conjonctionBis> li $t0, 3
</conjonctionBis> subi $sp, $sp, 4
</conjonction> sw $t0, 0($sp)
<expressionBis> lw $t1, 0($sp)
<symbole>OU</symbole> addi $sp, $sp, 4
<conjonction> beq $zero, $t1, e5
<negation> subi $sp, $sp, 4
<comparaison> sw $t1, 0($sp)
<expArith> li $t0, 6
<terme> subi $sp, $sp, 4
<facteur> sw $t0, 0($sp)
<nombre>4</nombre> lw $t2, 0($sp)
</facteur> addi $sp, $sp, 4
<termeBis> lw $t1, 0($sp)
</termeBis> addi $sp, $sp, 4
</terme> beq $zero, $t2, e5
<expArithBis> and $t0, $t1, $t2
</expArithBis> j e4
</expArith> e5 :
<comparaisonBis> li $t0 0
</comparaisonBis> e4 :
</comparaison> subi $sp, $sp, 4
</negation> sw $t0, 0($sp)
<conjonctionBis> lw $t0, 0($sp)
</conjonctionBis> addi $sp, $sp, 4
</conjonction> move $a0, $t0
<expressionBis> li $v0, 1
</expressionBis> syscall
</expressionBis> li $a0, '\n'
</expression> li $v0, 11
<symbole>PARENTHESE_FERMANTE</symbole> syscall
<symbole>POINT_VIRGULE</symbole> li $t0, 3
</instructionEcriture> subi $sp, $sp, 4
</instruction> sw $t0, 0($sp)
<listeInstructions> lw $t1, 0($sp)
<instruction> addi $sp, $sp, 4
<instructionEcriture> beq $zero, $t1, e6
<mot_clef>ecrire</mot_clef> j e8
<symbole>PARENTHESE_OUVRANTE</symbole> e6 :
<expression> li $v0 5
<conjonction> syscall
<negation> move $t0, $v0
<comparaison> subi $sp, $sp, 4
<expArith> sw $t0, 0($sp)
<terme> lw $t2, 0($sp)
<facteur> addi $sp, $sp, 4
<nombre>3</nombre> or $t0, $zero, $t2
</facteur> j e9
<termeBis> e8 :
</termeBis> move $t0 $t1
</terme> e9 :
<expArithBis> subi $sp, $sp, 4
</expArithBis> sw $t0, 0($sp)
</expArith> lw $t0, 0($sp)
<comparaisonBis> addi $sp, $sp, 4
</comparaisonBis> move $a0, $t0
</comparaison> li $v0, 1
</negation> syscall
<conjonctionBis> li $a0, '\n'
<symbole>ET</symbole> li $v0, 11
<negation> syscall
<comparaison> li $t0, 3
<expArith> subi $sp, $sp, 4
<terme> sw $t0, 0($sp)
<facteur> lw $t1, 0($sp)
<nombre>6</nombre> addi $sp, $sp, 4
</facteur> beq $zero, $t1, e11
<termeBis> subi $sp, $sp, 4
</termeBis> sw $t1, 0($sp)
</terme> li $v0 5
<expArithBis> syscall
</expArithBis> move $t0, $v0
</expArith> subi $sp, $sp, 4
<comparaisonBis> sw $t0, 0($sp)
</comparaisonBis> lw $t2, 0($sp)
</comparaison> addi $sp, $sp, 4
</negation> lw $t1, 0($sp)
<conjonctionBis> addi $sp, $sp, 4
</conjonctionBis> beq $zero, $t2, e11
</conjonctionBis> and $t0, $t1, $t2
</conjonction> j e10
<expressionBis> e11 :
</expressionBis> li $t0 0
</expression> e10 :
<symbole>PARENTHESE_FERMANTE</symbole> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $t0, 0($sp)
</instructionEcriture> lw $t0, 0($sp)
</instruction> addi $sp, $sp, 4
<listeInstructions> move $a0, $t0
<instruction> li $v0, 1
<instructionEcriture> syscall
<mot_clef>ecrire</mot_clef> li $a0, '\n'
<symbole>PARENTHESE_OUVRANTE</symbole> li $v0, 11
<expression> syscall
<conjonction> li $t0, 0
<negation> subi $sp, $sp, 4
<comparaison> sw $t0, 0($sp)
<expArith> lw $t1, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> beq $zero, $t1, e12
<nombre>3</nombre> j e14
</facteur> e12 :
<termeBis> li $v0 5
</termeBis> syscall
</terme> move $t0, $v0
<expArithBis> subi $sp, $sp, 4
</expArithBis> sw $t0, 0($sp)
</expArith> lw $t2, 0($sp)
<comparaisonBis> addi $sp, $sp, 4
</comparaisonBis> or $t0, $zero, $t2
</comparaison> j e15
</negation> e14 :
<conjonctionBis> move $t0 $t1
</conjonctionBis> e15 :
</conjonction> subi $sp, $sp, 4
<expressionBis> sw $t0, 0($sp)
<symbole>OU</symbole> lw $t0, 0($sp)
<conjonction> addi $sp, $sp, 4
<negation> move $a0, $t0
<comparaison> li $v0, 1
<expArith> syscall
<terme> li $a0, '\n'
<facteur> li $v0, 11
<mot_clef>lire</mot_clef> syscall
<symbole>PARENTHESE_OUVRANTE</symbole> li $t0, 0
<symbole>PARENTHESE_FERMANTE</symbole> subi $sp, $sp, 4
</facteur> sw $t0, 0($sp)
<termeBis> lw $t1, 0($sp)
</termeBis> addi $sp, $sp, 4
</terme> beq $zero, $t1, e17
<expArithBis> subi $sp, $sp, 4
</expArithBis> sw $t1, 0($sp)
</expArith> li $v0 5
<comparaisonBis> syscall
</comparaisonBis> move $t0, $v0
</comparaison> subi $sp, $sp, 4
</negation> sw $t0, 0($sp)
<conjonctionBis> lw $t2, 0($sp)
</conjonctionBis> addi $sp, $sp, 4
</conjonction> lw $t1, 0($sp)
<expressionBis> addi $sp, $sp, 4
</expressionBis> beq $zero, $t2, e17
</expressionBis> and $t0, $t1, $t2
</expression> j e16
<symbole>PARENTHESE_FERMANTE</symbole> e17 :
<symbole>POINT_VIRGULE</symbole> li $t0 0
</instructionEcriture> e16 :
</instruction> subi $sp, $sp, 4
<listeInstructions> sw $t0, 0($sp)
<instruction> lw $t0, 0($sp)
<instructionEcriture> addi $sp, $sp, 4
<mot_clef>ecrire</mot_clef> move $a0, $t0
<symbole>PARENTHESE_OUVRANTE</symbole> li $v0, 1
<expression> syscall
<conjonction> li $a0, '\n'
<negation> li $v0, 11
<comparaison> syscall
<expArith> addi $sp, $sp 0 # desallocation variables locales
<terme> lw $ra, 0($sp)
<facteur> addi $sp, $sp, 4
<nombre>3</nombre> lw $fp, 0($sp)
</facteur> addi $sp, $sp, 4
<termeBis> addi $sp, $sp, 4 #ignore valeur de retour
</termeBis> jr $ra
</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>

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> .data
<optDecVariables> $$a: .space 4
<listeDecVariables> .text
<declarationVariable> __start:
<mot_clef>entier</mot_clef> jal main
<id_variable>$a</id_variable> li $v0, 10
<optTailleTableau> syscall
</optTailleTableau> main :
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $fp, 0($sp)
</listeDecVariablesBis> move $fp, $sp
</listeDecVariables> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $ra, 0($sp)
</optDecVariables> li $t0, 5
<listeDecFonctions> subi $sp, $sp, 4
<declarationFonction> sw $t0, 0($sp)
<id_fonction>main</id_fonction> li $t0, 2
<listeParam> subi $sp, $sp, 4
<symbole>PARENTHESE_OUVRANTE</symbole> sw $t0, 0($sp)
<optListeDecVariables> lw $t2, 0($sp)
</optListeDecVariables> addi $sp, $sp, 4
<symbole>PARENTHESE_FERMANTE</symbole> lw $t1, 0($sp)
</listeParam> addi $sp, $sp, 4
<optDecVariables> mult $t1, $t2
</optDecVariables> mflo $t0
<instructionBloc> subi $sp, $sp, 4
<symbole>ACCOLADE_OUVRANTE</symbole> sw $t0, 0($sp)
<listeInstructions> lw $t0, 0($sp)
<instruction> addi $sp, $sp, 4
<instructionEcriture> move $a0, $t0
<mot_clef>ecrire</mot_clef> li $v0, 1
<symbole>PARENTHESE_OUVRANTE</symbole> syscall
<expression> li $a0, '\n'
<conjonction> li $v0, 11
<negation> syscall
<comparaison> addi $sp, $sp 0 # desallocation variables locales
<expArith> lw $ra, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> lw $fp, 0($sp)
<nombre>5</nombre> addi $sp, $sp, 4
</facteur> addi $sp, $sp, 4 #ignore valeur de retour
<termeBis> jr $ra
<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>

View File

@@ -1,513 +1,146 @@
<programme> .data
<optDecVariables> .text
</optDecVariables> __start:
<listeDecFonctions> jal main
<declarationFonction> li $v0, 10
<id_fonction>max</id_fonction> syscall
<listeParam> max :
<symbole>PARENTHESE_OUVRANTE</symbole> subi $sp, $sp, 4
<optListeDecVariables> sw $fp, 0($sp)
<listeDecVariables> move $fp, $sp
<declarationVariable> subi $sp, $sp, 4
<mot_clef>entier</mot_clef> sw $ra, 0($sp)
<id_variable>$a</id_variable> lw $t0, 8($fp) #variable argument $a
<optTailleTableau> subi $sp, $sp, 4
</optTailleTableau> sw $t0, 0($sp)
</declarationVariable> lw $t0, 4($fp) #variable argument $b
<listeDecVariablesBis> subi $sp, $sp, 4
<symbole>VIRGULE</symbole> sw $t0, 0($sp)
<declarationVariable> lw $t2, 0($sp)
<mot_clef>entier</mot_clef> addi $sp, $sp, 4
<id_variable>$b</id_variable> lw $t1, 0($sp)
<optTailleTableau> addi $sp, $sp, 4
</optTailleTableau> li $t0, 1
</declarationVariable> blt $t1, $t2 e0
<listeDecVariablesBis> li $t0, 0
</listeDecVariablesBis> e0:
</listeDecVariablesBis> subi $sp, $sp, 4
</listeDecVariables> sw $t0, 0($sp)
</optListeDecVariables> lw $t0, 0($sp)
<symbole>PARENTHESE_FERMANTE</symbole> addi $sp, $sp, 4
</listeParam> beq $t0 $zero e1
<optDecVariables> lw $t0, 4($fp) #variable argument $b
</optDecVariables> subi $sp, $sp, 4
<instructionBloc> sw $t0, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> lw $t0, 0($sp)
<listeInstructions> addi $sp, $sp, 4
<instruction> sw $t0 12($fp) #Adresse de retour
<instructionSi> addi $sp, $sp 0 # desallocation variables locales
<mot_clef>si</mot_clef> lw $ra, 0($sp)
<expression> addi $sp, $sp, 4
<conjonction> lw $fp, 0($sp)
<negation> addi $sp, $sp, 4
<comparaison> jr $ra
<expArith> j e2
<terme> e1:
<facteur> e2:
<var> lw $t0, 8($fp) #variable argument $a
<id_variable>$a</id_variable> subi $sp, $sp, 4
<optIndice> sw $t0, 0($sp)
</optIndice> lw $t0, 0($sp)
</var> addi $sp, $sp, 4
</facteur> sw $t0 12($fp) #Adresse de retour
<termeBis> addi $sp, $sp 0 # desallocation variables locales
</termeBis> lw $ra, 0($sp)
</terme> addi $sp, $sp, 4
<expArithBis> lw $fp, 0($sp)
</expArithBis> addi $sp, $sp, 4
</expArith> jr $ra
<comparaisonBis> addi $sp, $sp 0 # desallocation variables locales
<symbole>INFERIEUR</symbole> lw $ra, 0($sp)
<expArith> addi $sp, $sp, 4
<terme> lw $fp, 0($sp)
<facteur> addi $sp, $sp, 4
<var> addi $sp, $sp, 4 #ignore valeur de retour
<id_variable>$b</id_variable> jr $ra
<optIndice> main :
</optIndice> subi $sp, $sp, 4
</var> sw $fp, 0($sp)
</facteur> move $fp, $sp
<termeBis> subi $sp, $sp, 4
</termeBis> sw $ra, 0($sp)
</terme> subi $sp, $sp, 4
<expArithBis> subi $sp, $sp, 4
</expArithBis> li $v0 5
</expArith> syscall
<comparaisonBis> move $t0, $v0
</comparaisonBis> subi $sp, $sp, 4
</comparaisonBis> sw $t0, 0($sp)
</comparaison> lw $t0, 0($sp)
</negation> addi $sp, $sp, 4
<conjonctionBis> sw $t0, -8($fp) #variable locale
</conjonctionBis> li $v0 5
</conjonction> syscall
<expressionBis> move $t0, $v0
</expressionBis> subi $sp, $sp, 4
</expression> sw $t0, 0($sp)
<mot_clef>alors</mot_clef> lw $t0, 0($sp)
<instructionBloc> addi $sp, $sp, 4
<symbole>ACCOLADE_OUVRANTE</symbole> sw $t0, -12($fp) #variable locale
<listeInstructions> subi $sp, $sp, 4 #Val Retour
<instruction> lw $t0, -8($fp) #variable locale
<instructionRetour> subi $sp, $sp, 4
<mot_clef>retour</mot_clef> sw $t0, 0($sp)
<expression> lw $t0, -12($fp) #variable locale
<conjonction> subi $sp, $sp, 4
<negation> sw $t0, 0($sp)
<comparaison> jal max
<expArith> addi $sp, $sp, 8 #désalocation des arguments
<terme> lw $t0, -8($fp) #variable locale
<facteur> subi $sp, $sp, 4
<var> sw $t0, 0($sp)
<id_variable>$b</id_variable> lw $t2, 0($sp)
<optIndice> addi $sp, $sp, 4
</optIndice> lw $t1, 0($sp)
</var> addi $sp, $sp, 4
</facteur> li $t0, 1
<termeBis> beq $t1, $t2 e3
</termeBis> li $t0, 0
</terme> e3:
<expArithBis> subi $sp, $sp, 4
</expArithBis> sw $t0, 0($sp)
</expArith> lw $t0, 0($sp)
<comparaisonBis> addi $sp, $sp, 4
</comparaisonBis> beq $t0 $zero e4
</comparaison> lw $t0, -8($fp) #variable locale
</negation> subi $sp, $sp, 4
<conjonctionBis> sw $t0, 0($sp)
</conjonctionBis> lw $t0, 0($sp)
</conjonction> addi $sp, $sp, 4
<expressionBis> move $a0, $t0
</expressionBis> li $v0, 1
</expression> syscall
<symbole>POINT_VIRGULE</symbole> li $a0, '\n'
</instructionRetour> li $v0, 11
</instruction> syscall
<listeInstructions> j e5
</listeInstructions> e4:
</listeInstructions> lw $t0, -12($fp) #variable locale
<symbole>ACCOLADE_FERMANTE</symbole> subi $sp, $sp, 4
</instructionBloc> sw $t0, 0($sp)
<optSinon> lw $t0, 0($sp)
</optSinon> addi $sp, $sp, 4
</instructionSi> move $a0, $t0
</instruction> li $v0, 1
<listeInstructions> syscall
<instruction> li $a0, '\n'
<instructionRetour> li $v0, 11
<mot_clef>retour</mot_clef> syscall
<expression> e5:
<conjonction> addi $sp, $sp 8 # desallocation variables locales
<negation> lw $ra, 0($sp)
<comparaison> addi $sp, $sp, 4
<expArith> lw $fp, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> addi $sp, $sp, 4 #ignore valeur de retour
<var> jr $ra
<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>

File diff suppressed because it is too large Load Diff

View File

@@ -1,104 +1,46 @@
<programme> .data
<optDecVariables> $$a: .space 4
<listeDecVariables> .text
<declarationVariable> __start:
<mot_clef>entier</mot_clef> jal main
<id_variable>$a</id_variable> li $v0, 10
<optTailleTableau> syscall
</optTailleTableau> procedure :
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $fp, 0($sp)
</listeDecVariablesBis> move $fp, $sp
</listeDecVariables> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $ra, 0($sp)
</optDecVariables> li $t0, 1
<listeDecFonctions> subi $sp, $sp, 4
<declarationFonction> sw $t0, 0($sp)
<id_fonction>procedure</id_fonction> lw $t0, 0($sp)
<listeParam> addi $sp, $sp, 4
<symbole>PARENTHESE_OUVRANTE</symbole> move $a0, $t0
<optListeDecVariables> li $v0, 1
</optListeDecVariables> syscall
<symbole>PARENTHESE_FERMANTE</symbole> li $a0, '\n'
</listeParam> li $v0, 11
<optDecVariables> syscall
</optDecVariables> addi $sp, $sp 0 # desallocation variables locales
<instructionBloc> lw $ra, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> addi $sp, $sp, 4
<listeInstructions> lw $fp, 0($sp)
<instruction> addi $sp, $sp, 4
<instructionEcriture> addi $sp, $sp, 4 #ignore valeur de retour
<mot_clef>ecrire</mot_clef> jr $ra
<symbole>PARENTHESE_OUVRANTE</symbole> main :
<expression> subi $sp, $sp, 4
<conjonction> sw $fp, 0($sp)
<negation> move $fp, $sp
<comparaison> subi $sp, $sp, 4
<expArith> sw $ra, 0($sp)
<terme> subi $sp, $sp, 4 #Val Retour
<facteur> jal procedure
<nombre>1</nombre> addi $sp, $sp 0 # desallocation variables locales
</facteur> lw $ra, 0($sp)
<termeBis> addi $sp, $sp, 4
</termeBis> lw $fp, 0($sp)
</terme> addi $sp, $sp, 4
<expArithBis> addi $sp, $sp, 4 #ignore valeur de retour
</expArithBis> jr $ra
</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>

View File

@@ -1,91 +1,51 @@
<programme> .data
<optDecVariables> $$a: .space 4
<listeDecVariables> .text
<declarationVariable> __start:
<mot_clef>entier</mot_clef> jal main
<id_variable>$a</id_variable> li $v0, 10
<optTailleTableau> syscall
</optTailleTableau> main :
</declarationVariable> subi $sp, $sp, 4
<listeDecVariablesBis> sw $fp, 0($sp)
</listeDecVariablesBis> move $fp, $sp
</listeDecVariables> subi $sp, $sp, 4
<symbole>POINT_VIRGULE</symbole> sw $ra, 0($sp)
</optDecVariables> li $t0, 5
<listeDecFonctions> subi $sp, $sp, 4
<declarationFonction> sw $t0, 0($sp)
<id_fonction>main</id_fonction> li $t0, 3
<listeParam> subi $sp, $sp, 4
<symbole>PARENTHESE_OUVRANTE</symbole> sw $t0, 0($sp)
<optListeDecVariables> lw $t2, 0($sp)
</optListeDecVariables> addi $sp, $sp, 4
<symbole>PARENTHESE_FERMANTE</symbole> lw $t1, 0($sp)
</listeParam> addi $sp, $sp, 4
<optDecVariables> sub $t0, $t1, $t2
</optDecVariables> subi $sp, $sp, 4
<instructionBloc> sw $t0, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> li $t0, 2
<listeInstructions> subi $sp, $sp, 4
<instruction> sw $t0, 0($sp)
<instructionEcriture> lw $t2, 0($sp)
<mot_clef>ecrire</mot_clef> addi $sp, $sp, 4
<symbole>PARENTHESE_OUVRANTE</symbole> lw $t1, 0($sp)
<expression> addi $sp, $sp, 4
<conjonction> add $t0, $t1, $t2
<negation> subi $sp, $sp, 4
<comparaison> sw $t0, 0($sp)
<expArith> lw $t0, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> move $a0, $t0
<nombre>5</nombre> li $v0, 1
</facteur> syscall
<termeBis> li $a0, '\n'
</termeBis> li $v0, 11
</terme> syscall
<expArithBis> addi $sp, $sp 0 # desallocation variables locales
<symbole>MOINS</symbole> lw $ra, 0($sp)
<terme> addi $sp, $sp, 4
<facteur> lw $fp, 0($sp)
<nombre>3</nombre> addi $sp, $sp, 4
</facteur> addi $sp, $sp, 4 #ignore valeur de retour
<termeBis> jr $ra
</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>

View File

@@ -1,134 +1,49 @@
<programme> .data
<optDecVariables> .text
</optDecVariables> __start:
<listeDecFonctions> jal main
<declarationFonction> li $v0, 10
<id_fonction>procedure</id_fonction> syscall
<listeParam> procedure :
<symbole>PARENTHESE_OUVRANTE</symbole> subi $sp, $sp, 4
<optListeDecVariables> sw $fp, 0($sp)
<listeDecVariables> move $fp, $sp
<declarationVariable> subi $sp, $sp, 4
<mot_clef>entier</mot_clef> sw $ra, 0($sp)
<id_variable>$a</id_variable> lw $t0, 4($fp) #variable argument $a
<optTailleTableau> subi $sp, $sp, 4
</optTailleTableau> sw $t0, 0($sp)
</declarationVariable> lw $t0, 0($sp)
<listeDecVariablesBis> addi $sp, $sp, 4
</listeDecVariablesBis> move $a0, $t0
</listeDecVariables> li $v0, 1
</optListeDecVariables> syscall
<symbole>PARENTHESE_FERMANTE</symbole> li $a0, '\n'
</listeParam> li $v0, 11
<optDecVariables> syscall
</optDecVariables> addi $sp, $sp 0 # desallocation variables locales
<instructionBloc> lw $ra, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> addi $sp, $sp, 4
<listeInstructions> lw $fp, 0($sp)
<instruction> addi $sp, $sp, 4
<instructionEcriture> addi $sp, $sp, 4 #ignore valeur de retour
<mot_clef>ecrire</mot_clef> jr $ra
<symbole>PARENTHESE_OUVRANTE</symbole> main :
<expression> subi $sp, $sp, 4
<conjonction> sw $fp, 0($sp)
<negation> move $fp, $sp
<comparaison> subi $sp, $sp, 4
<expArith> sw $ra, 0($sp)
<terme> subi $sp, $sp, 4 #Val Retour
<facteur> li $t0, 10
<var> subi $sp, $sp, 4
<id_variable>$a</id_variable> sw $t0, 0($sp)
<optIndice> jal procedure
</optIndice> addi $sp, $sp, 4 #désalocation des arguments
</var> addi $sp, $sp 0 # desallocation variables locales
</facteur> lw $ra, 0($sp)
<termeBis> addi $sp, $sp, 4
</termeBis> lw $fp, 0($sp)
</terme> addi $sp, $sp, 4
<expArithBis> addi $sp, $sp, 4 #ignore valeur de retour
</expArithBis> jr $ra
</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>

View File

@@ -1,93 +1,45 @@
<programme> .data
<optDecVariables> .text
</optDecVariables> __start:
<listeDecFonctions> jal main
<declarationFonction> li $v0, 10
<id_fonction>procedure</id_fonction> syscall
<listeParam> procedure :
<symbole>PARENTHESE_OUVRANTE</symbole> subi $sp, $sp, 4
<optListeDecVariables> sw $fp, 0($sp)
</optListeDecVariables> move $fp, $sp
<symbole>PARENTHESE_FERMANTE</symbole> subi $sp, $sp, 4
</listeParam> sw $ra, 0($sp)
<optDecVariables> li $t0, 1
</optDecVariables> subi $sp, $sp, 4
<instructionBloc> sw $t0, 0($sp)
<symbole>ACCOLADE_OUVRANTE</symbole> lw $t0, 0($sp)
<listeInstructions> addi $sp, $sp, 4
<instruction> move $a0, $t0
<instructionEcriture> li $v0, 1
<mot_clef>ecrire</mot_clef> syscall
<symbole>PARENTHESE_OUVRANTE</symbole> li $a0, '\n'
<expression> li $v0, 11
<conjonction> syscall
<negation> addi $sp, $sp 0 # desallocation variables locales
<comparaison> lw $ra, 0($sp)
<expArith> addi $sp, $sp, 4
<terme> lw $fp, 0($sp)
<facteur> addi $sp, $sp, 4
<nombre>1</nombre> addi $sp, $sp, 4 #ignore valeur de retour
</facteur> jr $ra
<termeBis> main :
</termeBis> subi $sp, $sp, 4
</terme> sw $fp, 0($sp)
<expArithBis> move $fp, $sp
</expArithBis> subi $sp, $sp, 4
</expArith> sw $ra, 0($sp)
<comparaisonBis> subi $sp, $sp, 4 #Val Retour
</comparaisonBis> jal procedure
</comparaison> addi $sp, $sp 0 # desallocation variables locales
</negation> lw $ra, 0($sp)
<conjonctionBis> addi $sp, $sp, 4
</conjonctionBis> lw $fp, 0($sp)
</conjonction> addi $sp, $sp, 4
<expressionBis> addi $sp, $sp, 4 #ignore valeur de retour
</expressionBis> jr $ra
</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>

View File

@@ -36,7 +36,7 @@ MYCOMPILO="../compilateur-l"
MYCOMPILODEFAULT="${MYCOMPILO}" # utilisé pour test reconnaissance et erreur MYCOMPILODEFAULT="${MYCOMPILO}" # utilisé pour test reconnaissance et erreur
MYCOMPILOLEX="${MYCOMPILO} -l" # exécuter l'analyseur lexical 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 MYCOMPILOASYNT="${MYCOMPILO} -a" # afficher l'arbre abstrait
MYCOMPILOTAB="${MYCOMPILO} -t" # afficher les tables des symboles MYCOMPILOTAB="${MYCOMPILO} -t" # afficher les tables des symboles
MYCOMPILOMIPS="${MYCOMPILO} -m" # générer code MIPS MYCOMPILOMIPS="${MYCOMPILO} -m" # générer code MIPS

View File

@@ -44,12 +44,13 @@ n_instr *instructionPour (void);
n_instr *instructionVide (void); n_instr *instructionVide (void);
n_exp *expression (void); n_exp *expression (void);
n_exp *expressionBis (n_exp *herite); n_exp *expressionBis (n_exp *herite);
n_exp *condition (void);
n_exp *conditionBis(n_exp *herite);
n_exp *conjonction (void); n_exp *conjonction (void);
n_exp *conjonctionBis(n_exp *herite); n_exp *conjonctionBis(n_exp *herite);
n_exp *negation (void); n_exp *negation (void);
n_exp *comparaison (void); n_exp *comparaison (void);
n_exp *comparaisonBis (n_exp *herite); n_exp *comparaisonBis (n_exp *herite);
n_exp *expression (void);
n_exp *expArith (void); n_exp *expArith (void);
n_exp *expArithBis(n_exp *herite); n_exp *expArithBis(n_exp *herite);
n_exp *terme (void); n_exp *terme (void);

View File

@@ -2,7 +2,7 @@
#define EPSILON 0 #define EPSILON 0
#define NB_NON_TERMINAUX 43 #define NB_NON_TERMINAUX 45
#define _listeDecVariables_ 1 #define _listeDecVariables_ 1
#define _listeDecFonctions_ 2 #define _listeDecFonctions_ 2
@@ -45,11 +45,13 @@
#define _instructionFaire_ 40 #define _instructionFaire_ 40
#define _optListeDecVariables_ 41 #define _optListeDecVariables_ 41
#define _instructionPour_ 42 #define _instructionPour_ 42
#define _condition_ 43
#define _conditionBis_ 44
/* symboles terminaux */ /* symboles terminaux */
#define NB_TERMINAUX 32 #define NB_TERMINAUX 34
#define POINT_VIRGULE 1 #define POINT_VIRGULE 1
#define PLUS 2 #define PLUS 2
@@ -82,3 +84,5 @@
#define FIN 29 #define FIN 29
#define VIRGULE 30 #define VIRGULE 30
#define POUR 31 #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 /* ATTENTION : negatif => - unaire, comme dans -5
non => négation logique non => négation logique
Le opérateurs unaires ont op2 = NULL par convention */ 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_ { struct n_exp_ {
enum{varExp, opExp, intExp, appelExp, lireExp, incrExp} type; enum{varExp, opExp, intExp, appelExp, lireExp, incrExp} type;
union{ 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 *var;
n_var *incr; n_var *incr;
int entier; int entier;
@@ -52,7 +52,7 @@ struct n_exp_ {
}u; }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_entier(int entier);
n_exp *cree_n_exp_var(n_var *var); n_exp *cree_n_exp_var(n_var *var);
n_exp *cree_n_exp_appel(n_appel *app); 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 == ou) affiche_texte("ou", trace_abs);
else if(n->u.opExp_.op == et) affiche_texte("et", 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 == non) affiche_texte("non", trace_abs);
else if(n->u.opExp_.op == cond) affiche_texte("condexp", trace_abs);
if( n->u.opExp_.op1 != NULL ) { if( n->u.opExp_.op1 != NULL ) {
affiche_exp(n->u.opExp_.op1); affiche_exp(n->u.opExp_.op1);
} }
if( n->u.opExp_.op2 != NULL ) { if( n->u.opExp_.op2 != NULL ) {
affiche_exp(n->u.opExp_.op2); affiche_exp(n->u.opExp_.op2);
} }
if( n->u.opExp_.op3 != NULL ) {
affiche_exp(n->u.opExp_.op3);
}
affiche_balise_fermante(fct, trace_abs); affiche_balise_fermante(fct, trace_abs);
} }

View File

@@ -18,15 +18,15 @@ extern FILE *yyin;
char tableSymbole[] = { char tableSymbole[] = {
';', ',', '(', ')', '[', ']', '{', '}', // Code ';', ',', '(', ')', '[', ']', '{', '}', // Code
'+', '-', '*', '/', // Arithmetique '+', '-', '*', '/', // Arithmetique
'<', '=', // Comparaison '<', '=', '?', ':', // Comparaison
'&','|', '!' , // Logique '&','|', '!', // Logique
'\0' '\0'
}; };
int codeSymbole[] = { int codeSymbole[] = {
POINT_VIRGULE, VIRGULE, PARENTHESE_OUVRANTE, PARENTHESE_FERMANTE, CROCHET_OUVRANT, CROCHET_FERMANT, ACCOLADE_OUVRANTE, ACCOLADE_FERMANTE, POINT_VIRGULE, VIRGULE, PARENTHESE_OUVRANTE, PARENTHESE_FERMANTE, CROCHET_OUVRANT, CROCHET_FERMANT, ACCOLADE_OUVRANTE, ACCOLADE_FERMANTE,
PLUS, MOINS, FOIS, DIVISE, PLUS, MOINS, FOIS, DIVISE,
INFERIEUR, EGAL, INFERIEUR, EGAL, INTERROGATION, DEUXPOINTS,
ET, OU, NON 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 == NON) strcpy(valeur, "NON");
else if(token == FIN) strcpy(valeur, "FIN"); else if(token == FIN) strcpy(valeur, "FIN");
else if(token == VIRGULE) strcpy(valeur, "VIRGULE"); 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 ) { else if( token == ID_VAR ) {
strcpy( nom, "id_variable" ); strcpy( nom, "id_variable" );

View File

@@ -592,8 +592,8 @@ n_exp *expression() {
openSection( __func__ ); openSection( __func__ );
n_exp *herite_conj = NULL; n_exp *herite_conj = NULL;
n_exp *sreturn = NULL; n_exp *sreturn = NULL;
if( est_premier( _conjonction_, uniteCourante ) ) { if( est_premier( _condition_, uniteCourante ) ) {
herite_conj = conjonction(); herite_conj = condition();
sreturn = expressionBis(herite_conj); sreturn = expressionBis(herite_conj);
} else { } else {
syntaxError(); syntaxError();
@@ -603,6 +603,51 @@ n_exp *expression() {
} }
n_exp *expressionBis(n_exp *herite) { 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__ ); openSection( __func__ );
n_exp *conj = NULL; n_exp *conj = NULL;
n_exp *sreturn = herite; n_exp *sreturn = herite;
@@ -612,9 +657,9 @@ n_exp *expressionBis(n_exp *herite) {
uniteCourante = yylex(); uniteCourante = yylex();
conj = conjonction(); conj = conjonction();
herite = cree_n_exp_op(ou, herite,conj); herite = cree_n_exp_op(ou, herite,conj, NULL);
sreturn = expressionBis(herite); sreturn = conditionBis(herite);
} else if( !est_suivant( _expressionBis_, uniteCourante ) ) { } else if( !est_suivant( _conditionBis_, uniteCourante ) ) {
syntaxError(); syntaxError();
} }
@@ -646,7 +691,7 @@ n_exp *conjonctionBis(n_exp *herite) {
elementConsome(); elementConsome();
uniteCourante = yylex(); uniteCourante = yylex();
herite_neg = negation(); 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); sreturn = conjonctionBis(herite_neg);
} else if( !est_suivant( _conjonctionBis_, uniteCourante ) ) { } else if( !est_suivant( _conjonctionBis_, uniteCourante ) ) {
syntaxError(); syntaxError();
@@ -666,7 +711,7 @@ n_exp *negation() {
uniteCourante = yylex(); uniteCourante = yylex();
expression = comparaison(); 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 )) { } else if (est_premier( _comparaison_, uniteCourante )) {
sreturn = comparaison(); sreturn = comparaison();
} else { } else {
@@ -700,14 +745,14 @@ n_exp *comparaisonBis(n_exp *herite) {
uniteCourante = yylex(); uniteCourante = yylex();
herite_exp = expArith(); 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); sreturn = comparaisonBis(herite_exp);
} else if( uniteCourante == INFERIEUR) { } else if( uniteCourante == INFERIEUR) {
elementConsome(); elementConsome();
uniteCourante = yylex(); uniteCourante = yylex();
herite_exp = expArith(); 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); sreturn = comparaisonBis(herite_exp);
} else if( !est_suivant( _comparaisonBis_, uniteCourante ) ) { } else if( !est_suivant( _comparaisonBis_, uniteCourante ) ) {
@@ -748,14 +793,14 @@ n_exp *expArithBis(n_exp *herite) {
uniteCourante = yylex(); uniteCourante = yylex();
s = terme(); 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); sreturn = expArithBis(herite_fils);
} else if( uniteCourante == MOINS) { } else if( uniteCourante == MOINS) {
elementConsome(); elementConsome();
uniteCourante = yylex(); uniteCourante = yylex();
s = terme(); 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); sreturn = expArithBis(herite_fils);
} else if( !est_suivant( _expArithBis_, uniteCourante ) ) { } else if( !est_suivant( _expArithBis_, uniteCourante ) ) {
syntaxError(); syntaxError();
@@ -796,14 +841,14 @@ n_exp *termeBis(n_exp *herite) {
uniteCourante = yylex(); uniteCourante = yylex();
s = facteur(); 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); sreturn = termeBis(herite_fils);
} else if( uniteCourante == DIVISE) { } else if( uniteCourante == DIVISE) {
elementConsome(); elementConsome();
uniteCourante = yylex(); uniteCourante = yylex();
s = facteur(); 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); sreturn = termeBis(herite_fils);
} else if( !est_suivant( _termeBis_, uniteCourante ) ) { } else if( !est_suivant( _termeBis_, uniteCourante ) ) {
syntaxError(); syntaxError();

View File

@@ -510,7 +510,7 @@ void parcours_opExp(n_exp *n)
sprintf(tmp, "$t%d", iRegistre3); sprintf(tmp, "$t%d", iRegistre3);
depile(tmp); 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); printMips(tmp);
sprintf(tmp,"j %s",empile); sprintf(tmp,"j %s",empile);
@@ -523,31 +523,36 @@ void parcours_opExp(n_exp *n)
sprintf(tmp,"%s : ", empile); sprintf(tmp,"%s : ", empile);
printMips(tmp); printMips(tmp);
} else if(n->u.opExp_.op == et) { } else if(n->u.opExp_.op == et) {
char empile[256]; char fin[256];
char faux[256]; char faux[256];
new_tag(empile); new_tag(fin);
new_tag(faux); new_tag(faux);
parcours_exp(n->u.opExp_.op1); parcours_exp(n->u.opExp_.op1);
sprintf(tmp, "$t%d", iRegistre2); sprintf(tmp, "$t%d", iRegistre2);
depile(tmp); depile(tmp);
//sprintf(tmp,"li $t%d, 1",iRegistre);
//printMips(tmp);
sprintf(tmp,"beq $zero, $t%d, %s",iRegistre2,faux); sprintf(tmp,"beq $zero, $t%d, %s",iRegistre2,faux);
printMips(tmp); printMips(tmp);
sprintf(tmp, "$t%d", iRegistre2);
empile(tmp);
parcours_exp(n->u.opExp_.op2); parcours_exp(n->u.opExp_.op2);
sprintf(tmp, "$t%d", iRegistre3); sprintf(tmp, "$t%d", iRegistre3);
depile(tmp); depile(tmp);
sprintf(tmp,"beq $zero, $t%d, %s",iRegistre3,faux);
sprintf(tmp, "$t%d", iRegistre2);
depile(tmp);
sprintf(tmp,"beq $zero, $t%d, %s", iRegistre3, faux);
printMips(tmp); printMips(tmp);
//--
sprintf(tmp,"and $t%d, $t%d, $t%d",iRegistre, iRegistre2, iRegistre3); sprintf(tmp,"and $t%d, $t%d, $t%d",iRegistre, iRegistre2, iRegistre3);
printMips(tmp); printMips(tmp);
//--
sprintf(tmp,"j %s", empile); sprintf(tmp,"j %s", fin);
printMips(tmp); printMips(tmp);
sprintf(tmp," %s :",faux); sprintf(tmp," %s :",faux);
@@ -555,23 +560,46 @@ void parcours_opExp(n_exp *n)
sprintf(tmp,"li $t%d 0",iRegistre); sprintf(tmp,"li $t%d 0",iRegistre);
printMips(tmp); printMips(tmp);
sprintf(tmp ," %s :",empile); sprintf(tmp ," %s :",fin);
printMips(tmp); printMips(tmp);
} else if(n->u.opExp_.op == non) { } else if(n->u.opExp_.op == non) {
parcours_exp(n->u.opExp_.op1); parcours_exp(n->u.opExp_.op1);
char fin[256];
new_tag(fin);
sprintf(tmp, "$t%d", iRegistre3); sprintf(tmp, "$t%d", iRegistre3);
depile(tmp); depile(tmp);
sprintf(tmp,"li $t%d 1",iRegistre);
sprintf(tmp,"not $t%d $t%d",iRegistre,iRegistre3);
printMips(tmp); 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); 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); 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); printMips(tmp);
} }
sprintf(tmp, "$t%d", iRegistre); sprintf(tmp, "$t%d", iRegistre);

View File

@@ -85,9 +85,19 @@ void initialise_premiers(void){
premiers[_expression_][ID_VAR] = 1; premiers[_expression_][ID_VAR] = 1;
premiers[_expression_][LIRE] = 1; premiers[_expression_][LIRE] = 1;
premiers[_expressionBis_][OU] = 1; premiers[_expressionBis_][INTERROGATION] = 1;
premiers[_expressionBis_][EPSILON] = 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_][NON] = 1;
premiers[_conjonction_][PARENTHESE_OUVRANTE] = 1; premiers[_conjonction_][PARENTHESE_OUVRANTE] = 1;
premiers[_conjonction_][NOMBRE] = 1; premiers[_conjonction_][NOMBRE] = 1;

View File

@@ -170,6 +170,7 @@ void initialise_suivants(void){
suivants[_expression_][PARENTHESE_FERMANTE] = 1; suivants[_expression_][PARENTHESE_FERMANTE] = 1;
suivants[_expression_][CROCHET_FERMANT] = 1; suivants[_expression_][CROCHET_FERMANT] = 1;
suivants[_expression_][VIRGULE] = 1; suivants[_expression_][VIRGULE] = 1;
suivants[_expression_][DEUXPOINTS] = 1;
suivants[_expressionBis_][POINT_VIRGULE] = 1; suivants[_expressionBis_][POINT_VIRGULE] = 1;
suivants[_expressionBis_][ALORS] = 1; suivants[_expressionBis_][ALORS] = 1;
@@ -177,6 +178,25 @@ void initialise_suivants(void){
suivants[_expressionBis_][PARENTHESE_FERMANTE] = 1; suivants[_expressionBis_][PARENTHESE_FERMANTE] = 1;
suivants[_expressionBis_][CROCHET_FERMANT] = 1; suivants[_expressionBis_][CROCHET_FERMANT] = 1;
suivants[_expressionBis_][VIRGULE] = 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_][OU] = 1;
suivants[_conjonction_][POINT_VIRGULE] = 1; suivants[_conjonction_][POINT_VIRGULE] = 1;
@@ -185,6 +205,8 @@ void initialise_suivants(void){
suivants[_conjonction_][PARENTHESE_FERMANTE] = 1; suivants[_conjonction_][PARENTHESE_FERMANTE] = 1;
suivants[_conjonction_][CROCHET_FERMANT] = 1; suivants[_conjonction_][CROCHET_FERMANT] = 1;
suivants[_conjonction_][VIRGULE] = 1; suivants[_conjonction_][VIRGULE] = 1;
suivants[_conjonction_][INTERROGATION] = 1;
suivants[_conjonction_][DEUXPOINTS] = 1;
suivants[_conjonctionBis_][OU] = 1; suivants[_conjonctionBis_][OU] = 1;
suivants[_conjonctionBis_][POINT_VIRGULE] = 1; suivants[_conjonctionBis_][POINT_VIRGULE] = 1;
@@ -193,6 +215,8 @@ void initialise_suivants(void){
suivants[_conjonctionBis_][PARENTHESE_FERMANTE] = 1; suivants[_conjonctionBis_][PARENTHESE_FERMANTE] = 1;
suivants[_conjonctionBis_][CROCHET_FERMANT] = 1; suivants[_conjonctionBis_][CROCHET_FERMANT] = 1;
suivants[_conjonctionBis_][VIRGULE] = 1; suivants[_conjonctionBis_][VIRGULE] = 1;
suivants[_conjonctionBis_][INTERROGATION] = 1;
suivants[_conjonctionBis_][DEUXPOINTS] = 1;
suivants[_negation_][ET] = 1; suivants[_negation_][ET] = 1;
suivants[_negation_][OU] = 1; suivants[_negation_][OU] = 1;
@@ -202,6 +226,8 @@ void initialise_suivants(void){
suivants[_negation_][PARENTHESE_FERMANTE] = 1; suivants[_negation_][PARENTHESE_FERMANTE] = 1;
suivants[_negation_][CROCHET_FERMANT] = 1; suivants[_negation_][CROCHET_FERMANT] = 1;
suivants[_negation_][VIRGULE] = 1; suivants[_negation_][VIRGULE] = 1;
suivants[_negation_][INTERROGATION] = 1;
suivants[_negation_][DEUXPOINTS] = 1;
suivants[_comparaison_][ET] = 1; suivants[_comparaison_][ET] = 1;
suivants[_comparaison_][OU] = 1; suivants[_comparaison_][OU] = 1;
@@ -211,6 +237,8 @@ void initialise_suivants(void){
suivants[_comparaison_][PARENTHESE_FERMANTE] = 1; suivants[_comparaison_][PARENTHESE_FERMANTE] = 1;
suivants[_comparaison_][CROCHET_FERMANT] = 1; suivants[_comparaison_][CROCHET_FERMANT] = 1;
suivants[_comparaison_][VIRGULE] = 1; suivants[_comparaison_][VIRGULE] = 1;
suivants[_comparaison_][INTERROGATION] = 1;
suivants[_comparaison_][DEUXPOINTS] = 1;
suivants[_comparaisonBis_][ET] = 1; suivants[_comparaisonBis_][ET] = 1;
suivants[_comparaisonBis_][OU] = 1; suivants[_comparaisonBis_][OU] = 1;
@@ -220,6 +248,8 @@ void initialise_suivants(void){
suivants[_comparaisonBis_][PARENTHESE_FERMANTE] = 1; suivants[_comparaisonBis_][PARENTHESE_FERMANTE] = 1;
suivants[_comparaisonBis_][CROCHET_FERMANT] = 1; suivants[_comparaisonBis_][CROCHET_FERMANT] = 1;
suivants[_comparaisonBis_][VIRGULE] = 1; suivants[_comparaisonBis_][VIRGULE] = 1;
suivants[_comparaisonBis_][INTERROGATION] = 1;
suivants[_comparaisonBis_][DEUXPOINTS] = 1;
suivants[_expArith_][EGAL] = 1; suivants[_expArith_][EGAL] = 1;
suivants[_expArith_][INFERIEUR] = 1; suivants[_expArith_][INFERIEUR] = 1;
@@ -231,6 +261,8 @@ void initialise_suivants(void){
suivants[_expArith_][PARENTHESE_FERMANTE] = 1; suivants[_expArith_][PARENTHESE_FERMANTE] = 1;
suivants[_expArith_][CROCHET_FERMANT] = 1; suivants[_expArith_][CROCHET_FERMANT] = 1;
suivants[_expArith_][VIRGULE] = 1; suivants[_expArith_][VIRGULE] = 1;
suivants[_expArith_][INTERROGATION] = 1;
suivants[_expArith_][DEUXPOINTS] = 1;
suivants[_expArithBis_][EGAL] = 1; suivants[_expArithBis_][EGAL] = 1;
suivants[_expArithBis_][INFERIEUR] = 1; suivants[_expArithBis_][INFERIEUR] = 1;
@@ -242,6 +274,8 @@ void initialise_suivants(void){
suivants[_expArithBis_][PARENTHESE_FERMANTE] = 1; suivants[_expArithBis_][PARENTHESE_FERMANTE] = 1;
suivants[_expArithBis_][CROCHET_FERMANT] = 1; suivants[_expArithBis_][CROCHET_FERMANT] = 1;
suivants[_expArithBis_][VIRGULE] = 1; suivants[_expArithBis_][VIRGULE] = 1;
suivants[_expArithBis_][INTERROGATION] = 1;
suivants[_expArithBis_][DEUXPOINTS] = 1;
suivants[_terme_][PLUS] = 1; suivants[_terme_][PLUS] = 1;
suivants[_terme_][MOINS] = 1; suivants[_terme_][MOINS] = 1;
@@ -255,6 +289,8 @@ void initialise_suivants(void){
suivants[_terme_][PARENTHESE_FERMANTE] = 1; suivants[_terme_][PARENTHESE_FERMANTE] = 1;
suivants[_terme_][CROCHET_FERMANT] = 1; suivants[_terme_][CROCHET_FERMANT] = 1;
suivants[_terme_][VIRGULE] = 1; suivants[_terme_][VIRGULE] = 1;
suivants[_terme_][INTERROGATION] = 1;
suivants[_terme_][DEUXPOINTS] = 1;
suivants[_termeBis_][PLUS] = 1; suivants[_termeBis_][PLUS] = 1;
suivants[_termeBis_][MOINS] = 1; suivants[_termeBis_][MOINS] = 1;
@@ -268,6 +304,8 @@ void initialise_suivants(void){
suivants[_termeBis_][PARENTHESE_FERMANTE] = 1; suivants[_termeBis_][PARENTHESE_FERMANTE] = 1;
suivants[_termeBis_][CROCHET_FERMANT] = 1; suivants[_termeBis_][CROCHET_FERMANT] = 1;
suivants[_termeBis_][VIRGULE] = 1; suivants[_termeBis_][VIRGULE] = 1;
suivants[_termeBis_][INTERROGATION] = 1;
suivants[_termeBis_][DEUXPOINTS] = 1;
suivants[_facteur_][FOIS] = 1; suivants[_facteur_][FOIS] = 1;
suivants[_facteur_][DIVISE] = 1; suivants[_facteur_][DIVISE] = 1;
@@ -283,6 +321,8 @@ void initialise_suivants(void){
suivants[_facteur_][PARENTHESE_FERMANTE] = 1; suivants[_facteur_][PARENTHESE_FERMANTE] = 1;
suivants[_facteur_][CROCHET_FERMANT] = 1; suivants[_facteur_][CROCHET_FERMANT] = 1;
suivants[_facteur_][VIRGULE] = 1; suivants[_facteur_][VIRGULE] = 1;
suivants[_facteur_][INTERROGATION] = 1;
suivants[_facteur_][DEUXPOINTS] = 1;
suivants[_var_][FOIS] = 1; suivants[_var_][FOIS] = 1;
suivants[_var_][DIVISE] = 1; suivants[_var_][DIVISE] = 1;
@@ -298,6 +338,8 @@ void initialise_suivants(void){
suivants[_var_][PARENTHESE_FERMANTE] = 1; suivants[_var_][PARENTHESE_FERMANTE] = 1;
suivants[_var_][CROCHET_FERMANT] = 1; suivants[_var_][CROCHET_FERMANT] = 1;
suivants[_var_][VIRGULE] = 1; suivants[_var_][VIRGULE] = 1;
suivants[_var_][INTERROGATION] = 1;
suivants[_var_][DEUXPOINTS] = 1;
suivants[_optIndice_][FOIS] = 1; suivants[_optIndice_][FOIS] = 1;
suivants[_optIndice_][DIVISE] = 1; suivants[_optIndice_][DIVISE] = 1;
@@ -313,6 +355,8 @@ void initialise_suivants(void){
suivants[_optIndice_][PARENTHESE_FERMANTE] = 1; suivants[_optIndice_][PARENTHESE_FERMANTE] = 1;
suivants[_optIndice_][CROCHET_FERMANT] = 1; suivants[_optIndice_][CROCHET_FERMANT] = 1;
suivants[_optIndice_][VIRGULE] = 1; suivants[_optIndice_][VIRGULE] = 1;
suivants[_optIndice_][INTERROGATION] = 1;
suivants[_optIndice_][DEUXPOINTS] = 1;
suivants[_appelFct_][FOIS] = 1; suivants[_appelFct_][FOIS] = 1;
suivants[_appelFct_][DIVISE] = 1; suivants[_appelFct_][DIVISE] = 1;
@@ -328,6 +372,8 @@ void initialise_suivants(void){
suivants[_appelFct_][PARENTHESE_FERMANTE] = 1; suivants[_appelFct_][PARENTHESE_FERMANTE] = 1;
suivants[_appelFct_][CROCHET_FERMANT] = 1; suivants[_appelFct_][CROCHET_FERMANT] = 1;
suivants[_appelFct_][VIRGULE] = 1; suivants[_appelFct_][VIRGULE] = 1;
suivants[_appelFct_][INTERROGATION] = 1;
suivants[_appelFct_][DEUXPOINTS] = 1;
suivants[_listeExpressions_][PARENTHESE_FERMANTE] = 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; 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_exp *n = malloc(sizeof(n_exp));
n->type = opExp; n->type = opExp;
n->u.opExp_.op = op; n->u.opExp_.op = op;
n->u.opExp_.op1 = op1; n->u.opExp_.op1 = op1;
n->u.opExp_.op2 = op2; n->u.opExp_.op2 = op2;
n->u.opExp_.op3 = op3;
return n; return n;
} }