diff --git a/compiler/analyse_syntaxique.output b/compiler/analyse_syntaxique.output new file mode 100644 index 0000000..6e1ffa8 --- /dev/null +++ b/compiler/analyse_syntaxique.output @@ -0,0 +1,1967 @@ +Terminaux inutilisés dans la grammaire + + tENTIEREXP + tERROR + + +Grammaire + + 0 $accept: C $end + + 1 $@1: %empty + + 2 C: $@1 Fonctions + + 3 Fonctions: Main + 4 | Fonction Fonctions + + 5 $@2: %empty + + 6 Main: tINT tMAIN $@2 tPO Params tPF Body + + 7 $@3: %empty + + 8 Fonction: Function_type tVAR $@3 tPO Params tPF Body + + 9 Function_type: tINT + 10 | tINT tMUL + + 11 Params: %empty + 12 | Param SuiteParams + + 13 Param: Param_type tVAR + + 14 Param_type: tINT + 15 | tINT tMUL + + 16 SuiteParams: tVIRGULE Param SuiteParams + 17 | %empty + + 18 Body: tAO Instructions Return tAF + + 19 Instructions: Instruction Instructions + 20 | %empty + + 21 Instruction: Aff + 22 | If + 23 | While + 24 | Print + 25 | Decl + 26 | Invocation tPV + + 27 Decl: Type Valeur SuiteDecl tPV + + 28 SuiteDecl: tVIRGULE Valeur SuiteDecl + 29 | %empty + + 30 Type: tINT + 31 | tCONST tINT + 32 | tINT tMUL + + 33 $@4: %empty + + 34 Valeur: tVAR $@4 tAFFECTATION E + 35 | tVAR + + 36 Aff: tVAR tAFFECTATION E tPV + 37 | tMUL tVAR tAFFECTATION E tPV + + 38 E: tENTIER + 39 | tVAR + 40 | E tADD E + 41 | E tMUL E + 42 | E tSUB E + 43 | E tDIV E + 44 | tSUB E + 45 | Invocation + 46 | tPO E tPF + 47 | tAPPERSAND tVAR + 48 | tMUL tVAR + + 49 $@5: %empty + + 50 $@6: %empty + + 51 $@7: %empty + + 52 $@8: %empty + + 53 $@9: %empty + + 54 If: tIF tPO Cond tPF $@5 tAO $@6 Instructions $@7 tAF $@8 $@9 Else + + 55 $@10: %empty + + 56 $@11: %empty + + 57 Else: tELSE tAO $@10 Instructions tAF $@11 + 58 | %empty + 59 | tELSE If + + 60 $@12: %empty + + 61 $@13: %empty + + 62 $@14: %empty + + 63 $@15: %empty + + 64 While: tWHILE tPO $@12 Cond tPF $@13 tAO $@14 Instructions tAF $@15 + + 65 Cond: E tEGAL E + 66 | E tDIFF E + 67 | E tLT E + 68 | E tGT E + 69 | E tLTE E + 70 | E tGTE E + 71 | E tAND E + 72 | E tOR E + 73 | tNOT Cond + 74 | E + + 75 $@16: %empty + + 76 Invocation: tVAR tPO $@16 Args tPF + + 77 Args: Arg SuiteArgs + 78 | %empty + + 79 Arg: E + + 80 SuiteArgs: tVIRGULE Arg SuiteArgs + 81 | %empty + + 82 Print: tPRINT tPO E tPF tPV + + 83 Return: tRETURN E tPV + + +Terminaux, suivis des règles où ils apparaissent + +$end (0) 0 +error (256) +tENTIER (258) 38 +tENTIEREXP (259) +tADD (260) 40 +tSUB (261) 42 44 +tMUL (262) 10 15 32 37 41 48 +tDIV (263) 43 +tPO (264) 6 8 46 54 64 76 82 +tPF (265) 6 8 46 54 64 76 82 +tAO (266) 18 54 57 64 +tAF (267) 18 54 57 64 +tERROR (268) +tAPPERSAND (269) 47 +tPV (270) 26 27 36 37 82 83 +tVIRGULE (271) 16 28 80 +tAFFECTATION (272) 34 36 37 +tEGAL (273) 65 +tDIFF (274) 66 +tLT (275) 67 +tGT (276) 68 +tGTE (277) 70 +tLTE (278) 69 +tMAIN (279) 6 +tINT (280) 6 9 10 14 15 30 31 32 +tPRINT (281) 82 +tRETURN (282) 83 +tOR (283) 72 +tAND (284) 71 +tIF (285) 54 +tELSE (286) 57 59 +tWHILE (287) 64 +tCONST (288) 31 +tVAR (289) 8 13 34 35 36 37 39 47 48 76 +tNOT (290) 73 + + +Non-terminaux, suivis des règles où ils apparaissent + +$accept (36) + à gauche: 0 +C (37) + à gauche: 2, à droite: 0 +$@1 (38) + à gauche: 1, à droite: 2 +Fonctions (39) + à gauche: 3 4, à droite: 2 4 +Main (40) + à gauche: 6, à droite: 3 +$@2 (41) + à gauche: 5, à droite: 6 +Fonction (42) + à gauche: 8, à droite: 4 +$@3 (43) + à gauche: 7, à droite: 8 +Function_type (44) + à gauche: 9 10, à droite: 8 +Params (45) + à gauche: 11 12, à droite: 6 8 +Param (46) + à gauche: 13, à droite: 12 16 +Param_type (47) + à gauche: 14 15, à droite: 13 +SuiteParams (48) + à gauche: 16 17, à droite: 12 16 +Body (49) + à gauche: 18, à droite: 6 8 +Instructions (50) + à gauche: 19 20, à droite: 18 19 54 57 64 +Instruction (51) + à gauche: 21 22 23 24 25 26, à droite: 19 +Decl (52) + à gauche: 27, à droite: 25 +SuiteDecl (53) + à gauche: 28 29, à droite: 27 28 +Type (54) + à gauche: 30 31 32, à droite: 27 +Valeur (55) + à gauche: 34 35, à droite: 27 28 +$@4 (56) + à gauche: 33, à droite: 34 +Aff (57) + à gauche: 36 37, à droite: 21 +E (58) + à gauche: 38 39 40 41 42 43 44 45 46 47 48, à droite: 34 36 37 + 40 41 42 43 44 46 65 66 67 68 69 70 71 72 74 79 82 83 +If (59) + à gauche: 54, à droite: 22 59 +$@5 (60) + à gauche: 49, à droite: 54 +$@6 (61) + à gauche: 50, à droite: 54 +$@7 (62) + à gauche: 51, à droite: 54 +$@8 (63) + à gauche: 52, à droite: 54 +$@9 (64) + à gauche: 53, à droite: 54 +Else (65) + à gauche: 57 58 59, à droite: 54 +$@10 (66) + à gauche: 55, à droite: 57 +$@11 (67) + à gauche: 56, à droite: 57 +While (68) + à gauche: 64, à droite: 23 +$@12 (69) + à gauche: 60, à droite: 64 +$@13 (70) + à gauche: 61, à droite: 64 +$@14 (71) + à gauche: 62, à droite: 64 +$@15 (72) + à gauche: 63, à droite: 64 +Cond (73) + à gauche: 65 66 67 68 69 70 71 72 73 74, à droite: 54 64 73 +Invocation (74) + à gauche: 76, à droite: 26 45 +$@16 (75) + à gauche: 75, à droite: 76 +Args (76) + à gauche: 77 78, à droite: 76 +Arg (77) + à gauche: 79, à droite: 77 80 +SuiteArgs (78) + à gauche: 80 81, à droite: 77 80 +Print (79) + à gauche: 82, à droite: 24 +Return (80) + à gauche: 83, à droite: 18 + + +État 0 + + 0 $accept: . C $end + + $défaut réduction par utilisation de la règle 1 ($@1) + + C aller à l'état 1 + $@1 aller à l'état 2 + + +État 1 + + 0 $accept: C . $end + + $end décalage et aller à l'état 3 + + +État 2 + + 2 C: $@1 . Fonctions + + tINT décalage et aller à l'état 4 + + Fonctions aller à l'état 5 + Main aller à l'état 6 + Fonction aller à l'état 7 + Function_type aller à l'état 8 + + +État 3 + + 0 $accept: C $end . + + $défaut accepter + + +État 4 + + 6 Main: tINT . tMAIN $@2 tPO Params tPF Body + 9 Function_type: tINT . + 10 | tINT . tMUL + + tMUL décalage et aller à l'état 9 + tMAIN décalage et aller à l'état 10 + + $défaut réduction par utilisation de la règle 9 (Function_type) + + +État 5 + + 2 C: $@1 Fonctions . + + $défaut réduction par utilisation de la règle 2 (C) + + +État 6 + + 3 Fonctions: Main . + + $défaut réduction par utilisation de la règle 3 (Fonctions) + + +État 7 + + 4 Fonctions: Fonction . Fonctions + + tINT décalage et aller à l'état 4 + + Fonctions aller à l'état 11 + Main aller à l'état 6 + Fonction aller à l'état 7 + Function_type aller à l'état 8 + + +État 8 + + 8 Fonction: Function_type . tVAR $@3 tPO Params tPF Body + + tVAR décalage et aller à l'état 12 + + +État 9 + + 10 Function_type: tINT tMUL . + + $défaut réduction par utilisation de la règle 10 (Function_type) + + +État 10 + + 6 Main: tINT tMAIN . $@2 tPO Params tPF Body + + $défaut réduction par utilisation de la règle 5 ($@2) + + $@2 aller à l'état 13 + + +État 11 + + 4 Fonctions: Fonction Fonctions . + + $défaut réduction par utilisation de la règle 4 (Fonctions) + + +État 12 + + 8 Fonction: Function_type tVAR . $@3 tPO Params tPF Body + + $défaut réduction par utilisation de la règle 7 ($@3) + + $@3 aller à l'état 14 + + +État 13 + + 6 Main: tINT tMAIN $@2 . tPO Params tPF Body + + tPO décalage et aller à l'état 15 + + +État 14 + + 8 Fonction: Function_type tVAR $@3 . tPO Params tPF Body + + tPO décalage et aller à l'état 16 + + +État 15 + + 6 Main: tINT tMAIN $@2 tPO . Params tPF Body + + tINT décalage et aller à l'état 17 + + $défaut réduction par utilisation de la règle 11 (Params) + + Params aller à l'état 18 + Param aller à l'état 19 + Param_type aller à l'état 20 + + +État 16 + + 8 Fonction: Function_type tVAR $@3 tPO . Params tPF Body + + tINT décalage et aller à l'état 17 + + $défaut réduction par utilisation de la règle 11 (Params) + + Params aller à l'état 21 + Param aller à l'état 19 + Param_type aller à l'état 20 + + +État 17 + + 14 Param_type: tINT . + 15 | tINT . tMUL + + tMUL décalage et aller à l'état 22 + + $défaut réduction par utilisation de la règle 14 (Param_type) + + +État 18 + + 6 Main: tINT tMAIN $@2 tPO Params . tPF Body + + tPF décalage et aller à l'état 23 + + +État 19 + + 12 Params: Param . SuiteParams + + tVIRGULE décalage et aller à l'état 24 + + $défaut réduction par utilisation de la règle 17 (SuiteParams) + + SuiteParams aller à l'état 25 + + +État 20 + + 13 Param: Param_type . tVAR + + tVAR décalage et aller à l'état 26 + + +État 21 + + 8 Fonction: Function_type tVAR $@3 tPO Params . tPF Body + + tPF décalage et aller à l'état 27 + + +État 22 + + 15 Param_type: tINT tMUL . + + $défaut réduction par utilisation de la règle 15 (Param_type) + + +État 23 + + 6 Main: tINT tMAIN $@2 tPO Params tPF . Body + + tAO décalage et aller à l'état 28 + + Body aller à l'état 29 + + +État 24 + + 16 SuiteParams: tVIRGULE . Param SuiteParams + + tINT décalage et aller à l'état 17 + + Param aller à l'état 30 + Param_type aller à l'état 20 + + +État 25 + + 12 Params: Param SuiteParams . + + $défaut réduction par utilisation de la règle 12 (Params) + + +État 26 + + 13 Param: Param_type tVAR . + + $défaut réduction par utilisation de la règle 13 (Param) + + +État 27 + + 8 Fonction: Function_type tVAR $@3 tPO Params tPF . Body + + tAO décalage et aller à l'état 28 + + Body aller à l'état 31 + + +État 28 + + 18 Body: tAO . Instructions Return tAF + + tMUL décalage et aller à l'état 32 + tINT décalage et aller à l'état 33 + tPRINT décalage et aller à l'état 34 + tIF décalage et aller à l'état 35 + tWHILE décalage et aller à l'état 36 + tCONST décalage et aller à l'état 37 + tVAR décalage et aller à l'état 38 + + $défaut réduction par utilisation de la règle 20 (Instructions) + + Instructions aller à l'état 39 + Instruction aller à l'état 40 + Decl aller à l'état 41 + Type aller à l'état 42 + Aff aller à l'état 43 + If aller à l'état 44 + While aller à l'état 45 + Invocation aller à l'état 46 + Print aller à l'état 47 + + +État 29 + + 6 Main: tINT tMAIN $@2 tPO Params tPF Body . + + $défaut réduction par utilisation de la règle 6 (Main) + + +État 30 + + 16 SuiteParams: tVIRGULE Param . SuiteParams + + tVIRGULE décalage et aller à l'état 24 + + $défaut réduction par utilisation de la règle 17 (SuiteParams) + + SuiteParams aller à l'état 48 + + +État 31 + + 8 Fonction: Function_type tVAR $@3 tPO Params tPF Body . + + $défaut réduction par utilisation de la règle 8 (Fonction) + + +État 32 + + 37 Aff: tMUL . tVAR tAFFECTATION E tPV + + tVAR décalage et aller à l'état 49 + + +État 33 + + 30 Type: tINT . + 32 | tINT . tMUL + + tMUL décalage et aller à l'état 50 + + $défaut réduction par utilisation de la règle 30 (Type) + + +État 34 + + 82 Print: tPRINT . tPO E tPF tPV + + tPO décalage et aller à l'état 51 + + +État 35 + + 54 If: tIF . tPO Cond tPF $@5 tAO $@6 Instructions $@7 tAF $@8 $@9 Else + + tPO décalage et aller à l'état 52 + + +État 36 + + 64 While: tWHILE . tPO $@12 Cond tPF $@13 tAO $@14 Instructions tAF $@15 + + tPO décalage et aller à l'état 53 + + +État 37 + + 31 Type: tCONST . tINT + + tINT décalage et aller à l'état 54 + + +État 38 + + 36 Aff: tVAR . tAFFECTATION E tPV + 76 Invocation: tVAR . tPO $@16 Args tPF + + tPO décalage et aller à l'état 55 + tAFFECTATION décalage et aller à l'état 56 + + +État 39 + + 18 Body: tAO Instructions . Return tAF + + tRETURN décalage et aller à l'état 57 + + Return aller à l'état 58 + + +État 40 + + 19 Instructions: Instruction . Instructions + + tMUL décalage et aller à l'état 32 + tINT décalage et aller à l'état 33 + tPRINT décalage et aller à l'état 34 + tIF décalage et aller à l'état 35 + tWHILE décalage et aller à l'état 36 + tCONST décalage et aller à l'état 37 + tVAR décalage et aller à l'état 38 + + $défaut réduction par utilisation de la règle 20 (Instructions) + + Instructions aller à l'état 59 + Instruction aller à l'état 40 + Decl aller à l'état 41 + Type aller à l'état 42 + Aff aller à l'état 43 + If aller à l'état 44 + While aller à l'état 45 + Invocation aller à l'état 46 + Print aller à l'état 47 + + +État 41 + + 25 Instruction: Decl . + + $défaut réduction par utilisation de la règle 25 (Instruction) + + +État 42 + + 27 Decl: Type . Valeur SuiteDecl tPV + + tVAR décalage et aller à l'état 60 + + Valeur aller à l'état 61 + + +État 43 + + 21 Instruction: Aff . + + $défaut réduction par utilisation de la règle 21 (Instruction) + + +État 44 + + 22 Instruction: If . + + $défaut réduction par utilisation de la règle 22 (Instruction) + + +État 45 + + 23 Instruction: While . + + $défaut réduction par utilisation de la règle 23 (Instruction) + + +État 46 + + 26 Instruction: Invocation . tPV + + tPV décalage et aller à l'état 62 + + +État 47 + + 24 Instruction: Print . + + $défaut réduction par utilisation de la règle 24 (Instruction) + + +État 48 + + 16 SuiteParams: tVIRGULE Param SuiteParams . + + $défaut réduction par utilisation de la règle 16 (SuiteParams) + + +État 49 + + 37 Aff: tMUL tVAR . tAFFECTATION E tPV + + tAFFECTATION décalage et aller à l'état 63 + + +État 50 + + 32 Type: tINT tMUL . + + $défaut réduction par utilisation de la règle 32 (Type) + + +État 51 + + 82 Print: tPRINT tPO . E tPF tPV + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 70 + Invocation aller à l'état 71 + + +État 52 + + 54 If: tIF tPO . Cond tPF $@5 tAO $@6 Instructions $@7 tAF $@8 $@9 Else + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + tNOT décalage et aller à l'état 72 + + E aller à l'état 73 + Cond aller à l'état 74 + Invocation aller à l'état 71 + + +État 53 + + 64 While: tWHILE tPO . $@12 Cond tPF $@13 tAO $@14 Instructions tAF $@15 + + $défaut réduction par utilisation de la règle 60 ($@12) + + $@12 aller à l'état 75 + + +État 54 + + 31 Type: tCONST tINT . + + $défaut réduction par utilisation de la règle 31 (Type) + + +État 55 + + 76 Invocation: tVAR tPO . $@16 Args tPF + + $défaut réduction par utilisation de la règle 75 ($@16) + + $@16 aller à l'état 76 + + +État 56 + + 36 Aff: tVAR tAFFECTATION . E tPV + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 77 + Invocation aller à l'état 71 + + +État 57 + + 83 Return: tRETURN . E tPV + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 78 + Invocation aller à l'état 71 + + +État 58 + + 18 Body: tAO Instructions Return . tAF + + tAF décalage et aller à l'état 79 + + +État 59 + + 19 Instructions: Instruction Instructions . + + $défaut réduction par utilisation de la règle 19 (Instructions) + + +État 60 + + 34 Valeur: tVAR . $@4 tAFFECTATION E + 35 | tVAR . + + tAFFECTATION réduction par utilisation de la règle 33 ($@4) + $défaut réduction par utilisation de la règle 35 (Valeur) + + $@4 aller à l'état 80 + + +État 61 + + 27 Decl: Type Valeur . SuiteDecl tPV + + tVIRGULE décalage et aller à l'état 81 + + $défaut réduction par utilisation de la règle 29 (SuiteDecl) + + SuiteDecl aller à l'état 82 + + +État 62 + + 26 Instruction: Invocation tPV . + + $défaut réduction par utilisation de la règle 26 (Instruction) + + +État 63 + + 37 Aff: tMUL tVAR tAFFECTATION . E tPV + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 83 + Invocation aller à l'état 71 + + +État 64 + + 38 E: tENTIER . + + $défaut réduction par utilisation de la règle 38 (E) + + +État 65 + + 44 E: tSUB . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 84 + Invocation aller à l'état 71 + + +État 66 + + 48 E: tMUL . tVAR + + tVAR décalage et aller à l'état 85 + + +État 67 + + 46 E: tPO . E tPF + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 86 + Invocation aller à l'état 71 + + +État 68 + + 47 E: tAPPERSAND . tVAR + + tVAR décalage et aller à l'état 87 + + +État 69 + + 39 E: tVAR . + 76 Invocation: tVAR . tPO $@16 Args tPF + + tPO décalage et aller à l'état 55 + + $défaut réduction par utilisation de la règle 39 (E) + + +État 70 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 82 Print: tPRINT tPO E . tPF tPV + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + tPF décalage et aller à l'état 92 + + +État 71 + + 45 E: Invocation . + + $défaut réduction par utilisation de la règle 45 (E) + + +État 72 + + 73 Cond: tNOT . Cond + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + tNOT décalage et aller à l'état 72 + + E aller à l'état 73 + Cond aller à l'état 93 + Invocation aller à l'état 71 + + +État 73 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 65 Cond: E . tEGAL E + 66 | E . tDIFF E + 67 | E . tLT E + 68 | E . tGT E + 69 | E . tLTE E + 70 | E . tGTE E + 71 | E . tAND E + 72 | E . tOR E + 74 | E . + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + tEGAL décalage et aller à l'état 94 + tDIFF décalage et aller à l'état 95 + tLT décalage et aller à l'état 96 + tGT décalage et aller à l'état 97 + tGTE décalage et aller à l'état 98 + tLTE décalage et aller à l'état 99 + tOR décalage et aller à l'état 100 + tAND décalage et aller à l'état 101 + + $défaut réduction par utilisation de la règle 74 (Cond) + + +État 74 + + 54 If: tIF tPO Cond . tPF $@5 tAO $@6 Instructions $@7 tAF $@8 $@9 Else + + tPF décalage et aller à l'état 102 + + +État 75 + + 64 While: tWHILE tPO $@12 . Cond tPF $@13 tAO $@14 Instructions tAF $@15 + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + tNOT décalage et aller à l'état 72 + + E aller à l'état 73 + Cond aller à l'état 103 + Invocation aller à l'état 71 + + +État 76 + + 76 Invocation: tVAR tPO $@16 . Args tPF + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + $défaut réduction par utilisation de la règle 78 (Args) + + E aller à l'état 104 + Invocation aller à l'état 71 + Args aller à l'état 105 + Arg aller à l'état 106 + + +État 77 + + 36 Aff: tVAR tAFFECTATION E . tPV + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + tPV décalage et aller à l'état 107 + + +État 78 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 83 Return: tRETURN E . tPV + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + tPV décalage et aller à l'état 108 + + +État 79 + + 18 Body: tAO Instructions Return tAF . + + $défaut réduction par utilisation de la règle 18 (Body) + + +État 80 + + 34 Valeur: tVAR $@4 . tAFFECTATION E + + tAFFECTATION décalage et aller à l'état 109 + + +État 81 + + 28 SuiteDecl: tVIRGULE . Valeur SuiteDecl + + tVAR décalage et aller à l'état 60 + + Valeur aller à l'état 110 + + +État 82 + + 27 Decl: Type Valeur SuiteDecl . tPV + + tPV décalage et aller à l'état 111 + + +État 83 + + 37 Aff: tMUL tVAR tAFFECTATION E . tPV + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + tPV décalage et aller à l'état 112 + + +État 84 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 44 | tSUB E . + + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 44 (E) + + +État 85 + + 48 E: tMUL tVAR . + + $défaut réduction par utilisation de la règle 48 (E) + + +État 86 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 46 | tPO E . tPF + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + tPF décalage et aller à l'état 113 + + +État 87 + + 47 E: tAPPERSAND tVAR . + + $défaut réduction par utilisation de la règle 47 (E) + + +État 88 + + 40 E: E tADD . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 114 + Invocation aller à l'état 71 + + +État 89 + + 42 E: E tSUB . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 115 + Invocation aller à l'état 71 + + +État 90 + + 41 E: E tMUL . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 116 + Invocation aller à l'état 71 + + +État 91 + + 43 E: E tDIV . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 117 + Invocation aller à l'état 71 + + +État 92 + + 82 Print: tPRINT tPO E tPF . tPV + + tPV décalage et aller à l'état 118 + + +État 93 + + 73 Cond: tNOT Cond . + + $défaut réduction par utilisation de la règle 73 (Cond) + + +État 94 + + 65 Cond: E tEGAL . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 119 + Invocation aller à l'état 71 + + +État 95 + + 66 Cond: E tDIFF . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 120 + Invocation aller à l'état 71 + + +État 96 + + 67 Cond: E tLT . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 121 + Invocation aller à l'état 71 + + +État 97 + + 68 Cond: E tGT . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 122 + Invocation aller à l'état 71 + + +État 98 + + 70 Cond: E tGTE . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 123 + Invocation aller à l'état 71 + + +État 99 + + 69 Cond: E tLTE . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 124 + Invocation aller à l'état 71 + + +État 100 + + 72 Cond: E tOR . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 125 + Invocation aller à l'état 71 + + +État 101 + + 71 Cond: E tAND . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 126 + Invocation aller à l'état 71 + + +État 102 + + 54 If: tIF tPO Cond tPF . $@5 tAO $@6 Instructions $@7 tAF $@8 $@9 Else + + $défaut réduction par utilisation de la règle 49 ($@5) + + $@5 aller à l'état 127 + + +État 103 + + 64 While: tWHILE tPO $@12 Cond . tPF $@13 tAO $@14 Instructions tAF $@15 + + tPF décalage et aller à l'état 128 + + +État 104 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 79 Arg: E . + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 79 (Arg) + + +État 105 + + 76 Invocation: tVAR tPO $@16 Args . tPF + + tPF décalage et aller à l'état 129 + + +État 106 + + 77 Args: Arg . SuiteArgs + + tVIRGULE décalage et aller à l'état 130 + + $défaut réduction par utilisation de la règle 81 (SuiteArgs) + + SuiteArgs aller à l'état 131 + + +État 107 + + 36 Aff: tVAR tAFFECTATION E tPV . + + $défaut réduction par utilisation de la règle 36 (Aff) + + +État 108 + + 83 Return: tRETURN E tPV . + + $défaut réduction par utilisation de la règle 83 (Return) + + +État 109 + + 34 Valeur: tVAR $@4 tAFFECTATION . E + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 132 + Invocation aller à l'état 71 + + +État 110 + + 28 SuiteDecl: tVIRGULE Valeur . SuiteDecl + + tVIRGULE décalage et aller à l'état 81 + + $défaut réduction par utilisation de la règle 29 (SuiteDecl) + + SuiteDecl aller à l'état 133 + + +État 111 + + 27 Decl: Type Valeur SuiteDecl tPV . + + $défaut réduction par utilisation de la règle 27 (Decl) + + +État 112 + + 37 Aff: tMUL tVAR tAFFECTATION E tPV . + + $défaut réduction par utilisation de la règle 37 (Aff) + + +État 113 + + 46 E: tPO E tPF . + + $défaut réduction par utilisation de la règle 46 (E) + + +État 114 + + 40 E: E . tADD E + 40 | E tADD E . + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 40 (E) + + +État 115 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 42 | E tSUB E . + 43 | E . tDIV E + + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 42 (E) + + +État 116 + + 40 E: E . tADD E + 41 | E . tMUL E + 41 | E tMUL E . + 42 | E . tSUB E + 43 | E . tDIV E + + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 41 (E) + + +État 117 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 43 | E tDIV E . + + $défaut réduction par utilisation de la règle 43 (E) + + +État 118 + + 82 Print: tPRINT tPO E tPF tPV . + + $défaut réduction par utilisation de la règle 82 (Print) + + +État 119 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 65 Cond: E tEGAL E . + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 65 (Cond) + + +État 120 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 66 Cond: E tDIFF E . + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 66 (Cond) + + +État 121 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 67 Cond: E tLT E . + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 67 (Cond) + + +État 122 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 68 Cond: E tGT E . + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 68 (Cond) + + +État 123 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 70 Cond: E tGTE E . + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 70 (Cond) + + +État 124 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 69 Cond: E tLTE E . + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 69 (Cond) + + +État 125 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 72 Cond: E tOR E . + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 72 (Cond) + + +État 126 + + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + 71 Cond: E tAND E . + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 71 (Cond) + + +État 127 + + 54 If: tIF tPO Cond tPF $@5 . tAO $@6 Instructions $@7 tAF $@8 $@9 Else + + tAO décalage et aller à l'état 134 + + +État 128 + + 64 While: tWHILE tPO $@12 Cond tPF . $@13 tAO $@14 Instructions tAF $@15 + + $défaut réduction par utilisation de la règle 61 ($@13) + + $@13 aller à l'état 135 + + +État 129 + + 76 Invocation: tVAR tPO $@16 Args tPF . + + $défaut réduction par utilisation de la règle 76 (Invocation) + + +État 130 + + 80 SuiteArgs: tVIRGULE . Arg SuiteArgs + + tENTIER décalage et aller à l'état 64 + tSUB décalage et aller à l'état 65 + tMUL décalage et aller à l'état 66 + tPO décalage et aller à l'état 67 + tAPPERSAND décalage et aller à l'état 68 + tVAR décalage et aller à l'état 69 + + E aller à l'état 104 + Invocation aller à l'état 71 + Arg aller à l'état 136 + + +État 131 + + 77 Args: Arg SuiteArgs . + + $défaut réduction par utilisation de la règle 77 (Args) + + +État 132 + + 34 Valeur: tVAR $@4 tAFFECTATION E . + 40 E: E . tADD E + 41 | E . tMUL E + 42 | E . tSUB E + 43 | E . tDIV E + + tADD décalage et aller à l'état 88 + tSUB décalage et aller à l'état 89 + tMUL décalage et aller à l'état 90 + tDIV décalage et aller à l'état 91 + + $défaut réduction par utilisation de la règle 34 (Valeur) + + +État 133 + + 28 SuiteDecl: tVIRGULE Valeur SuiteDecl . + + $défaut réduction par utilisation de la règle 28 (SuiteDecl) + + +État 134 + + 54 If: tIF tPO Cond tPF $@5 tAO . $@6 Instructions $@7 tAF $@8 $@9 Else + + $défaut réduction par utilisation de la règle 50 ($@6) + + $@6 aller à l'état 137 + + +État 135 + + 64 While: tWHILE tPO $@12 Cond tPF $@13 . tAO $@14 Instructions tAF $@15 + + tAO décalage et aller à l'état 138 + + +État 136 + + 80 SuiteArgs: tVIRGULE Arg . SuiteArgs + + tVIRGULE décalage et aller à l'état 130 + + $défaut réduction par utilisation de la règle 81 (SuiteArgs) + + SuiteArgs aller à l'état 139 + + +État 137 + + 54 If: tIF tPO Cond tPF $@5 tAO $@6 . Instructions $@7 tAF $@8 $@9 Else + + tMUL décalage et aller à l'état 32 + tINT décalage et aller à l'état 33 + tPRINT décalage et aller à l'état 34 + tIF décalage et aller à l'état 35 + tWHILE décalage et aller à l'état 36 + tCONST décalage et aller à l'état 37 + tVAR décalage et aller à l'état 38 + + $défaut réduction par utilisation de la règle 20 (Instructions) + + Instructions aller à l'état 140 + Instruction aller à l'état 40 + Decl aller à l'état 41 + Type aller à l'état 42 + Aff aller à l'état 43 + If aller à l'état 44 + While aller à l'état 45 + Invocation aller à l'état 46 + Print aller à l'état 47 + + +État 138 + + 64 While: tWHILE tPO $@12 Cond tPF $@13 tAO . $@14 Instructions tAF $@15 + + $défaut réduction par utilisation de la règle 62 ($@14) + + $@14 aller à l'état 141 + + +État 139 + + 80 SuiteArgs: tVIRGULE Arg SuiteArgs . + + $défaut réduction par utilisation de la règle 80 (SuiteArgs) + + +État 140 + + 54 If: tIF tPO Cond tPF $@5 tAO $@6 Instructions . $@7 tAF $@8 $@9 Else + + $défaut réduction par utilisation de la règle 51 ($@7) + + $@7 aller à l'état 142 + + +État 141 + + 64 While: tWHILE tPO $@12 Cond tPF $@13 tAO $@14 . Instructions tAF $@15 + + tMUL décalage et aller à l'état 32 + tINT décalage et aller à l'état 33 + tPRINT décalage et aller à l'état 34 + tIF décalage et aller à l'état 35 + tWHILE décalage et aller à l'état 36 + tCONST décalage et aller à l'état 37 + tVAR décalage et aller à l'état 38 + + $défaut réduction par utilisation de la règle 20 (Instructions) + + Instructions aller à l'état 143 + Instruction aller à l'état 40 + Decl aller à l'état 41 + Type aller à l'état 42 + Aff aller à l'état 43 + If aller à l'état 44 + While aller à l'état 45 + Invocation aller à l'état 46 + Print aller à l'état 47 + + +État 142 + + 54 If: tIF tPO Cond tPF $@5 tAO $@6 Instructions $@7 . tAF $@8 $@9 Else + + tAF décalage et aller à l'état 144 + + +État 143 + + 64 While: tWHILE tPO $@12 Cond tPF $@13 tAO $@14 Instructions . tAF $@15 + + tAF décalage et aller à l'état 145 + + +État 144 + + 54 If: tIF tPO Cond tPF $@5 tAO $@6 Instructions $@7 tAF . $@8 $@9 Else + + $défaut réduction par utilisation de la règle 52 ($@8) + + $@8 aller à l'état 146 + + +État 145 + + 64 While: tWHILE tPO $@12 Cond tPF $@13 tAO $@14 Instructions tAF . $@15 + + $défaut réduction par utilisation de la règle 63 ($@15) + + $@15 aller à l'état 147 + + +État 146 + + 54 If: tIF tPO Cond tPF $@5 tAO $@6 Instructions $@7 tAF $@8 . $@9 Else + + $défaut réduction par utilisation de la règle 53 ($@9) + + $@9 aller à l'état 148 + + +État 147 + + 64 While: tWHILE tPO $@12 Cond tPF $@13 tAO $@14 Instructions tAF $@15 . + + $défaut réduction par utilisation de la règle 64 (While) + + +État 148 + + 54 If: tIF tPO Cond tPF $@5 tAO $@6 Instructions $@7 tAF $@8 $@9 . Else + + tELSE décalage et aller à l'état 149 + + $défaut réduction par utilisation de la règle 58 (Else) + + Else aller à l'état 150 + + +État 149 + + 57 Else: tELSE . tAO $@10 Instructions tAF $@11 + 59 | tELSE . If + + tAO décalage et aller à l'état 151 + tIF décalage et aller à l'état 35 + + If aller à l'état 152 + + +État 150 + + 54 If: tIF tPO Cond tPF $@5 tAO $@6 Instructions $@7 tAF $@8 $@9 Else . + + $défaut réduction par utilisation de la règle 54 (If) + + +État 151 + + 57 Else: tELSE tAO . $@10 Instructions tAF $@11 + + $défaut réduction par utilisation de la règle 55 ($@10) + + $@10 aller à l'état 153 + + +État 152 + + 59 Else: tELSE If . + + $défaut réduction par utilisation de la règle 59 (Else) + + +État 153 + + 57 Else: tELSE tAO $@10 . Instructions tAF $@11 + + tMUL décalage et aller à l'état 32 + tINT décalage et aller à l'état 33 + tPRINT décalage et aller à l'état 34 + tIF décalage et aller à l'état 35 + tWHILE décalage et aller à l'état 36 + tCONST décalage et aller à l'état 37 + tVAR décalage et aller à l'état 38 + + $défaut réduction par utilisation de la règle 20 (Instructions) + + Instructions aller à l'état 154 + Instruction aller à l'état 40 + Decl aller à l'état 41 + Type aller à l'état 42 + Aff aller à l'état 43 + If aller à l'état 44 + While aller à l'état 45 + Invocation aller à l'état 46 + Print aller à l'état 47 + + +État 154 + + 57 Else: tELSE tAO $@10 Instructions . tAF $@11 + + tAF décalage et aller à l'état 155 + + +État 155 + + 57 Else: tELSE tAO $@10 Instructions tAF . $@11 + + $défaut réduction par utilisation de la règle 56 ($@11) + + $@11 aller à l'état 156 + + +État 156 + + 57 Else: tELSE tAO $@10 Instructions tAF $@11 . + + $défaut réduction par utilisation de la règle 57 (Else) diff --git a/compiler/analyse_syntaxique.y b/compiler/analyse_syntaxique.y index 4660fcb..09c1d7c 100644 --- a/compiler/analyse_syntaxique.y +++ b/compiler/analyse_syntaxique.y @@ -139,20 +139,19 @@ E : E tADD E {generate_instruction_3(&array, ADD, $1, $1, $3); free_temp(&table) E : E tMUL E {generate_instruction_3(&array, MUL, $1, $1, $3); free_temp(&table); $$ = $1;} ; E : E tSUB E {generate_instruction_3(&array, SOU, $1, $1, $3); free_temp(&table); $$ = $1;} ; E : E tDIV E {generate_instruction_3(&array, DIV, $1, $1, $3); free_temp(&table); $$ = $1;} ; -E : tSUB E {printf("Variable negative\n");} ; +E : tSUB E {} ; E : Invocation { //int vt = new_temp(&table); //generate_instruction_2(&array, COP, vt, $1); remove_symboles(&table); table.depth--; $$ = $1;}; -E : tPO E tPF {printf("Parenthèse\n"); $$ = $2; } ; +E : tPO E tPF {$$ = $2; } ; E : tAPPERSAND tVAR {int vt = new_temp(&table); int varAddr = variable_exists(&table, $2); generate_instruction_2(&array, LEA, vt, varAddr); $$ = vt;}; E : tMUL tVAR {int vt = new_temp(&table); int varAddr = variable_exists(&table, $2); generate_instruction_2(&array, COP, vt, varAddr); generate_instruction_2(&array, COP_LD, vt, vt); $$ = vt;}; If : tIF tPO Cond tPF { - //gen_jmpf(&table, &array, $3, -1); generate_instruction_2(&array, JMF, $3, -1); free_temp(&table); $1 = array.index; @@ -162,7 +161,7 @@ tAO {table.depth++;} Instructions {generate_instruction_1(&array, JMP, -1);} tAF int adr_jmp = array.index; update_jmf(&array, $1, adr_jmp); } -Else {printf("updating jump\n"); update_jmp(&array, $8, $13);}; +Else {update_jmp(&array, $8, $13);}; Else : tELSE tAO {table.depth++;} Instructions tAF {remove_symboles(&table); table.depth--;} {$$ = array.index;} ; Else : {$$ = array.index;}; @@ -171,7 +170,6 @@ Else : tELSE If {$$ = array.index;} ; While : tWHILE tPO { $2 = array.index ; } Cond tPF { - //gen_jmpf(&table, &array, $4, -1); generate_instruction_2(&array, JMF, $4, -1); free_temp(&table); $1 = array.index; @@ -179,7 +177,6 @@ While : tWHILE tPO { tAO {table.depth++;} Instructions tAF {remove_symboles(&table); table.depth--;} { int adr_jmp = array.index; update_jmf(&array, $1, adr_jmp); - //gen_jmpf(&table, &array, $1, $2); generate_instruction_1(&array, JMP, $2); }; diff --git a/compiler/code_c b/compiler/code_c index f0dfdca..e6b09ee 100644 --- a/compiler/code_c +++ b/compiler/code_c @@ -1,16 +1,19 @@ -int fonction1(int * a){ - int b = *a; - printf(b); - return 1; - } +int fonction1(int * p){ + int b = *p; + printf(b); + *p = 5; + return 2; +} int main(){ - int l = 21; - int * p = &l; - int c = fonction1(p); - printf(c); - p = &c; - *p = 2; - printf(c); + int a = 7; + int * pointeur = &a; + int c = fonction1(pointeur); + printf(c); + printf(*pointeur); + return 0; +} + + + - return 0; \ No newline at end of file diff --git a/compiler/compiler b/compiler/compiler new file mode 100755 index 0000000..b766d79 Binary files /dev/null and b/compiler/compiler differ diff --git a/compiler/memory_oriented_assembly.txt b/compiler/memory_oriented_assembly.txt index 8a5ed67..27e77b8 100644 --- a/compiler/memory_oriented_assembly.txt +++ b/compiler/memory_oriented_assembly.txt @@ -1,12 +1,14 @@ -JMP 8 +JMP 10 COP 255 0 COP_LD 255 [255] COP 1 255 COP 255 1 PRI 255 -AFC 255 1 +AFC 255 5 +COP_STR [0] 255 +AFC 255 2 RET 255 -AFC 255 21 +AFC 255 7 COP 0 255 LEA 255 0 COP 1 255 @@ -16,11 +18,8 @@ CALL 1 6 COP 2 255 COP 255 2 PRI 255 -LEA 255 2 -COP 1 255 -AFC 255 2 -COP_STR [1] 255 -COP 255 2 +COP 255 1 +COP_LD 255 [255] PRI 255 AFC 255 0 RET 255 diff --git a/cross_assembleur/STD_LOGIC_VECTOR_output b/cross_assembleur/STD_LOGIC_VECTOR_output index 638e5bc..6b76690 100644 --- a/cross_assembleur/STD_LOGIC_VECTOR_output +++ b/cross_assembleur/STD_LOGIC_VECTOR_output @@ -1 +1,5 @@ -(0=>"00000111000000010000001000000000", 1=>"00000111000000100000001100000000", 2=>"00000001000000110000000100000010", 3=>"00001000000000010000001100000000", 4=>"00000111000000010000001000000000", 5=>"00000111000000100000001100000000", 6=>"00000011000000110000000100000010", 7=>"00001000000000010000001100000000", 8=>"00000111000000010000001000000000", 9=>"00001000000000010000000100000000", others => "00000000000000000000000000000000") \ No newline at end of file +(0=>"00000111000000010000001000000000", 1=>"00000111000000100000001100000000", 2=>"00000001000000110000000100000010", 3=>"00001000000000010000001100000000", 4=>"00000111000000010000001000000000", 5=>"00000111000000100000001100000000", 6=>"00000011000000110000000100000010", 7=>"00001000000000010000001100000000", 8=>"00000111000000010000001000000000", 9=>"00001000000000010000000100000000", others => "00000000000000000000000000000000") + + + + diff --git a/cross_assembleur/cross_assembler b/cross_assembleur/cross_assembler new file mode 100755 index 0000000..35feac5 Binary files /dev/null and b/cross_assembleur/cross_assembler differ diff --git a/cross_assembleur/cross_input.txt b/cross_assembleur/cross_input.txt index 22198ad..4011bbb 100644 --- a/cross_assembleur/cross_input.txt +++ b/cross_assembleur/cross_input.txt @@ -1,3 +1,7 @@ ADD 1 2 3 SOU 1 2 3 -COP 1 2 \ No newline at end of file +COP 1 2 + + + + diff --git a/cross_assembleur/cross_output.txt b/cross_assembleur/cross_output.txt index b2c24da..9d8b5e4 100644 --- a/cross_assembleur/cross_output.txt +++ b/cross_assembleur/cross_output.txt @@ -8,3 +8,7 @@ 8 1 3 0 7 1 2 0 8 1 1 0 + + + + diff --git a/interpreter/interpreter b/interpreter/interpreter new file mode 100755 index 0000000..94f2b5c Binary files /dev/null and b/interpreter/interpreter differ diff --git a/interpreter/interpreter_input.txt b/interpreter/interpreter_input.txt index 6fcd492..27e77b8 100644 --- a/interpreter/interpreter_input.txt +++ b/interpreter/interpreter_input.txt @@ -1,26 +1,25 @@ -JMP 8 -COP 49 0 -COP_LD 49 [49] -COP 1 49 -COP 49 1 -PRI 49 -AFC 49 1 -RET 49 -AFC 49 21 -COP 0 49 -LEA 49 0 -COP 1 49 -COP 49 1 -COP 5 49 +JMP 10 +COP 255 0 +COP_LD 255 [255] +COP 1 255 +COP 255 1 +PRI 255 +AFC 255 5 +COP_STR [0] 255 +AFC 255 2 +RET 255 +AFC 255 7 +COP 0 255 +LEA 255 0 +COP 1 255 +COP 255 1 +COP 5 255 CALL 1 6 -COP 2 49 -COP 49 2 -PRI 49 -LEA 49 2 -COP 1 49 -AFC 49 2 -COP_STR [1] 49 -COP 49 2 -PRI 49 -AFC 49 0 -RET 49 \ No newline at end of file +COP 2 255 +COP 255 2 +PRI 255 +COP 255 1 +COP_LD 255 [255] +PRI 255 +AFC 255 0 +RET 255 diff --git a/interpreter/src/instructions.c b/interpreter/src/instructions.c index 734593f..8de5168 100755 --- a/interpreter/src/instructions.c +++ b/interpreter/src/instructions.c @@ -34,7 +34,7 @@ void asm_add_3(char ins, int arg1, int arg2, int arg3) { } // ip are validated at runtime; memory addr are validated here - if (ins == AFC || ins == JMF) { + if (ins == AFC || ins == JPF) { if (!valid_memory_addr(arg1)) { fprintf(stderr, "ERROR readfile : INVALID addr at line %d, please verify that addr is in range 0 to MAX_MEMORY_SIZE\n", current_line); has_error = 1; @@ -120,9 +120,11 @@ int exec(int ip) { case JMP: printf("JMP to %d\n", arg1); next_ip = arg1; break; - case JMF: - printf("JMF cond@%d[%d] to %d\n", arg1, memory[arg1 + EBP], arg2); - if (memory[arg1 + EBP] == 0) next_ip = arg2; + case JPF: + printf("JPF cond@%d[%d] to %d\n", arg1, memory[arg1], arg2); + if (memory[arg1] != 0) { + next_ip = arg2; + } break; case LT: printf("LT @%d = @%d[%d] < @%d[%d] ? 1 : 0\n", arg1, arg2, memory[arg2], arg3, memory[arg3]); @@ -173,10 +175,10 @@ int exec(int ip) { break; case COP_STR: printf("COP_STR @%d = @%d[%d]\n", arg1, arg2, memory[arg2]); - memory[memory[arg1]] = memory[arg2]; + memory[arg1] = memory[arg2]; break; case RET: - printf("RET @%d[%d] \n", arg1, memory[arg1 + EBP]); + printf("RET @%d[%d] \n", arg1, memory[arg1]); if (EBP != 0){ next_ip = memory[EBP - 2]; EBP = memory[EBP - 1]; diff --git a/interpreter/src/instructions.h b/interpreter/src/instructions.h index d87b1b1..54fa3dc 100644 --- a/interpreter/src/instructions.h +++ b/interpreter/src/instructions.h @@ -8,7 +8,7 @@ #define COP 5 #define AFC 6 #define JMP 7 -#define JMF 8 +#define JPF 8 #define LT 9 #define GT 10 #define EQ 11 diff --git a/interpreter/src/interpreter.l b/interpreter/src/interpreter.l index 5b65e79..38e67a0 100755 --- a/interpreter/src/interpreter.l +++ b/interpreter/src/interpreter.l @@ -13,7 +13,7 @@ DIV {return tDIV;} COP {return tCOP;} AFC {return tAFC;} JMP {return tJMP;} -JMF {return tJMF;} +JPF {return tJPF;} LT {return tLT;} LTE {return tLTE;} GT {return tGT;} diff --git a/interpreter/src/interpreter.y b/interpreter/src/interpreter.y index c17e301..323f61d 100755 --- a/interpreter/src/interpreter.y +++ b/interpreter/src/interpreter.y @@ -12,7 +12,7 @@ int nb; } -%token tADD tMUL tSOU tDIV tCOP tAFC tJMP tJMF tPRI tRET tCALL +%token tADD tMUL tSOU tDIV tCOP tAFC tJMP tJPF tPRI tRET tCALL %token tLT tLTE tGT tGTE tEQ tNEQ tAND tOR tNOT %token tLEA tCOP_LD tCOP_STR %token tOB tCB @@ -45,8 +45,8 @@ Instruction: {asm_add_2(AFC, $2, $3);} | tJMP tNB {asm_add_1(JMP, $2);} - | tJMF tNB tNB - {asm_add_2(JMF, $2, $3);} + | tJPF tNB tNB + {asm_add_2(JPF, $2, $3);} | tLT tNB tNB tNB {asm_add_3(LT, $2, $3, $4);} | tGT tNB tNB tNB