diff --git a/Table_Symboles/main.c b/Table_Symboles/main.c deleted file mode 100644 index ad357d1..0000000 --- a/Table_Symboles/main.c +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include "table_symboles.h" - -int main() { - Table_Symboles T; - initialise_table(&T); - add_symbole_top(&T, "toto", 0, 1); - add_symbole_top(&T, "titi", 1, 0); - add_symbole_bottom(&T, "titi", 0, 1); - print_table(&T); - - return 0; -} diff --git a/a.out b/a.out index 33848c9..29ee846 100755 Binary files a/a.out and b/a.out differ diff --git a/analyse_syntaxique.output b/analyse_syntaxique.output index 8641a25..5cc7ded 100644 --- a/analyse_syntaxique.output +++ b/analyse_syntaxique.output @@ -38,89 +38,87 @@ Grammaire 19 Type: tINT 20 | tCONST tINT - 21 Valeur: tVAR - 22 | Affbis + 21 Valeur: tVAR tAFFECTATION E + 22 | tVAR - 23 Affbis: tVAR tAFFECTATION E + 23 Aff: tVAR tAFFECTATION E tPV - 24 Aff: Affbis tPV - - 25 E: tENTIER - 26 | tVAR - 27 | E tADD E - 28 | E tMUL E - 29 | E tSUB E - 30 | E tDIV E + 24 E: tENTIER + 25 | tVAR + 26 | E tADD E + 27 | E tMUL E + 28 | E tSUB E + 29 | E tDIV E + 30 | tSUB E 31 | Invocation 32 | tPO E tPF - 33 | tSUB E - 34 Args: tVAR SuiteArgs - 35 | %empty + 33 Args: tVAR SuiteArgs + 34 | %empty - 36 SuiteArgs: tVIRGULE tVAR SuiteArgs - 37 | %empty + 35 SuiteArgs: tVIRGULE tVAR SuiteArgs + 36 | %empty - 38 If: tIF tPO Cond tPF tAO Instructions tAF Else + 37 If: tIF tPO Cond tPF tAO Instructions tAF Else - 39 Else: tELSE tAO Instructions tAF - 40 | tELSE tIF tPO Cond tPF tAO Instructions tAF Else + 38 Else: tELSE tAO Instructions tAF + 39 | tELSE tIF tPO Cond tPF tAO Instructions tAF Else - 41 While: tWHILE tPO Cond tPF tAO Instructions tAF + 40 While: tWHILE tPO Cond tPF tAO Instructions tAF - 42 Cond: E tEGAL E - 43 | E tDIFF E - 44 | E tLT E - 45 | E tGT E - 46 | E tLTE E - 47 | E tGTE E - 48 | E tAND Cond - 49 | E tOR Cond - 50 | tNOT Cond + 41 Cond: E tEGAL E + 42 | E tDIFF E + 43 | E tLT E + 44 | E tGT E + 45 | E tLTE E + 46 | E tGTE E + 47 | E tAND Cond + 48 | E tOR Cond + 49 | tNOT Cond - 51 Invocation: tVAR tPO Args tPF + 50 Invocation: tVAR tPO Args tPF - 52 Print: tPRINT tPO tVAR tPF tPV + 51 Print: tPRINT tPO tVAR tPF tPV - 53 Return: tRETURN E tPV + 52 Return: tRETURN E tPV Terminaux, suivis des règles où ils apparaissent $end (0) 0 error (256) -tENTIER (258) 25 +tENTIER (258) 24 tENTIEREXP (259) -tADD (260) 27 -tSUB (261) 29 33 -tMUL (262) 28 -tDIV (263) 30 -tPO (264) 1 32 38 40 41 51 52 -tPF (265) 1 32 38 40 41 51 52 -tAO (266) 7 38 39 40 41 -tAF (267) 7 38 39 40 41 +tADD (260) 26 +tSUB (261) 28 30 +tMUL (262) 27 +tDIV (263) 29 +tPO (264) 1 32 37 39 40 50 51 +tPF (265) 1 32 37 39 40 50 51 +tAO (266) 7 37 38 39 40 +tAF (267) 7 37 38 39 40 tERROR (268) -tPV (269) 5 15 16 24 52 53 -tVIRGULE (270) 5 17 36 -tAFFECTATION (271) 23 -tEGAL (272) 42 -tDIFF (273) 43 -tLT (274) 44 -tGT (275) 45 -tGTE (276) 47 -tLTE (277) 46 +tPV (269) 5 15 16 23 51 52 +tVIRGULE (270) 5 17 35 +tAFFECTATION (271) 21 23 +tEGAL (272) 41 +tDIFF (273) 42 +tLT (274) 43 +tGT (275) 44 +tGTE (276) 46 +tLTE (277) 45 tMAIN (278) 1 tINT (279) 1 4 19 20 -tPRINT (280) 52 -tRETURN (281) 53 -tOR (282) 49 -tAND (283) 48 -tIF (284) 38 40 -tELSE (285) 39 40 -tWHILE (286) 41 +tPRINT (280) 51 +tRETURN (281) 52 +tOR (282) 48 +tAND (283) 47 +tIF (284) 37 39 +tELSE (285) 38 39 +tWHILE (286) 40 tCONST (287) 20 -tVAR (288) 4 21 23 26 34 36 51 52 -tNOT (289) 50 +tVAR (288) 4 21 22 23 25 33 35 50 51 +tNOT (289) 49 Non-terminaux, suivis des règles où ils apparaissent @@ -138,7 +136,7 @@ SuiteParams (39) Body (40) à gauche: 7, à droite: 1 Instructions (41) - à gauche: 8 9, à droite: 7 8 38 39 40 41 + à gauche: 8 9, à droite: 7 8 37 38 39 40 Instruction (42) à gauche: 10 11 12 13 14 15, à droite: 8 Decl (43) @@ -149,32 +147,30 @@ Type (45) à gauche: 19 20, à droite: 16 Valeur (46) à gauche: 21 22, à droite: 16 17 -Affbis (47) - à gauche: 23, à droite: 22 24 -Aff (48) - à gauche: 24, à droite: 10 -E (49) - à gauche: 25 26 27 28 29 30 31 32 33, à droite: 23 27 28 29 30 - 32 33 42 43 44 45 46 47 48 49 53 -Args (50) - à gauche: 34 35, à droite: 51 -SuiteArgs (51) - à gauche: 36 37, à droite: 34 36 -If (52) - à gauche: 38, à droite: 11 -Else (53) - à gauche: 39 40, à droite: 38 40 -While (54) - à gauche: 41, à droite: 12 -Cond (55) - à gauche: 42 43 44 45 46 47 48 49 50, à droite: 38 40 41 48 49 - 50 -Invocation (56) - à gauche: 51, à droite: 15 31 -Print (57) - à gauche: 52, à droite: 13 -Return (58) - à gauche: 53, à droite: 7 +Aff (47) + à gauche: 23, à droite: 10 +E (48) + à gauche: 24 25 26 27 28 29 30 31 32, à droite: 21 23 26 27 28 + 29 30 32 41 42 43 44 45 46 47 48 52 +Args (49) + à gauche: 33 34, à droite: 50 +SuiteArgs (50) + à gauche: 35 36, à droite: 33 35 +If (51) + à gauche: 37, à droite: 11 +Else (52) + à gauche: 38 39, à droite: 37 39 +While (53) + à gauche: 40, à droite: 12 +Cond (54) + à gauche: 41 42 43 44 45 46 47 48 49, à droite: 37 39 40 47 48 + 49 +Invocation (55) + à gauche: 50, à droite: 15 31 +Print (56) + à gauche: 51, à droite: 13 +Return (57) + à gauche: 52, à droite: 7 État 0 @@ -300,12 +296,11 @@ Return (58) Instruction aller à l'état 23 Decl aller à l'état 24 Type aller à l'état 25 - Affbis aller à l'état 26 - Aff aller à l'état 27 - If aller à l'état 28 - While aller à l'état 29 - Invocation aller à l'état 30 - Print aller à l'état 31 + Aff aller à l'état 26 + If aller à l'état 27 + While aller à l'état 28 + Invocation aller à l'état 29 + Print aller à l'état 30 État 14 @@ -323,7 +318,7 @@ Return (58) $défaut réduction par utilisation de la règle 6 (SuiteParams) - SuiteParams aller à l'état 32 + SuiteParams aller à l'état 31 État 16 @@ -335,48 +330,48 @@ Return (58) État 17 - 52 Print: tPRINT . tPO tVAR tPF tPV + 51 Print: tPRINT . tPO tVAR tPF tPV - tPO décalage et aller à l'état 33 + tPO décalage et aller à l'état 32 État 18 - 38 If: tIF . tPO Cond tPF tAO Instructions tAF Else + 37 If: tIF . tPO Cond tPF tAO Instructions tAF Else - tPO décalage et aller à l'état 34 + tPO décalage et aller à l'état 33 État 19 - 41 While: tWHILE . tPO Cond tPF tAO Instructions tAF + 40 While: tWHILE . tPO Cond tPF tAO Instructions tAF - tPO décalage et aller à l'état 35 + tPO décalage et aller à l'état 34 État 20 20 Type: tCONST . tINT - tINT décalage et aller à l'état 36 + tINT décalage et aller à l'état 35 État 21 - 23 Affbis: tVAR . tAFFECTATION E - 51 Invocation: tVAR . tPO Args tPF + 23 Aff: tVAR . tAFFECTATION E tPV + 50 Invocation: tVAR . tPO Args tPF - tPO décalage et aller à l'état 37 - tAFFECTATION décalage et aller à l'état 38 + tPO décalage et aller à l'état 36 + tAFFECTATION décalage et aller à l'état 37 État 22 7 Body: tAO Instructions . Return tAF - tRETURN décalage et aller à l'état 39 + tRETURN décalage et aller à l'état 38 - Return aller à l'état 40 + Return aller à l'état 39 État 23 @@ -392,16 +387,15 @@ Return (58) $défaut réduction par utilisation de la règle 9 (Instructions) - Instructions aller à l'état 41 + Instructions aller à l'état 40 Instruction aller à l'état 23 Decl aller à l'état 24 Type aller à l'état 25 - Affbis aller à l'état 26 - Aff aller à l'état 27 - If aller à l'état 28 - While aller à l'état 29 - Invocation aller à l'état 30 - Print aller à l'état 31 + Aff aller à l'état 26 + If aller à l'état 27 + While aller à l'état 28 + Invocation aller à l'état 29 + Print aller à l'état 30 État 24 @@ -415,643 +409,655 @@ Return (58) 16 Decl: Type . Valeur SuiteDecl tPV - tVAR décalage et aller à l'état 42 + tVAR décalage et aller à l'état 41 - Valeur aller à l'état 43 - Affbis aller à l'état 44 + Valeur aller à l'état 42 État 26 - 24 Aff: Affbis . tPV - - tPV décalage et aller à l'état 45 - - -État 27 - 10 Instruction: Aff . $défaut réduction par utilisation de la règle 10 (Instruction) -État 28 +État 27 11 Instruction: If . $défaut réduction par utilisation de la règle 11 (Instruction) -État 29 +État 28 12 Instruction: While . $défaut réduction par utilisation de la règle 12 (Instruction) -État 30 +État 29 15 Instruction: Invocation . tPV - tPV décalage et aller à l'état 46 + tPV décalage et aller à l'état 43 -État 31 +État 30 13 Instruction: Print . $défaut réduction par utilisation de la règle 13 (Instruction) -État 32 +État 31 5 SuiteParams: tVIRGULE Param SuiteParams . tPV - tPV décalage et aller à l'état 47 + tPV décalage et aller à l'état 44 + + +État 32 + + 51 Print: tPRINT tPO . tVAR tPF tPV + + tVAR décalage et aller à l'état 45 État 33 - 52 Print: tPRINT tPO . tVAR tPF tPV + 37 If: tIF tPO . Cond tPF tAO Instructions tAF Else - tVAR décalage et aller à l'état 48 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 + tNOT décalage et aller à l'état 50 + + E aller à l'état 51 + Cond aller à l'état 52 + Invocation aller à l'état 53 État 34 - 38 If: tIF tPO . Cond tPF tAO Instructions tAF Else + 40 While: tWHILE tPO . Cond tPF tAO Instructions tAF - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 - tNOT décalage et aller à l'état 53 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 + tNOT décalage et aller à l'état 50 - E aller à l'état 54 - Cond aller à l'état 55 - Invocation aller à l'état 56 + E aller à l'état 51 + Cond aller à l'état 54 + Invocation aller à l'état 53 État 35 - 41 While: tWHILE tPO . Cond tPF tAO Instructions tAF - - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 - tNOT décalage et aller à l'état 53 - - E aller à l'état 54 - Cond aller à l'état 57 - Invocation aller à l'état 56 - - -État 36 - 20 Type: tCONST tINT . $défaut réduction par utilisation de la règle 20 (Type) +État 36 + + 50 Invocation: tVAR tPO . Args tPF + + tVAR décalage et aller à l'état 55 + + $défaut réduction par utilisation de la règle 34 (Args) + + Args aller à l'état 56 + + État 37 - 51 Invocation: tVAR tPO . Args tPF + 23 Aff: tVAR tAFFECTATION . E tPV - tVAR décalage et aller à l'état 58 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 - $défaut réduction par utilisation de la règle 35 (Args) - - Args aller à l'état 59 + E aller à l'état 57 + Invocation aller à l'état 53 État 38 - 23 Affbis: tVAR tAFFECTATION . E + 52 Return: tRETURN . E tPV - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 - E aller à l'état 60 - Invocation aller à l'état 56 + E aller à l'état 58 + Invocation aller à l'état 53 État 39 - 53 Return: tRETURN . E tPV + 7 Body: tAO Instructions Return . tAF - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 - - E aller à l'état 61 - Invocation aller à l'état 56 + tAF décalage et aller à l'état 59 État 40 - 7 Body: tAO Instructions Return . tAF - - tAF décalage et aller à l'état 62 - - -État 41 - 8 Instructions: Instruction Instructions . $défaut réduction par utilisation de la règle 8 (Instructions) -État 42 +État 41 - 21 Valeur: tVAR . - 23 Affbis: tVAR . tAFFECTATION E + 21 Valeur: tVAR . tAFFECTATION E + 22 | tVAR . - tAFFECTATION décalage et aller à l'état 38 - - $défaut réduction par utilisation de la règle 21 (Valeur) - - -État 43 - - 16 Decl: Type Valeur . SuiteDecl tPV - - tVIRGULE décalage et aller à l'état 63 - - $défaut réduction par utilisation de la règle 18 (SuiteDecl) - - SuiteDecl aller à l'état 64 - - -État 44 - - 22 Valeur: Affbis . + tAFFECTATION décalage et aller à l'état 60 $défaut réduction par utilisation de la règle 22 (Valeur) -État 45 +État 42 - 24 Aff: Affbis tPV . + 16 Decl: Type Valeur . SuiteDecl tPV - $défaut réduction par utilisation de la règle 24 (Aff) + tVIRGULE décalage et aller à l'état 61 + + $défaut réduction par utilisation de la règle 18 (SuiteDecl) + + SuiteDecl aller à l'état 62 -État 46 +État 43 15 Instruction: Invocation tPV . $défaut réduction par utilisation de la règle 15 (Instruction) -État 47 +État 44 5 SuiteParams: tVIRGULE Param SuiteParams tPV . $défaut réduction par utilisation de la règle 5 (SuiteParams) +État 45 + + 51 Print: tPRINT tPO tVAR . tPF tPV + + tPF décalage et aller à l'état 63 + + +État 46 + + 24 E: tENTIER . + + $défaut réduction par utilisation de la règle 24 (E) + + +État 47 + + 30 E: tSUB . E + + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 + + E aller à l'état 64 + Invocation aller à l'état 53 + + État 48 - 52 Print: tPRINT tPO tVAR . tPF tPV + 32 E: tPO . E tPF - tPF décalage et aller à l'état 65 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 + + E aller à l'état 65 + Invocation aller à l'état 53 État 49 - 25 E: tENTIER . + 25 E: tVAR . + 50 Invocation: tVAR . tPO Args tPF + + tPO décalage et aller à l'état 36 $défaut réduction par utilisation de la règle 25 (E) État 50 - 33 E: tSUB . E + 49 Cond: tNOT . Cond - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 + tNOT décalage et aller à l'état 50 - E aller à l'état 66 - Invocation aller à l'état 56 + E aller à l'état 51 + Cond aller à l'état 66 + Invocation aller à l'état 53 État 51 - 32 E: tPO . E tPF + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E + 41 Cond: E . tEGAL E + 42 | E . tDIFF E + 43 | E . tLT E + 44 | E . tGT E + 45 | E . tLTE E + 46 | E . tGTE E + 47 | E . tAND Cond + 48 | E . tOR Cond - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 - - E aller à l'état 67 - Invocation aller à l'état 56 + tADD décalage et aller à l'état 67 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 + tEGAL décalage et aller à l'état 71 + tDIFF décalage et aller à l'état 72 + tLT décalage et aller à l'état 73 + tGT décalage et aller à l'état 74 + tGTE décalage et aller à l'état 75 + tLTE décalage et aller à l'état 76 + tOR décalage et aller à l'état 77 + tAND décalage et aller à l'état 78 État 52 - 26 E: tVAR . - 51 Invocation: tVAR . tPO Args tPF + 37 If: tIF tPO Cond . tPF tAO Instructions tAF Else - tPO décalage et aller à l'état 37 - - $défaut réduction par utilisation de la règle 26 (E) + tPF décalage et aller à l'état 79 État 53 - 50 Cond: tNOT . Cond - - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 - tNOT décalage et aller à l'état 53 - - E aller à l'état 54 - Cond aller à l'état 68 - Invocation aller à l'état 56 - - -État 54 - - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - 42 Cond: E . tEGAL E - 43 | E . tDIFF E - 44 | E . tLT E - 45 | E . tGT E - 46 | E . tLTE E - 47 | E . tGTE E - 48 | E . tAND Cond - 49 | E . tOR Cond - - tADD décalage et aller à l'état 69 - tSUB décalage et aller à l'état 70 - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 - tEGAL décalage et aller à l'état 73 - tDIFF décalage et aller à l'état 74 - tLT décalage et aller à l'état 75 - tGT décalage et aller à l'état 76 - tGTE décalage et aller à l'état 77 - tLTE décalage et aller à l'état 78 - tOR décalage et aller à l'état 79 - tAND décalage et aller à l'état 80 - - -État 55 - - 38 If: tIF tPO Cond . tPF tAO Instructions tAF Else - - tPF décalage et aller à l'état 81 - - -État 56 - 31 E: Invocation . $défaut réduction par utilisation de la règle 31 (E) +État 54 + + 40 While: tWHILE tPO Cond . tPF tAO Instructions tAF + + tPF décalage et aller à l'état 80 + + +État 55 + + 33 Args: tVAR . SuiteArgs + + tVIRGULE décalage et aller à l'état 81 + + $défaut réduction par utilisation de la règle 36 (SuiteArgs) + + SuiteArgs aller à l'état 82 + + +État 56 + + 50 Invocation: tVAR tPO Args . tPF + + tPF décalage et aller à l'état 83 + + État 57 - 41 While: tWHILE tPO Cond . tPF tAO Instructions tAF + 23 Aff: tVAR tAFFECTATION E . tPV + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E - tPF décalage et aller à l'état 82 + tADD décalage et aller à l'état 67 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 + tPV décalage et aller à l'état 84 État 58 - 34 Args: tVAR . SuiteArgs + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E + 52 Return: tRETURN E . tPV - tVIRGULE décalage et aller à l'état 83 - - $défaut réduction par utilisation de la règle 37 (SuiteArgs) - - SuiteArgs aller à l'état 84 + tADD décalage et aller à l'état 67 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 + tPV décalage et aller à l'état 85 État 59 - 51 Invocation: tVAR tPO Args . tPF - - tPF décalage et aller à l'état 85 - - -État 60 - - 23 Affbis: tVAR tAFFECTATION E . - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - - tADD décalage et aller à l'état 69 - tSUB décalage et aller à l'état 70 - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 - - $défaut réduction par utilisation de la règle 23 (Affbis) - - -État 61 - - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - 53 Return: tRETURN E . tPV - - tADD décalage et aller à l'état 69 - tSUB décalage et aller à l'état 70 - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 - tPV décalage et aller à l'état 86 - - -État 62 - 7 Body: tAO Instructions Return tAF . $défaut réduction par utilisation de la règle 7 (Body) -État 63 +État 60 + + 21 Valeur: tVAR tAFFECTATION . E + + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 + + E aller à l'état 86 + Invocation aller à l'état 53 + + +État 61 17 SuiteDecl: tVIRGULE . Valeur SuiteDecl - tVAR décalage et aller à l'état 42 + tVAR décalage et aller à l'état 41 Valeur aller à l'état 87 - Affbis aller à l'état 44 -État 64 +État 62 16 Decl: Type Valeur SuiteDecl . tPV tPV décalage et aller à l'état 88 -État 65 +État 63 - 52 Print: tPRINT tPO tVAR tPF . tPV + 51 Print: tPRINT tPO tVAR tPF . tPV tPV décalage et aller à l'état 89 +État 64 + + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E + 30 | tSUB E . + + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 + + $défaut réduction par utilisation de la règle 30 (E) + + +État 65 + + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E + 32 | tPO E . tPF + + tADD décalage et aller à l'état 67 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 + tPF décalage et aller à l'état 90 + + État 66 - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - 33 | tSUB E . + 49 Cond: tNOT Cond . - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 - - $défaut réduction par utilisation de la règle 33 (E) + $défaut réduction par utilisation de la règle 49 (Cond) État 67 - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - 32 | tPO E . tPF + 26 E: E tADD . E - tADD décalage et aller à l'état 69 - tSUB décalage et aller à l'état 70 - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 - tPF décalage et aller à l'état 90 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 + + E aller à l'état 91 + Invocation aller à l'état 53 État 68 - 50 Cond: tNOT Cond . + 28 E: E tSUB . E - $défaut réduction par utilisation de la règle 50 (Cond) + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 + + E aller à l'état 92 + Invocation aller à l'état 53 État 69 - 27 E: E tADD . E + 27 E: E tMUL . E - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 - E aller à l'état 91 - Invocation aller à l'état 56 + E aller à l'état 93 + Invocation aller à l'état 53 État 70 - 29 E: E tSUB . E + 29 E: E tDIV . E - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 - E aller à l'état 92 - Invocation aller à l'état 56 + E aller à l'état 94 + Invocation aller à l'état 53 État 71 - 28 E: E tMUL . E + 41 Cond: E tEGAL . E - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 - E aller à l'état 93 - Invocation aller à l'état 56 + E aller à l'état 95 + Invocation aller à l'état 53 État 72 - 30 E: E tDIV . E + 42 Cond: E tDIFF . E - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 - E aller à l'état 94 - Invocation aller à l'état 56 + E aller à l'état 96 + Invocation aller à l'état 53 État 73 - 42 Cond: E tEGAL . E + 43 Cond: E tLT . E - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 - E aller à l'état 95 - Invocation aller à l'état 56 + E aller à l'état 97 + Invocation aller à l'état 53 État 74 - 43 Cond: E tDIFF . E + 44 Cond: E tGT . E - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 - E aller à l'état 96 - Invocation aller à l'état 56 + E aller à l'état 98 + Invocation aller à l'état 53 État 75 - 44 Cond: E tLT . E + 46 Cond: E tGTE . E - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 - E aller à l'état 97 - Invocation aller à l'état 56 + E aller à l'état 99 + Invocation aller à l'état 53 État 76 - 45 Cond: E tGT . E + 45 Cond: E tLTE . E - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 - E aller à l'état 98 - Invocation aller à l'état 56 + E aller à l'état 100 + Invocation aller à l'état 53 État 77 - 47 Cond: E tGTE . E + 48 Cond: E tOR . Cond - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 + tNOT décalage et aller à l'état 50 - E aller à l'état 99 - Invocation aller à l'état 56 + E aller à l'état 51 + Cond aller à l'état 101 + Invocation aller à l'état 53 État 78 - 46 Cond: E tLTE . E + 47 Cond: E tAND . Cond - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 + tNOT décalage et aller à l'état 50 - E aller à l'état 100 - Invocation aller à l'état 56 + E aller à l'état 51 + Cond aller à l'état 102 + Invocation aller à l'état 53 État 79 - 49 Cond: E tOR . Cond - - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 - tNOT décalage et aller à l'état 53 - - E aller à l'état 54 - Cond aller à l'état 101 - Invocation aller à l'état 56 - - -État 80 - - 48 Cond: E tAND . Cond - - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 - tNOT décalage et aller à l'état 53 - - E aller à l'état 54 - Cond aller à l'état 102 - Invocation aller à l'état 56 - - -État 81 - - 38 If: tIF tPO Cond tPF . tAO Instructions tAF Else + 37 If: tIF tPO Cond tPF . tAO Instructions tAF Else tAO décalage et aller à l'état 103 -État 82 +État 80 - 41 While: tWHILE tPO Cond tPF . tAO Instructions tAF + 40 While: tWHILE tPO Cond tPF . tAO Instructions tAF tAO décalage et aller à l'état 104 -État 83 +État 81 - 36 SuiteArgs: tVIRGULE . tVAR SuiteArgs + 35 SuiteArgs: tVIRGULE . tVAR SuiteArgs tVAR décalage et aller à l'état 105 +État 82 + + 33 Args: tVAR SuiteArgs . + + $défaut réduction par utilisation de la règle 33 (Args) + + +État 83 + + 50 Invocation: tVAR tPO Args tPF . + + $défaut réduction par utilisation de la règle 50 (Invocation) + + État 84 - 34 Args: tVAR SuiteArgs . + 23 Aff: tVAR tAFFECTATION E tPV . - $défaut réduction par utilisation de la règle 34 (Args) + $défaut réduction par utilisation de la règle 23 (Aff) État 85 - 51 Invocation: tVAR tPO Args tPF . + 52 Return: tRETURN E tPV . - $défaut réduction par utilisation de la règle 51 (Invocation) + $défaut réduction par utilisation de la règle 52 (Return) État 86 - 53 Return: tRETURN E tPV . + 21 Valeur: tVAR tAFFECTATION E . + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E - $défaut réduction par utilisation de la règle 53 (Return) + tADD décalage et aller à l'état 67 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 + + $défaut réduction par utilisation de la règle 21 (Valeur) État 87 17 SuiteDecl: tVIRGULE Valeur . SuiteDecl - tVIRGULE décalage et aller à l'état 63 + tVIRGULE décalage et aller à l'état 61 $défaut réduction par utilisation de la règle 18 (SuiteDecl) @@ -1067,9 +1073,9 @@ Return (58) État 89 - 52 Print: tPRINT tPO tVAR tPF tPV . + 51 Print: tPRINT tPO tVAR tPF tPV . - $défaut réduction par utilisation de la règle 52 (Print) + $défaut réduction par utilisation de la règle 51 (Print) État 90 @@ -1081,170 +1087,170 @@ Return (58) État 91 - 27 E: E . tADD E - 27 | E tADD E . - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E + 26 E: E . tADD E + 26 | E tADD E . + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E - tSUB décalage et aller à l'état 70 - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 - $défaut réduction par utilisation de la règle 27 (E) + $défaut réduction par utilisation de la règle 26 (E) État 92 - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 29 | E tSUB E . - 30 | E . tDIV E + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 28 | E tSUB E . + 29 | E . tDIV E - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 - - $défaut réduction par utilisation de la règle 29 (E) - - -État 93 - - 27 E: E . tADD E - 28 | E . tMUL E - 28 | E tMUL E . - 29 | E . tSUB E - 30 | E . tDIV E - - tDIV décalage et aller à l'état 72 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 $défaut réduction par utilisation de la règle 28 (E) +État 93 + + 26 E: E . tADD E + 27 | E . tMUL E + 27 | E tMUL E . + 28 | E . tSUB E + 29 | E . tDIV E + + tDIV décalage et aller à l'état 70 + + $défaut réduction par utilisation de la règle 27 (E) + + État 94 - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - 30 | E tDIV E . + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E + 29 | E tDIV E . - $défaut réduction par utilisation de la règle 30 (E) + $défaut réduction par utilisation de la règle 29 (E) État 95 - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - 42 Cond: E tEGAL E . + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E + 41 Cond: E tEGAL E . - tADD décalage et aller à l'état 69 - tSUB décalage et aller à l'état 70 - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 + tADD décalage et aller à l'état 67 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 - $défaut réduction par utilisation de la règle 42 (Cond) + $défaut réduction par utilisation de la règle 41 (Cond) État 96 - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - 43 Cond: E tDIFF E . + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E + 42 Cond: E tDIFF E . - tADD décalage et aller à l'état 69 - tSUB décalage et aller à l'état 70 - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 + tADD décalage et aller à l'état 67 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 - $défaut réduction par utilisation de la règle 43 (Cond) + $défaut réduction par utilisation de la règle 42 (Cond) État 97 - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - 44 Cond: E tLT E . + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E + 43 Cond: E tLT E . - tADD décalage et aller à l'état 69 - tSUB décalage et aller à l'état 70 - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 + tADD décalage et aller à l'état 67 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 - $défaut réduction par utilisation de la règle 44 (Cond) + $défaut réduction par utilisation de la règle 43 (Cond) État 98 - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - 45 Cond: E tGT E . + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E + 44 Cond: E tGT E . - tADD décalage et aller à l'état 69 - tSUB décalage et aller à l'état 70 - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 + tADD décalage et aller à l'état 67 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 - $défaut réduction par utilisation de la règle 45 (Cond) + $défaut réduction par utilisation de la règle 44 (Cond) État 99 - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - 47 Cond: E tGTE E . + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E + 46 Cond: E tGTE E . - tADD décalage et aller à l'état 69 - tSUB décalage et aller à l'état 70 - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 - - $défaut réduction par utilisation de la règle 47 (Cond) - - -État 100 - - 27 E: E . tADD E - 28 | E . tMUL E - 29 | E . tSUB E - 30 | E . tDIV E - 46 Cond: E tLTE E . - - tADD décalage et aller à l'état 69 - tSUB décalage et aller à l'état 70 - tMUL décalage et aller à l'état 71 - tDIV décalage et aller à l'état 72 + tADD décalage et aller à l'état 67 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 $défaut réduction par utilisation de la règle 46 (Cond) +État 100 + + 26 E: E . tADD E + 27 | E . tMUL E + 28 | E . tSUB E + 29 | E . tDIV E + 45 Cond: E tLTE E . + + tADD décalage et aller à l'état 67 + tSUB décalage et aller à l'état 68 + tMUL décalage et aller à l'état 69 + tDIV décalage et aller à l'état 70 + + $défaut réduction par utilisation de la règle 45 (Cond) + + État 101 - 49 Cond: E tOR Cond . - - $défaut réduction par utilisation de la règle 49 (Cond) - - -État 102 - - 48 Cond: E tAND Cond . + 48 Cond: E tOR Cond . $défaut réduction par utilisation de la règle 48 (Cond) +État 102 + + 47 Cond: E tAND Cond . + + $défaut réduction par utilisation de la règle 47 (Cond) + + État 103 - 38 If: tIF tPO Cond tPF tAO . Instructions tAF Else + 37 If: tIF tPO Cond tPF tAO . Instructions tAF Else tINT décalage et aller à l'état 16 tPRINT décalage et aller à l'état 17 @@ -1259,17 +1265,16 @@ Return (58) Instruction aller à l'état 23 Decl aller à l'état 24 Type aller à l'état 25 - Affbis aller à l'état 26 - Aff aller à l'état 27 - If aller à l'état 28 - While aller à l'état 29 - Invocation aller à l'état 30 - Print aller à l'état 31 + Aff aller à l'état 26 + If aller à l'état 27 + While aller à l'état 28 + Invocation aller à l'état 29 + Print aller à l'état 30 État 104 - 41 While: tWHILE tPO Cond tPF tAO . Instructions tAF + 40 While: tWHILE tPO Cond tPF tAO . Instructions tAF tINT décalage et aller à l'état 16 tPRINT décalage et aller à l'état 17 @@ -1284,21 +1289,20 @@ Return (58) Instruction aller à l'état 23 Decl aller à l'état 24 Type aller à l'état 25 - Affbis aller à l'état 26 - Aff aller à l'état 27 - If aller à l'état 28 - While aller à l'état 29 - Invocation aller à l'état 30 - Print aller à l'état 31 + Aff aller à l'état 26 + If aller à l'état 27 + While aller à l'état 28 + Invocation aller à l'état 29 + Print aller à l'état 30 État 105 - 36 SuiteArgs: tVIRGULE tVAR . SuiteArgs + 35 SuiteArgs: tVIRGULE tVAR . SuiteArgs - tVIRGULE décalage et aller à l'état 83 + tVIRGULE décalage et aller à l'état 81 - $défaut réduction par utilisation de la règle 37 (SuiteArgs) + $défaut réduction par utilisation de la règle 36 (SuiteArgs) SuiteArgs aller à l'état 109 @@ -1312,28 +1316,28 @@ Return (58) État 107 - 38 If: tIF tPO Cond tPF tAO Instructions . tAF Else + 37 If: tIF tPO Cond tPF tAO Instructions . tAF Else tAF décalage et aller à l'état 110 État 108 - 41 While: tWHILE tPO Cond tPF tAO Instructions . tAF + 40 While: tWHILE tPO Cond tPF tAO Instructions . tAF tAF décalage et aller à l'état 111 État 109 - 36 SuiteArgs: tVIRGULE tVAR SuiteArgs . + 35 SuiteArgs: tVIRGULE tVAR SuiteArgs . - $défaut réduction par utilisation de la règle 36 (SuiteArgs) + $défaut réduction par utilisation de la règle 35 (SuiteArgs) État 110 - 38 If: tIF tPO Cond tPF tAO Instructions tAF . Else + 37 If: tIF tPO Cond tPF tAO Instructions tAF . Else tELSE décalage et aller à l'état 112 @@ -1342,15 +1346,15 @@ Return (58) État 111 - 41 While: tWHILE tPO Cond tPF tAO Instructions tAF . + 40 While: tWHILE tPO Cond tPF tAO Instructions tAF . - $défaut réduction par utilisation de la règle 41 (While) + $défaut réduction par utilisation de la règle 40 (While) État 112 - 39 Else: tELSE . tAO Instructions tAF - 40 | tELSE . tIF tPO Cond tPF tAO Instructions tAF Else + 38 Else: tELSE . tAO Instructions tAF + 39 | tELSE . tIF tPO Cond tPF tAO Instructions tAF Else tAO décalage et aller à l'état 114 tIF décalage et aller à l'état 115 @@ -1358,14 +1362,14 @@ Return (58) État 113 - 38 If: tIF tPO Cond tPF tAO Instructions tAF Else . + 37 If: tIF tPO Cond tPF tAO Instructions tAF Else . - $défaut réduction par utilisation de la règle 38 (If) + $défaut réduction par utilisation de la règle 37 (If) État 114 - 39 Else: tELSE tAO . Instructions tAF + 38 Else: tELSE tAO . Instructions tAF tINT décalage et aller à l'état 16 tPRINT décalage et aller à l'état 17 @@ -1380,67 +1384,66 @@ Return (58) Instruction aller à l'état 23 Decl aller à l'état 24 Type aller à l'état 25 - Affbis aller à l'état 26 - Aff aller à l'état 27 - If aller à l'état 28 - While aller à l'état 29 - Invocation aller à l'état 30 - Print aller à l'état 31 + Aff aller à l'état 26 + If aller à l'état 27 + While aller à l'état 28 + Invocation aller à l'état 29 + Print aller à l'état 30 État 115 - 40 Else: tELSE tIF . tPO Cond tPF tAO Instructions tAF Else + 39 Else: tELSE tIF . tPO Cond tPF tAO Instructions tAF Else tPO décalage et aller à l'état 117 État 116 - 39 Else: tELSE tAO Instructions . tAF + 38 Else: tELSE tAO Instructions . tAF tAF décalage et aller à l'état 118 État 117 - 40 Else: tELSE tIF tPO . Cond tPF tAO Instructions tAF Else + 39 Else: tELSE tIF tPO . Cond tPF tAO Instructions tAF Else - tENTIER décalage et aller à l'état 49 - tSUB décalage et aller à l'état 50 - tPO décalage et aller à l'état 51 - tVAR décalage et aller à l'état 52 - tNOT décalage et aller à l'état 53 + tENTIER décalage et aller à l'état 46 + tSUB décalage et aller à l'état 47 + tPO décalage et aller à l'état 48 + tVAR décalage et aller à l'état 49 + tNOT décalage et aller à l'état 50 - E aller à l'état 54 + E aller à l'état 51 Cond aller à l'état 119 - Invocation aller à l'état 56 + Invocation aller à l'état 53 État 118 - 39 Else: tELSE tAO Instructions tAF . + 38 Else: tELSE tAO Instructions tAF . - $défaut réduction par utilisation de la règle 39 (Else) + $défaut réduction par utilisation de la règle 38 (Else) État 119 - 40 Else: tELSE tIF tPO Cond . tPF tAO Instructions tAF Else + 39 Else: tELSE tIF tPO Cond . tPF tAO Instructions tAF Else tPF décalage et aller à l'état 120 État 120 - 40 Else: tELSE tIF tPO Cond tPF . tAO Instructions tAF Else + 39 Else: tELSE tIF tPO Cond tPF . tAO Instructions tAF Else tAO décalage et aller à l'état 121 État 121 - 40 Else: tELSE tIF tPO Cond tPF tAO . Instructions tAF Else + 39 Else: tELSE tIF tPO Cond tPF tAO . Instructions tAF Else tINT décalage et aller à l'état 16 tPRINT décalage et aller à l'état 17 @@ -1455,24 +1458,23 @@ Return (58) Instruction aller à l'état 23 Decl aller à l'état 24 Type aller à l'état 25 - Affbis aller à l'état 26 - Aff aller à l'état 27 - If aller à l'état 28 - While aller à l'état 29 - Invocation aller à l'état 30 - Print aller à l'état 31 + Aff aller à l'état 26 + If aller à l'état 27 + While aller à l'état 28 + Invocation aller à l'état 29 + Print aller à l'état 30 État 122 - 40 Else: tELSE tIF tPO Cond tPF tAO Instructions . tAF Else + 39 Else: tELSE tIF tPO Cond tPF tAO Instructions . tAF Else tAF décalage et aller à l'état 123 État 123 - 40 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF . Else + 39 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF . Else tELSE décalage et aller à l'état 112 @@ -1481,6 +1483,6 @@ Return (58) État 124 - 40 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF Else . + 39 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF Else . - $défaut réduction par utilisation de la règle 40 (Else) + $défaut réduction par utilisation de la règle 39 (Else) diff --git a/analyse_syntaxique.tab.c b/analyse_syntaxique.tab.c index 8adf889..7ad149a 100644 --- a/analyse_syntaxique.tab.c +++ b/analyse_syntaxique.tab.c @@ -162,8 +162,13 @@ int yyparse (void); #line 6 "analyse_syntaxique.y" /* yacc.c:358 */ #include +#include "table_symboles.h" -#line 167 "analyse_syntaxique.tab.c" /* yacc.c:358 */ +enum Initialised_Variable init; +enum Symbole_Type type; +Table_Symboles table; + +#line 172 "analyse_syntaxique.tab.c" /* yacc.c:358 */ #ifdef short # undef short @@ -405,14 +410,14 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 4 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 132 +#define YYLAST 133 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 35 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 24 +#define YYNNTS 23 /* YYNRULES -- Number of rules. */ -#define YYNRULES 54 +#define YYNRULES 53 /* YYNSTATES -- Number of states. */ #define YYNSTATES 125 @@ -463,12 +468,12 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 63, 63, 65, 66, 68, 71, 72, 75, 77, - 78, 80, 81, 82, 83, 84, 85, 87, 89, 90, - 92, 93, 95, 96, 98, 100, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 112, 113, 115, 116, 118, - 120, 121, 123, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 135, 137, 139 + 0, 68, 68, 70, 71, 73, 76, 77, 80, 82, + 83, 85, 86, 87, 88, 89, 90, 92, 94, 95, + 97, 98, 100, 101, 104, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 117, 118, 120, 121, 123, 125, + 126, 128, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 140, 142, 144 }; #endif @@ -483,8 +488,8 @@ static const char *const yytname[] = "tINT", "tPRINT", "tRETURN", "tOR", "tAND", "tIF", "tELSE", "tWHILE", "tCONST", "tVAR", "tNOT", "$accept", "Main", "Params", "Param", "SuiteParams", "Body", "Instructions", "Instruction", "Decl", - "SuiteDecl", "Type", "Valeur", "Affbis", "Aff", "E", "Args", "SuiteArgs", - "If", "Else", "While", "Cond", "Invocation", "Print", "Return", YY_NULLPTR + "SuiteDecl", "Type", "Valeur", "Aff", "E", "Args", "SuiteArgs", "If", + "Else", "While", "Cond", "Invocation", "Print", "Return", YY_NULLPTR }; #endif @@ -500,10 +505,10 @@ static const yytype_uint16 yytoknum[] = }; # endif -#define YYPACT_NINF -36 +#define YYPACT_NINF -35 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-36))) + (!!((Yystate) == (-35))) #define YYTABLE_NINF -1 @@ -514,19 +519,19 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int8 yypact[] = { - -7, -4, 26, 18, -36, 9, 12, 40, 36, -36, - 50, 9, -36, 54, -36, 36, -36, 55, 68, 79, - 39, -2, 63, 54, -36, 60, 80, -36, -36, -36, - 81, -36, 82, 64, 15, 15, -36, 65, 19, 19, - 88, -36, 86, 89, -36, -36, -36, -36, 93, -36, - 19, 19, 96, 15, 48, 97, -36, 99, 91, 100, - 24, 66, -36, 60, 98, 101, 1, 52, -36, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 15, - 15, 102, 103, 78, -36, -36, -36, 89, -36, -36, - -36, 5, 1, 108, -36, 24, 24, 24, 24, 24, - 24, -36, -36, 54, 54, 91, -36, 105, 106, -36, - 90, -36, -6, -36, 54, 110, 109, 15, -36, 112, - 113, 54, 111, 90, -36 + -3, -12, 31, 34, -35, 20, 25, 50, 44, -35, + 57, 20, -35, 46, -35, 44, -35, 52, 60, 65, + 56, -4, 58, 46, -35, 43, -35, -35, -35, 69, + -35, 79, 61, 14, 14, -35, 63, 16, 16, 85, + -35, 82, 91, -35, -35, 90, -35, 16, 16, 98, + 14, 45, 99, -35, 100, 101, 102, 81, 97, -35, + 16, 43, 103, 104, 8, 22, -35, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 14, 14, 108, + 109, 80, -35, -35, -35, -35, 49, 91, -35, -35, + -35, 1, 8, 106, -35, 49, 49, 49, 49, 49, + 49, -35, -35, 46, 46, 101, -35, 110, 111, -35, + 94, -35, -5, -35, 46, 112, 113, 14, -35, 105, + 115, 46, 116, 94, -35 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -536,33 +541,33 @@ static const yytype_uint8 yydefact[] = { 0, 0, 0, 0, 1, 3, 0, 0, 7, 5, 0, 0, 4, 10, 2, 7, 20, 0, 0, 0, - 0, 0, 0, 10, 15, 0, 0, 11, 12, 13, - 0, 14, 0, 0, 0, 0, 21, 36, 0, 0, - 0, 9, 22, 19, 23, 25, 16, 6, 0, 26, - 0, 0, 27, 0, 0, 0, 32, 0, 38, 0, - 24, 0, 8, 0, 0, 0, 34, 0, 51, 0, + 0, 0, 0, 10, 15, 0, 11, 12, 13, 0, + 14, 0, 0, 0, 0, 21, 35, 0, 0, 0, + 9, 23, 19, 16, 6, 0, 25, 0, 0, 26, + 0, 0, 0, 32, 0, 37, 0, 0, 0, 8, + 0, 0, 0, 0, 31, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 35, 52, 54, 19, 17, 53, - 33, 28, 30, 29, 31, 43, 44, 45, 46, 48, - 47, 50, 49, 10, 10, 38, 18, 0, 0, 37, - 0, 42, 0, 39, 10, 0, 0, 0, 40, 0, - 0, 10, 0, 0, 41 + 0, 0, 34, 51, 24, 53, 22, 19, 17, 52, + 33, 27, 29, 28, 30, 42, 43, 44, 45, 47, + 46, 49, 48, 10, 10, 37, 18, 0, 0, 36, + 0, 41, 0, 38, 10, 0, 0, 0, 39, 0, + 0, 10, 0, 0, 40 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -36, -36, -36, 114, 115, -36, -22, -36, -36, 41, - -36, 69, -19, -36, -35, -36, 21, -36, 4, -36, - -33, -13, -36, -36 + -35, -35, -35, 118, 117, -35, -22, -35, -35, 40, + -35, 70, -35, -34, -35, 28, -35, 7, -35, -32, + -13, -35, -35 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 2, 7, 8, 12, 14, 22, 23, 24, 64, - 25, 43, 26, 27, 54, 59, 84, 28, 113, 29, - 55, 56, 31, 40 + -1, 2, 7, 8, 12, 14, 22, 23, 24, 62, + 25, 42, 26, 51, 56, 82, 27, 113, 28, 52, + 53, 30, 39 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -570,38 +575,38 @@ static const yytype_int8 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint8 yytable[] = { - 30, 41, 57, 60, 61, 114, 44, 37, 71, 72, - 30, 70, 71, 72, 38, 66, 67, 1, 49, 3, - 68, 50, 49, 115, 51, 50, 4, 5, 51, 69, - 70, 71, 72, 6, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 44, 9, 101, 102, 52, 53, - 10, 11, 52, 69, 70, 71, 72, 69, 70, 71, - 72, 13, 90, 36, 33, 73, 74, 75, 76, 77, - 78, 69, 70, 71, 72, 79, 80, 34, 16, 17, - 86, 107, 108, 18, 119, 19, 20, 21, 35, 39, - 30, 30, 116, 42, 45, 46, 47, 48, 58, 122, - 62, 30, 38, 65, 63, 37, 83, 81, 30, 82, - 85, 105, 88, 103, 104, 89, 72, 110, 111, 117, - 112, 118, 120, 123, 121, 15, 109, 124, 106, 0, - 32, 0, 87 + 29, 40, 54, 57, 58, 36, 114, 68, 69, 70, + 29, 3, 37, 64, 65, 69, 70, 46, 66, 46, + 47, 1, 47, 48, 115, 48, 86, 67, 68, 69, + 70, 4, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 5, 6, 101, 102, 49, 50, 49, + 67, 68, 69, 70, 67, 68, 69, 70, 9, 11, + 10, 32, 71, 72, 73, 74, 75, 76, 13, 33, + 16, 17, 77, 78, 34, 18, 41, 19, 20, 21, + 35, 107, 108, 43, 38, 119, 67, 68, 69, 70, + 29, 29, 116, 44, 45, 84, 55, 59, 60, 122, + 63, 29, 67, 68, 69, 70, 61, 36, 29, 79, + 80, 85, 83, 105, 70, 120, 81, 88, 89, 103, + 104, 117, 110, 111, 112, 118, 121, 106, 123, 15, + 124, 87, 31, 109 }; -static const yytype_int8 yycheck[] = +static const yytype_uint8 yycheck[] = { - 13, 23, 35, 38, 39, 11, 25, 9, 7, 8, - 23, 6, 7, 8, 16, 50, 51, 24, 3, 23, - 53, 6, 3, 29, 9, 6, 0, 9, 9, 5, - 6, 7, 8, 24, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 63, 33, 79, 80, 33, 34, - 10, 15, 33, 5, 6, 7, 8, 5, 6, 7, - 8, 11, 10, 24, 9, 17, 18, 19, 20, 21, - 22, 5, 6, 7, 8, 27, 28, 9, 24, 25, - 14, 103, 104, 29, 117, 31, 32, 33, 9, 26, - 103, 104, 114, 33, 14, 14, 14, 33, 33, 121, - 12, 114, 16, 10, 15, 9, 15, 10, 121, 10, - 10, 33, 14, 11, 11, 14, 8, 12, 12, 9, - 30, 12, 10, 12, 11, 11, 105, 123, 87, -1, - 15, -1, 63 + 13, 23, 34, 37, 38, 9, 11, 6, 7, 8, + 23, 23, 16, 47, 48, 7, 8, 3, 50, 3, + 6, 24, 6, 9, 29, 9, 60, 5, 6, 7, + 8, 0, 10, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 9, 24, 77, 78, 33, 34, 33, + 5, 6, 7, 8, 5, 6, 7, 8, 33, 15, + 10, 9, 17, 18, 19, 20, 21, 22, 11, 9, + 24, 25, 27, 28, 9, 29, 33, 31, 32, 33, + 24, 103, 104, 14, 26, 117, 5, 6, 7, 8, + 103, 104, 114, 14, 33, 14, 33, 12, 16, 121, + 10, 114, 5, 6, 7, 8, 15, 9, 121, 10, + 10, 14, 10, 33, 8, 10, 15, 14, 14, 11, + 11, 9, 12, 12, 30, 12, 11, 87, 12, 11, + 123, 61, 15, 105 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -610,17 +615,17 @@ static const yytype_uint8 yystos[] = { 0, 24, 36, 23, 0, 9, 24, 37, 38, 33, 10, 15, 39, 11, 40, 38, 24, 25, 29, 31, - 32, 33, 41, 42, 43, 45, 47, 48, 52, 54, - 56, 57, 39, 9, 9, 9, 24, 9, 16, 26, - 58, 41, 33, 46, 47, 14, 14, 14, 33, 3, - 6, 9, 33, 34, 49, 55, 56, 55, 33, 50, - 49, 49, 12, 15, 44, 10, 49, 49, 55, 5, - 6, 7, 8, 17, 18, 19, 20, 21, 22, 27, - 28, 10, 10, 15, 51, 10, 14, 46, 14, 14, - 10, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 55, 55, 11, 11, 33, 44, 41, 41, 51, - 12, 12, 30, 53, 11, 29, 41, 9, 12, 55, - 10, 11, 41, 12, 53 + 32, 33, 41, 42, 43, 45, 47, 51, 53, 55, + 56, 39, 9, 9, 9, 24, 9, 16, 26, 57, + 41, 33, 46, 14, 14, 33, 3, 6, 9, 33, + 34, 48, 54, 55, 54, 33, 49, 48, 48, 12, + 16, 15, 44, 10, 48, 48, 54, 5, 6, 7, + 8, 17, 18, 19, 20, 21, 22, 27, 28, 10, + 10, 15, 50, 10, 14, 14, 48, 46, 14, 14, + 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 54, 54, 11, 11, 33, 44, 41, 41, 50, + 12, 12, 30, 52, 11, 29, 41, 9, 12, 54, + 10, 11, 41, 12, 52 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -628,10 +633,10 @@ static const yytype_uint8 yyr1[] = { 0, 35, 36, 37, 37, 38, 39, 39, 40, 41, 41, 42, 42, 42, 42, 42, 42, 43, 44, 44, - 45, 45, 46, 46, 47, 48, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 50, 50, 51, 51, 52, - 53, 53, 54, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 56, 57, 58 + 45, 45, 46, 46, 47, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 49, 49, 50, 50, 51, 52, + 52, 53, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 55, 56, 57 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -639,10 +644,10 @@ static const yytype_uint8 yyr2[] = { 0, 2, 6, 0, 2, 2, 4, 0, 4, 2, 0, 1, 1, 1, 1, 1, 2, 4, 3, 0, - 1, 2, 1, 1, 3, 2, 1, 1, 3, 3, - 3, 3, 1, 3, 2, 2, 0, 3, 0, 8, - 4, 9, 7, 3, 3, 3, 3, 3, 3, 3, - 3, 2, 4, 5, 3 + 1, 2, 3, 1, 4, 1, 1, 3, 3, 3, + 3, 2, 1, 3, 2, 0, 3, 0, 8, 4, + 9, 7, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 4, 5, 3 }; @@ -1319,205 +1324,205 @@ yyreduce: switch (yyn) { case 2: -#line 63 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Dans main\n");} -#line 1325 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 68 "analyse_syntaxique.y" /* yacc.c:1646 */ + {} +#line 1330 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 3: -#line 65 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 70 "analyse_syntaxique.y" /* yacc.c:1646 */ {printf("Sans params\n");} -#line 1331 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1336 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 5: -#line 68 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 73 "analyse_syntaxique.y" /* yacc.c:1646 */ {printf("Parametre : %s\n", (yyvsp[0].id));} -#line 1337 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1342 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 8: -#line 75 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 80 "analyse_syntaxique.y" /* yacc.c:1646 */ {printf("Dans body\n");} -#line 1343 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ - break; - - case 17: -#line 87 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Declaration\n");} -#line 1349 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1348 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 20: -#line 92 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("int\n");} -#line 1355 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 97 "analyse_syntaxique.y" /* yacc.c:1646 */ + {type = TYPE_INT;} +#line 1354 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 21: -#line 93 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("const int\n");} -#line 1361 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 98 "analyse_syntaxique.y" /* yacc.c:1646 */ + {type = TYPE_CONST_INT;} +#line 1360 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 22: -#line 95 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Declaration %s\n", (yyvsp[0].id));} -#line 1367 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 100 "analyse_syntaxique.y" /* yacc.c:1646 */ + {add_symbole_top(&table, (yyvsp[-2].id), type, INITIALISED, table.depth);} +#line 1366 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ + break; + + case 23: +#line 101 "analyse_syntaxique.y" /* yacc.c:1646 */ + {add_symbole_top(&table, (yyvsp[0].id), type, NOT_INITIALISED, table.depth);} +#line 1372 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 24: -#line 98 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Affectation : %s\n", (yyvsp[-2].id));} -#line 1373 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 104 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Affectation : %s\n", (yyvsp[-3].id));} +#line 1378 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ + break; + + case 25: +#line 106 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("int %d\n", (yyvsp[0].nombre));} +#line 1384 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 26: -#line 102 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("int %d\n", (yyvsp[0].nombre));} -#line 1379 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 107 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("var %s\n", (yyvsp[0].id));} +#line 1390 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 27: -#line 103 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("var %s\n", (yyvsp[0].id));} -#line 1385 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 108 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Addition\n");} +#line 1396 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 28: -#line 104 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Addition\n");} -#line 1391 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 109 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Multiplication\n");} +#line 1402 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 29: -#line 105 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Multiplication\n");} -#line 1397 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 110 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Soustraction\n");} +#line 1408 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 30: -#line 106 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Soustraction\n");} -#line 1403 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 111 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Division\n");} +#line 1414 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 31: -#line 107 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Division\n");} -#line 1409 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 112 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Soustraction\n");} +#line 1420 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 33: -#line 109 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 114 "analyse_syntaxique.y" /* yacc.c:1646 */ {printf("Parenthèse\n");} -#line 1415 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1426 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; - case 34: -#line 110 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Soustraction\n");} -#line 1421 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ + case 38: +#line 123 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Dans if\n");} +#line 1432 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 39: -#line 118 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Dans if\n");} -#line 1427 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 125 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("else\n");} +#line 1438 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 40: -#line 120 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("else\n");} -#line 1433 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 126 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("elsif\n");} +#line 1444 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 41: -#line 121 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("elsif\n");} -#line 1439 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 128 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Dans while\n");} +#line 1450 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 42: -#line 123 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Dans while\n");} -#line 1445 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 130 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond ==\n");} +#line 1456 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 43: -#line 125 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond ==\n");} -#line 1451 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 131 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond !=\n");} +#line 1462 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 44: -#line 126 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond !=\n");} -#line 1457 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 132 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond <\n");} +#line 1468 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 45: -#line 127 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond <\n");} -#line 1463 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 133 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond >\n");} +#line 1474 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 46: -#line 128 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond >\n");} -#line 1469 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 134 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond <=\n");} +#line 1480 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 47: -#line 129 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond <=\n");} -#line 1475 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 135 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond >=\n");} +#line 1486 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 48: -#line 130 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond >=\n");} -#line 1481 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 136 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond &&\n");} +#line 1492 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 49: -#line 131 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond &&\n");} -#line 1487 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 137 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond ||\n");} +#line 1498 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 50: -#line 132 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond ||\n");} -#line 1493 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 138 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond !\n");} +#line 1504 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 51: -#line 133 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond !\n");} -#line 1499 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 140 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Dans invocation\n");} +#line 1510 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 52: -#line 135 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Dans invocation\n");} -#line 1505 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 142 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("printf de %s\n", (yyvsp[-2].id));} +#line 1516 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 53: -#line 137 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("printf de %s\n", (yyvsp[-2].id));} -#line 1511 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ - break; - - case 54: -#line 139 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 144 "analyse_syntaxique.y" /* yacc.c:1646 */ {printf("return\n");} -#line 1517 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1522 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; -#line 1521 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1526 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -1745,10 +1750,14 @@ yyreturn: #endif return yyresult; } -#line 141 "analyse_syntaxique.y" /* yacc.c:1906 */ +#line 146 "analyse_syntaxique.y" /* yacc.c:1906 */ #include void main(void){ + initialise_table(&table); yyparse(); + print_table(&table); + remove_symboles(&table, 0); + print_table(&table); } diff --git a/analyse_syntaxique.y b/analyse_syntaxique.y index f7ee35b..bc35442 100644 --- a/analyse_syntaxique.y +++ b/analyse_syntaxique.y @@ -5,6 +5,11 @@ char id[30]; %{ #include +#include "table_symboles.h" + +enum Initialised_Variable init; +enum Symbole_Type type; +Table_Symboles table; %} @@ -60,7 +65,7 @@ char id[30]; //Fonction : tINT tVAR tPO Params tPF Body; -Main : tINT tMAIN tPO Params tPF Body {printf("Dans main\n");}; +Main : tINT tMAIN tPO Params tPF Body {}; Params : {printf("Sans params\n");} ; Params : Param SuiteParams ; @@ -84,20 +89,19 @@ Instruction : Print ; Instruction : Decl ; Instruction : Invocation tPV ; -Decl : Type Valeur SuiteDecl tPV {printf("Declaration\n");} ; +Decl : Type Valeur SuiteDecl tPV ; SuiteDecl: tVIRGULE Valeur SuiteDecl ; SuiteDecl: ; -Type : tINT {printf("int\n");} ; -Type : tCONST tINT {printf("const int\n");} ; +Type : tINT {type = TYPE_INT;} ; +Type : tCONST tINT {type = TYPE_CONST_INT;} ; -Valeur : tVAR {printf("Declaration %s\n", $1);}; -Valeur : Affbis ; +Valeur : tVAR tAFFECTATION E {add_symbole_top(&table, $1, type, INITIALISED, table.depth);}; +Valeur : tVAR {add_symbole_top(&table, $1, type, NOT_INITIALISED, table.depth);}; -Affbis : tVAR tAFFECTATION E {printf("Affectation : %s\n", $1);}; -Aff : Affbis tPV ; +Aff : tVAR tAFFECTATION E tPV {printf("Affectation : %s\n", $1);}; E : tENTIER {printf("int %d\n", $1);}; E : tVAR {printf("var %s\n", $1);}; @@ -105,9 +109,10 @@ E : E tADD E {printf("Addition\n");} ; E : E tMUL E {printf("Multiplication\n");} ; E : E tSUB E {printf("Soustraction\n");} ; E : E tDIV E {printf("Division\n");} ; +E : tSUB E {printf("Soustraction\n");} ; E : Invocation ; E : tPO E tPF {printf("Parenthèse\n");} ; -E : tSUB E {printf("Soustraction\n");} ; + Args : tVAR SuiteArgs ; Args : ; @@ -141,6 +146,11 @@ Return : tRETURN E tPV {printf("return\n");}; %% #include void main(void){ + //TODO: rajouter gestion des erreurs + initialise_table(&table); yyparse(); + print_table(&table); + remove_symboles(&table, 0); + print_table(&table); } diff --git a/gen_assembleur.c b/gen_assembleur.c new file mode 100644 index 0000000..e69de29 diff --git a/gen_assembleur.h b/gen_assembleur.h new file mode 100644 index 0000000..3b0f268 --- /dev/null +++ b/gen_assembleur.h @@ -0,0 +1,21 @@ +#ifndef GEN_ASSEMBLEUR_H +#define GEN_ASSEMBLEUR_H + +#define INSTRUCTION_TABLE_SIZE 1000 +#define INSTRUCTION_SIZE 100 + +//table des instructions +typedef struct table{ + char* +} + +enum operation{ADD, SUB, MUL, DIV}; + + +void gen_arithmetique(enum operation op, int arg1, int arg2); + + +//renvoie l'index (ou valeur?) de la premiere @ dispo +int new_temp(); + +#endif \ No newline at end of file diff --git a/poubelle/test.c b/poubelle/test.c new file mode 100644 index 0000000..3552281 --- /dev/null +++ b/poubelle/test.c @@ -0,0 +1,18 @@ +#include +#include "table_symboles.h" + +int main() { + + Table_Symboles table; + initialise_table(&table); + + add_symbole_top(&table, "var1" , TYPE_INT, INITIALISED); + add_symbole_top(&table, "var1" , TYPE_INT, INITIALISED); + + add_symbole_top(&table, "var2" , TYPE_INT, INITIALISED); + add_symbole_bottom(&table, "varTemp1" , TYPE_CONST_INT, INITIALISED); + add_symbole_bottom(&table, "varTemp2" , TYPE_INT, NOT_INITIALISED); + + print_table(&table); + return 0; +} diff --git a/script.sh b/script.sh index e3a96f5..7f06ad4 100755 --- a/script.sh +++ b/script.sh @@ -3,12 +3,9 @@ flex analyse_lexicale.lex gcc -w *.c -ly echo " int main(){ - const int toto = 1, mimi, lolo = 6; - int tata = 5, lala; - while (tata == 5){ - printf(tata); - lala = lolo + 6; - } + const int var1 = 1, var2; + int var2; + int var3, var4 = 1; return 1; } " | ./a.out \ No newline at end of file diff --git a/Table_Symboles/table_symboles.c b/table_symboles.c similarity index 53% rename from Table_Symboles/table_symboles.c rename to table_symboles.c index 38c74a2..fc31bde 100644 --- a/Table_Symboles/table_symboles.c +++ b/table_symboles.c @@ -1,7 +1,3 @@ -// -// Created by Nahom Belay on 31/03/2021. -// - #include "table_symboles.h" #include #include @@ -10,31 +6,33 @@ void initialise_table(Table_Symboles * table){ table->indexAvailableBottom = TABLE_SIZE - 1; table->indexAvailableTop = 0; + table->depth = 0; } int variable_exists(Table_Symboles * table, char * varName){ for (int i = 0; i < table->indexAvailableTop; i++){ if (strcmp(varName, table->array[i].Variable_Name) == 0){ - return -1; + return i; } } for (int i = (table->indexAvailableBottom + 1); i < TABLE_SIZE; i++){ if (strcmp(varName, table->array[i].Variable_Name) == 0){ - return -1; + return i; } } return 0; } -int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type type, enum Initialised_Variable init){ +int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type type, enum Initialised_Variable init, int depth){ Symbole symbole; - symbole.Variable_Name = varName; + strcpy(symbole.Variable_Name, varName); symbole.addr = table->indexAvailableTop; symbole.init = init; symbole.type = type; + symbole.symbole_depth = table->depth; if (table->indexAvailableTop >= table->indexAvailableBottom){ return -1; - } else if (variable_exists(table, varName) == -1){ + } else if (variable_exists(table, varName) != 0){ return -2; } else { table->array[table->indexAvailableTop] = symbole; @@ -45,13 +43,14 @@ int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type ty int add_symbole_bottom(Table_Symboles * table, char * varName, enum Symbole_Type type, enum Initialised_Variable init){ Symbole symbole; - symbole.Variable_Name = varName; + strcpy(symbole.Variable_Name, varName); symbole.addr = table->indexAvailableBottom; symbole.init = init; symbole.type = type; + //symbole.symbole_depth = -1; if (table->indexAvailableTop >= table->indexAvailableBottom){ return -1; - } else if (variable_exists(table, varName) == 1){ + } else if (variable_exists(table, varName) != 0){ return -2; } else { table->array[table->indexAvailableBottom] = symbole; @@ -60,28 +59,55 @@ int add_symbole_bottom(Table_Symboles * table, char * varName, enum Symbole_Type return 0; } +int remove_symboles(Table_Symboles * table, int depth){ + int index; + if (depth < table->depth){ + return -1; + } else { + index = table->indexAvailableTop; + while(table->array[index].symbole_depth == depth && index >=0){ + //remove + table->indexAvailableTop--; + index--; + } + + //TODO: vérifier qu'il n'y a pas de varaibles temporarires au moment de changement de profondeur + } + return 0; +} + +int initialise_symbole(Table_Symboles * table, char * varName){ + int index = variable_exists(table, varName); + if (index == -1){ + return -1; + } else { + table->array[index].init = INITIALISED; + } +} + void print_symbole(Symbole * symbole){ char * var = symbole->Variable_Name; int addr = symbole->addr; - int type = symbole->type; - char * typeStr; - if (type == 0){ - typeStr = "INT"; + enum Symbole_Type type = symbole->type; + char typeStr[20]; + if (type == TYPE_INT){ + strcpy(typeStr, "INT"); } else{ - typeStr = "CONST_INT"; + strcpy(typeStr, "CONST_INT"); } - int init = symbole->init; - char * initStr; - if (type == 0){ - initStr = "INITIALISED"; + enum Initialised_Variable init = symbole->init; + char initStr[20]; + if (init == INITIALISED){ + strcpy(initStr,"INITIALISED"); } else{ - initStr = "NOT_INITIALISED"; + strcpy(initStr,"NOT_INITIALISED"); } - printf("%-20s\t\t %-12s\t\t %-12d\t %-12s\n", var, typeStr, addr, initStr); + int depth = symbole->symbole_depth; + printf("%-20s\t\t %-12s\t\t %-12d\t %-20s\t %-12d\n", var, typeStr, addr, initStr, depth); } void print_table(Table_Symboles * table){ - printf("%-20s\t\t %-12s\t\t %-12s\t %-12s\n", "Variable Name", "Type", "Address", "Initialised"); + printf("%-20s\t\t %-12s\t\t %-12s\t %-20s\t %-12s\n", "Variable Name", "Type", "Address", "Initialised", "Depth"); int indexTop = table->indexAvailableTop; int indexBottom = table->indexAvailableBottom; Symbole symbole; @@ -90,11 +116,13 @@ void print_table(Table_Symboles * table){ print_symbole(&symbole); } if (table->indexAvailableBottom != TABLE_SIZE - 1){ - printf("%-20s\t\t %-12s\t\t %-12s\t %-12s\n", "...", "...", "...", "..."); + printf("%-20s\t\t %-12s\t\t %-12s\t %-20s\t %-12s\n", "...", "...", "...", "...", "..."); for (int i = (indexBottom + 1); i < TABLE_SIZE; i++){ symbole = table->array[i]; print_symbole(&symbole); } } + + } diff --git a/Table_Symboles/table_symboles.h b/table_symboles.h similarity index 74% rename from Table_Symboles/table_symboles.h rename to table_symboles.h index a070d8f..1774420 100644 --- a/Table_Symboles/table_symboles.h +++ b/table_symboles.h @@ -1,26 +1,25 @@ -// -// Created by Nahom Belay on 31/03/2021. -// - #ifndef TABLE_SYMBOLES_H #define TABLE_SYMBOLES_H #define TABLE_SIZE 50 +#define VARIABLE_SIZE 30 enum Symbole_Type {TYPE_INT , TYPE_CONST_INT}; enum Initialised_Variable{INITIALISED , NOT_INITIALISED}; typedef struct Symboles { - char * Variable_Name; + char Variable_Name[VARIABLE_SIZE]; int addr ; enum Symbole_Type type; enum Initialised_Variable init; + int symbole_depth; } Symbole; typedef struct Table_Symboles { Symbole array[TABLE_SIZE]; int indexAvailableTop; int indexAvailableBottom; + int depth; } Table_Symboles; /** @@ -37,7 +36,7 @@ void initialise_table(Table_Symboles * table); * @param init * @return if symbole added successfully, -1 if the table is full and -2 if the varaible already exists in the table */ -int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type type , enum Initialised_Variable init); +int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type type , enum Initialised_Variable init, int depth); /** * Adds a symbole at the bottom (temp variables) @@ -57,6 +56,23 @@ int add_symbole_bottom(Table_Symboles * table, char * varName, enum Symbole_Type */ int variable_exists(Table_Symboles * table, char * varName); +/** + * Removes symbole from table having certain depth + * @param table + * @param depth + * @return -1 if the symbole isn't in the table, 0 otherwise + */ +int remove_symboles(Table_Symboles * table, int depth); + +/** + * Initialises an already exisiting symbole + * @param table + * @param varName + * @return -1 if the symbole isn't in the table, 0 otherwise + */ +int initialise_symbole(Table_Symboles * table, char * varName); + + /** * Prints a symbole with this format * varName | Type | Address | Initialised/Not_Initialised @@ -70,4 +86,4 @@ void print_symbole(Symbole * symbole); */ void print_table(Table_Symboles * table); -#endif TABLE_SYMBOLES_H +#endif \ No newline at end of file