From f6d265e641b341b10fbb75c46b5342d5a304eccb Mon Sep 17 00:00:00 2001 From: Foussats Morgane Date: Tue, 6 Apr 2021 18:22:31 +0200 Subject: [PATCH] Expression arithmetique OK+if OK --- a.out | Bin 37568 -> 42056 bytes analyse_syntaxique.output | 551 ++++++++++++++++++++------------------ analyse_syntaxique.tab.c | 390 ++++++++++++++------------- analyse_syntaxique.y | 51 ++-- gen_assembleur.c | 139 ++++++++++ gen_assembleur.h | 35 ++- script.sh | 9 +- table_symboles.c | 11 +- table_symboles.h | 10 +- 9 files changed, 720 insertions(+), 476 deletions(-) diff --git a/a.out b/a.out index 29ee846a20596d0beba6e507b02e403192198184..1475c63f790ecd99462adbb96c1a6acbf7bbece3 100755 GIT binary patch literal 42056 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 V9g0AI>7TquNYMRv^I?gy{{wTgd4vD} literal 37568 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 UNqukWr+rUI(0yO?VTrQ;19@ #include "table_symboles.h" +#include "gen_assembleur.h" enum Initialised_Variable init; enum Symbole_Type type; Table_Symboles table; +instructions_array array; -#line 172 "analyse_syntaxique.tab.c" /* yacc.c:358 */ +#line 174 "analyse_syntaxique.tab.c" /* yacc.c:358 */ #ifdef short # undef short @@ -410,16 +412,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 4 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 133 +#define YYLAST 134 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 35 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 23 +#define YYNNTS 25 /* YYNRULES -- Number of rules. */ -#define YYNRULES 53 +#define YYNRULES 57 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 125 +#define YYNSTATES 127 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ @@ -468,12 +470,12 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 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 + 0, 75, 75, 77, 78, 80, 83, 84, 87, 89, + 90, 92, 93, 94, 95, 96, 97, 99, 101, 102, + 104, 105, 107, 108, 111, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 124, 125, 127, 128, 130, 135, + 130, 141, 142, 143, 145, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 158, 160, 162 }; #endif @@ -489,7 +491,7 @@ static const char *const yytname[] = "tCONST", "tVAR", "tNOT", "$accept", "Main", "Params", "Param", "SuiteParams", "Body", "Instructions", "Instruction", "Decl", "SuiteDecl", "Type", "Valeur", "Aff", "E", "Args", "SuiteArgs", "If", - "Else", "While", "Cond", "Invocation", "Print", "Return", YY_NULLPTR + "$@1", "$@2", "Else", "While", "Cond", "Invocation", "Print", "Return", YY_NULLPTR }; #endif @@ -505,10 +507,10 @@ static const yytype_uint16 yytoknum[] = }; # endif -#define YYPACT_NINF -35 +#define YYPACT_NINF -34 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-35))) + (!!((Yystate) == (-34))) #define YYTABLE_NINF -1 @@ -519,19 +521,19 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int8 yypact[] = { - -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 + -18, -14, 22, 35, -34, 8, 12, 49, 45, -34, + 51, 8, -34, 47, -34, 45, -34, 52, 60, 61, + 53, -8, 55, 47, -34, 42, -34, -34, -34, 68, + -34, 70, 54, 15, 15, -34, 56, 17, 17, 73, + -34, 74, 77, -34, -34, 83, -34, 17, 17, 92, + 15, 46, 90, -34, 94, 96, 102, 91, 101, -34, + 17, 42, 99, 100, 9, 23, -34, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 15, 15, -34, + 105, 84, -34, -34, -34, -34, 50, 77, -34, -34, + -34, 5, 9, 110, -34, 50, 50, 50, 50, 50, + 50, -34, -34, 108, 47, 96, -34, 47, 109, -34, + 111, -34, -34, 95, -4, -34, 47, 113, 112, 15, + -34, 116, 117, 47, 115, 95, -34 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -544,30 +546,30 @@ static const yytype_uint8 yydefact[] = 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, 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 + 0, 54, 0, 32, 0, 37, 0, 0, 0, 8, + 0, 0, 0, 0, 31, 0, 53, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, + 0, 0, 34, 55, 24, 57, 22, 19, 17, 56, + 33, 27, 29, 28, 30, 45, 46, 47, 48, 50, + 49, 52, 51, 0, 10, 37, 18, 10, 0, 36, + 0, 44, 39, 42, 0, 40, 10, 0, 0, 0, + 41, 0, 0, 10, 0, 42, 43 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -35, -35, -35, 118, 117, -35, -22, -35, -35, 40, - -35, 70, -35, -34, -35, 28, -35, 7, -35, -32, - -13, -35, -35 + -34, -34, -34, 118, 119, -34, -21, -34, -34, 33, + -34, 69, -34, -33, -34, 26, -34, -34, -34, 7, + -34, -31, -13, -34, -34 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 2, 7, 8, 12, 14, 22, 23, 24, 62, - 25, 42, 26, 51, 56, 82, 27, 113, 28, 52, - 53, 30, 39 + 25, 42, 26, 51, 56, 82, 27, 103, 113, 115, + 28, 52, 53, 30, 39 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -575,38 +577,38 @@ static const yytype_int8 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint8 yytable[] = { - 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 + 29, 36, 40, 54, 57, 58, 1, 116, 37, 3, + 29, 68, 69, 70, 64, 65, 69, 70, 46, 66, + 46, 47, 4, 47, 48, 117, 48, 86, 67, 68, + 69, 70, 6, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 5, 9, 101, 102, 49, 50, + 49, 67, 68, 69, 70, 67, 68, 69, 70, 10, + 11, 32, 13, 71, 72, 73, 74, 75, 76, 33, + 34, 16, 17, 77, 78, 41, 18, 35, 19, 20, + 21, 38, 43, 108, 44, 59, 110, 45, 121, 55, + 60, 29, 61, 63, 29, 118, 67, 68, 69, 70, + 79, 36, 124, 29, 80, 84, 67, 68, 69, 70, + 29, 81, 83, 88, 89, 85, 104, 105, 70, 107, + 106, 111, 119, 112, 120, 114, 122, 125, 123, 15, + 87, 109, 126, 0, 31 }; -static const yytype_uint8 yycheck[] = +static const yytype_int8 yycheck[] = { - 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 + 13, 9, 23, 34, 37, 38, 24, 11, 16, 23, + 23, 6, 7, 8, 47, 48, 7, 8, 3, 50, + 3, 6, 0, 6, 9, 29, 9, 60, 5, 6, + 7, 8, 24, 10, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 9, 33, 77, 78, 33, 34, + 33, 5, 6, 7, 8, 5, 6, 7, 8, 10, + 15, 9, 11, 17, 18, 19, 20, 21, 22, 9, + 9, 24, 25, 27, 28, 33, 29, 24, 31, 32, + 33, 26, 14, 104, 14, 12, 107, 33, 119, 33, + 16, 104, 15, 10, 107, 116, 5, 6, 7, 8, + 10, 9, 123, 116, 10, 14, 5, 6, 7, 8, + 123, 15, 10, 14, 14, 14, 11, 33, 8, 11, + 87, 12, 9, 12, 12, 30, 10, 12, 11, 11, + 61, 105, 125, -1, 15 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -615,17 +617,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, 51, 53, 55, - 56, 39, 9, 9, 9, 24, 9, 16, 26, 57, + 32, 33, 41, 42, 43, 45, 47, 51, 55, 57, + 58, 39, 9, 9, 9, 24, 9, 16, 26, 59, 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, + 34, 48, 56, 57, 56, 33, 49, 48, 48, 12, + 16, 15, 44, 10, 48, 48, 56, 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 + 48, 56, 56, 52, 11, 33, 44, 11, 41, 50, + 41, 12, 12, 53, 30, 54, 11, 29, 41, 9, + 12, 56, 10, 11, 41, 12, 54 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -634,9 +636,9 @@ 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, 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 + 48, 48, 48, 48, 49, 49, 50, 50, 52, 53, + 51, 54, 54, 54, 55, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 57, 58, 59 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -645,9 +647,9 @@ 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, 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 + 3, 2, 1, 3, 2, 0, 3, 0, 0, 0, + 10, 4, 0, 9, 7, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 1, 4, 5, 3 }; @@ -1324,205 +1326,229 @@ yyreduce: switch (yyn) { case 2: -#line 68 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 75 "analyse_syntaxique.y" /* yacc.c:1646 */ {} -#line 1330 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1332 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 3: -#line 70 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 77 "analyse_syntaxique.y" /* yacc.c:1646 */ {printf("Sans params\n");} -#line 1336 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1338 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 5: -#line 73 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 80 "analyse_syntaxique.y" /* yacc.c:1646 */ {printf("Parametre : %s\n", (yyvsp[0].id));} -#line 1342 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1344 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 8: -#line 80 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 87 "analyse_syntaxique.y" /* yacc.c:1646 */ {printf("Dans body\n");} -#line 1348 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1350 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 20: -#line 97 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 104 "analyse_syntaxique.y" /* yacc.c:1646 */ {type = TYPE_INT;} -#line 1354 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1356 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 21: -#line 98 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 105 "analyse_syntaxique.y" /* yacc.c:1646 */ {type = TYPE_CONST_INT;} -#line 1360 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1362 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 22: -#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 */ +#line 107 "analyse_syntaxique.y" /* yacc.c:1646 */ + {add_symbole_top(&table, (yyvsp[-2].id), type, INITIALISED, table.depth); free_temp(&table);} +#line 1368 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 23: -#line 101 "analyse_syntaxique.y" /* yacc.c:1646 */ +#line 108 "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 */ +#line 1374 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 24: -#line 104 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Affectation : %s\n", (yyvsp[-3].id));} -#line 1378 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 111 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Affectation : %s\n", (yyvsp[-3].id)); free_temp(&table);} +#line 1380 "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 */ +#line 113 "analyse_syntaxique.y" /* yacc.c:1646 */ + {int vt = gen_entier(&table, &array, (yyvsp[0].nombre)); (yyval.nombre) = vt;} +#line 1386 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 26: -#line 107 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("var %s\n", (yyvsp[0].id));} -#line 1390 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 114 "analyse_syntaxique.y" /* yacc.c:1646 */ + {int vt = gen_var(&table, &array, (yyvsp[0].id)); (yyval.nombre) = vt;} +#line 1392 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 27: -#line 108 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Addition\n");} -#line 1396 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 115 "analyse_syntaxique.y" /* yacc.c:1646 */ + {gen_arithmetique(&array, ADD, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);} +#line 1398 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 28: -#line 109 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Multiplication\n");} -#line 1402 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 116 "analyse_syntaxique.y" /* yacc.c:1646 */ + {gen_arithmetique(&array, MUL, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);} +#line 1404 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 29: -#line 110 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Soustraction\n");} -#line 1408 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 117 "analyse_syntaxique.y" /* yacc.c:1646 */ + {gen_arithmetique(&array, SOU, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);} +#line 1410 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 30: -#line 111 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Division\n");} -#line 1414 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 118 "analyse_syntaxique.y" /* yacc.c:1646 */ + {gen_arithmetique(&array, DIV, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);} +#line 1416 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 31: -#line 112 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Soustraction\n");} -#line 1420 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 119 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Variable negative\n");} +#line 1422 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ + break; + + case 32: +#line 120 "analyse_syntaxique.y" /* yacc.c:1646 */ + {(yyval.nombre) = 1234;} +#line 1428 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 33: -#line 114 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Parenthèse\n");} -#line 1426 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 121 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Parenthèse\n"); (yyval.nombre) = (yyvsp[-1].nombre); } +#line 1434 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 38: -#line 123 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Dans if\n");} -#line 1432 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 130 "analyse_syntaxique.y" /* yacc.c:1646 */ + { + gen_jmpf(&table, &array, (yyvsp[-1].nombre)); + (yyvsp[-3].nombre) = array.index; +} +#line 1443 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 39: -#line 125 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("else\n");} -#line 1438 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 135 "analyse_syntaxique.y" /* yacc.c:1646 */ + { + int adr_jmp = array.index; + update_jump(&array, (yyvsp[-7].nombre), adr_jmp); +} +#line 1452 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 40: -#line 126 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("elsif\n");} -#line 1444 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 139 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Dans if\n");} +#line 1458 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 41: -#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 130 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond ==\n");} -#line 1456 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 141 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("else\n");} +#line 1464 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 43: -#line 131 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond !=\n");} -#line 1462 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 143 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("elsif\n");} +#line 1470 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 44: -#line 132 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond <\n");} -#line 1468 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 145 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Dans while\n");} +#line 1476 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 45: -#line 133 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond >\n");} -#line 1474 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 147 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond ==\n");} +#line 1482 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 46: -#line 134 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond <=\n");} -#line 1480 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 148 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond !=\n");} +#line 1488 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 47: -#line 135 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond >=\n");} -#line 1486 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 149 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond <\n");} +#line 1494 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 48: -#line 136 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond &&\n");} -#line 1492 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 150 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond >\n");} +#line 1500 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 49: -#line 137 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond ||\n");} -#line 1498 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 151 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond <=\n");} +#line 1506 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 50: -#line 138 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Cond !\n");} -#line 1504 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 152 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond >=\n");} +#line 1512 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 51: -#line 140 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("Dans invocation\n");} -#line 1510 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 153 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond &&\n");} +#line 1518 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 52: -#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 */ +#line 154 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond ||\n");} +#line 1524 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; case 53: -#line 144 "analyse_syntaxique.y" /* yacc.c:1646 */ - {printf("return\n");} -#line 1522 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 155 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Cond !\n");} +#line 1530 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ + break; + + case 55: +#line 158 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("Dans invocation\n");} +#line 1536 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ + break; + + case 56: +#line 160 "analyse_syntaxique.y" /* yacc.c:1646 */ + {printf("printf de %s\n", (yyvsp[-2].id));} +#line 1542 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ + break; + + case 57: +#line 162 "analyse_syntaxique.y" /* yacc.c:1646 */ + {(yyval.nombre)= gen_return(&table, &array, (yyvsp[-1].nombre));} +#line 1548 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ break; -#line 1526 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ +#line 1552 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -1750,14 +1776,16 @@ yyreturn: #endif return yyresult; } -#line 146 "analyse_syntaxique.y" /* yacc.c:1906 */ +#line 164 "analyse_syntaxique.y" /* yacc.c:1906 */ #include void main(void){ + //TODO: rajouter gestion des erreurs initialise_table(&table); + initialise_asm(&array); yyparse(); print_table(&table); - remove_symboles(&table, 0); - print_table(&table); + //remove_symboles(&table, 0); + //print_table(&table); } diff --git a/analyse_syntaxique.y b/analyse_syntaxique.y index bc35442..ce89f36 100644 --- a/analyse_syntaxique.y +++ b/analyse_syntaxique.y @@ -6,16 +6,23 @@ char id[30]; %{ #include #include "table_symboles.h" +#include "gen_assembleur.h" enum Initialised_Variable init; enum Symbole_Type type; Table_Symboles table; +instructions_array array; %} %token tENTIER %token tENTIEREXP +%type E +%type Return +%type Cond + + %token tADD %token tSUB %token tMUL @@ -43,7 +50,7 @@ Table_Symboles table; %token tRETURN %token tOR %token tAND -%token tIF +%token tIF %token tELSE %token tWHILE %token tCONST @@ -97,21 +104,21 @@ SuiteDecl: ; Type : tINT {type = TYPE_INT;} ; Type : tCONST tINT {type = TYPE_CONST_INT;} ; -Valeur : tVAR tAFFECTATION E {add_symbole_top(&table, $1, type, INITIALISED, table.depth);}; +Valeur : tVAR tAFFECTATION E {add_symbole_top(&table, $1, type, INITIALISED, table.depth); free_temp(&table);}; Valeur : tVAR {add_symbole_top(&table, $1, type, NOT_INITIALISED, table.depth);}; -Aff : tVAR tAFFECTATION E tPV {printf("Affectation : %s\n", $1);}; +Aff : tVAR tAFFECTATION E tPV {printf("Affectation : %s\n", $1); free_temp(&table);}; -E : tENTIER {printf("int %d\n", $1);}; -E : tVAR {printf("var %s\n", $1);}; -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 : tENTIER {int vt = gen_entier(&table, &array, $1); $$ = vt;}; +E : tVAR {int vt = gen_var(&table, &array, $1); $$ = vt;}; +E : E tADD E {gen_arithmetique(&array, ADD, $1, $3); free_temp(&table); $$ = $1;} ; +E : E tMUL E {gen_arithmetique(&array, MUL, $1, $3); free_temp(&table); $$ = $1;} ; +E : E tSUB E {gen_arithmetique(&array, SOU, $1, $3); free_temp(&table); $$ = $1;} ; +E : E tDIV E {gen_arithmetique(&array, DIV, $1, $3); free_temp(&table); $$ = $1;} ; +E : tSUB E {printf("Variable negative\n");} ; +E : Invocation {$$ = 1234;}; +E : tPO E tPF {printf("Parenthèse\n"); $$ = $2; } ; Args : tVAR SuiteArgs ; @@ -120,9 +127,19 @@ Args : ; SuiteArgs : tVIRGULE tVAR SuiteArgs ; SuiteArgs : ; -If : tIF tPO Cond tPF tAO Instructions tAF Else {printf("Dans if\n");}; +If : tIF tPO Cond tPF { + gen_jmpf(&table, &array, $3); + $1 = array.index; +} +tAO Instructions tAF +{ + int adr_jmp = array.index; + update_jump(&array, $1, adr_jmp); +} +Else {printf("Dans if\n");}; Else : tELSE tAO Instructions tAF {printf("else\n");} ; +Else : ; Else : tELSE tIF tPO Cond tPF tAO Instructions tAF Else {printf("elsif\n");} ; While : tWHILE tPO Cond tPF tAO Instructions tAF {printf("Dans while\n");}; @@ -136,21 +153,23 @@ Cond : E tGTE E{printf("Cond >=\n");} ; Cond : E tAND Cond {printf("Cond &&\n");} ; Cond : E tOR Cond {printf("Cond ||\n");} ; Cond : tNOT Cond {printf("Cond !\n");} ; +Cond : E; Invocation : tVAR tPO Args tPF {printf("Dans invocation\n");}; Print : tPRINT tPO tVAR tPF tPV {printf("printf de %s\n", $3);}; -Return : tRETURN E tPV {printf("return\n");}; +Return : tRETURN E tPV {$$= gen_return(&table, &array, $2);}; %% #include void main(void){ //TODO: rajouter gestion des erreurs initialise_table(&table); + initialise_asm(&array); yyparse(); print_table(&table); - remove_symboles(&table, 0); - print_table(&table); + //remove_symboles(&table, 0); + //print_table(&table); } diff --git a/gen_assembleur.c b/gen_assembleur.c index e69de29..fb64c2c 100644 --- a/gen_assembleur.c +++ b/gen_assembleur.c @@ -0,0 +1,139 @@ +#include "gen_assembleur.h" + + +int new_temp(Table_Symboles * table){ + int ret_addr ; + if(add_symbole_bottom(table) == -1) { + return -1; + } + ret_addr = table->indexAvailableBottom +1; + return ret_addr; +} + +void gen_arithmetique(instructions_array * array, enum operation op, int arg1, int arg2){ + instruction instru; + switch(op){ + case ADD: + instru.operation = ADD; + instru.reg1 = arg1; + instru.reg2 = arg1; + instru.reg3 = arg2; + printf("%d ADD %d %d %d\n", array->index, arg1, arg1, arg2); + break; + case DIV: + instru.operation = DIV; + instru.reg1 = arg1; + instru.reg2 = arg1; + instru.reg3 = arg2; + printf("%d DIV %d %d %d\n", array->index, arg1, arg1, arg2); + break; + case SOU: + instru.operation = SOU; + instru.reg1 = arg1; + instru.reg2 = arg1; + instru.reg3 = arg2; + printf("%d SOU %d %d %d\n", array->index, arg1, arg1, arg2); + break; + case MUL: + instru.operation = MUL; + instru.reg1 = arg1; + instru.reg2 = arg1; + instru.reg3 = arg2; + printf("%d MUL %d %d %d\n", array->index, arg1, arg1, arg2); + break; + default: + break; + } + if (array->index < INSTRUCTION_TABLE_SIZE){ + array->array[array->index] = instru; + array->index++; + } + +} + +int gen_var(Table_Symboles * table, instructions_array * array, char * varName){ + int vt = new_temp(table); + int varAddr = variable_exists(table, varName); + + //vérifier que non null + instruction instru; + instru.operation = CPY; + instru.reg1 = vt; + instru.reg2 = varAddr; + + printf("%d CPY %d %d\n", array->index, vt, varAddr); + + if (array->index < INSTRUCTION_TABLE_SIZE){ + array->array[array->index] = instru; + array->index++; + } + + return vt; + +} + +int gen_entier(Table_Symboles * table, instructions_array * array, int entier){ + int vt = new_temp(table); + + //vérifier que non null + instruction instru; + instru.operation = AFC; + instru.reg1 = vt; + instru.reg2 = entier; + + printf("%d AFC %d %d\n", array->index, vt, entier); + + if (array->index < INSTRUCTION_TABLE_SIZE){ + array->array[array->index] = instru; + array->index++; + } + + return vt; +} + +int gen_return(Table_Symboles * table, instructions_array * array, int adr){ + + //vérifier que non null + instruction instru; + instru.operation = RET; + instru.reg1 = adr; + + printf("%d RET %d\n", array->index, adr); + + if (array->index < INSTRUCTION_TABLE_SIZE){ + array->array[array->index] = instru; + array->index++; + } + + free_temp(table); + + return adr; +} + +int gen_jmpf(Table_Symboles * table, instructions_array * array, int cond){ + //vérifier que non null + instruction instru; + instru.operation = JMPF; + instru.reg1 = cond; + instru.reg2 = -1; + + printf("%d JMPF %d %d\n", array->index, cond, -1); + + if (array->index < INSTRUCTION_TABLE_SIZE){ + array->array[array->index] = instru; + array->index++; + } + + free_temp(table); + + return cond; +} + +void update_jump(instructions_array * array, int if_value, int adr_jmp){ + array->array[if_value].reg2 = adr_jmp; + printf("%d JMPF %d %d\n", array->index, array->array[if_value].reg1, array->array[if_value].reg2); +} + +void initialise_asm(instructions_array * array){ + array->index = 0; +} \ No newline at end of file diff --git a/gen_assembleur.h b/gen_assembleur.h index 3b0f268..83b642d 100644 --- a/gen_assembleur.h +++ b/gen_assembleur.h @@ -2,20 +2,39 @@ #define GEN_ASSEMBLEUR_H #define INSTRUCTION_TABLE_SIZE 1000 -#define INSTRUCTION_SIZE 100 + +#include "table_symboles.h" + +enum operation{ADD, SOU, MUL, DIV, CPY, AFC, RET, JMPF}; + +typedef struct instruction{ + enum operation operation; + int reg1; + int reg2; + int reg3; +}instruction; //table des instructions -typedef struct table{ - char* -} - -enum operation{ADD, SUB, MUL, DIV}; +typedef struct instructions_array{ + instruction array[INSTRUCTION_TABLE_SIZE]; + int index; +} instructions_array; -void gen_arithmetique(enum operation op, int arg1, int arg2); +void gen_arithmetique(instructions_array * array, enum operation op, int arg1, int arg2); + +int gen_var(Table_Symboles * table, instructions_array * array, char * varName); + +int gen_entier(Table_Symboles * table, instructions_array * array, int entier); + +int gen_return(Table_Symboles * table, instructions_array * array, int adr); + +int gen_jmpf(Table_Symboles * table, instructions_array * array, int cond); + +void update_jump(instructions_array * array, int if_value, int adr_jmp); //renvoie l'index (ou valeur?) de la premiere @ dispo -int new_temp(); +int new_temp(Table_Symboles * table); #endif \ No newline at end of file diff --git a/script.sh b/script.sh index 7f06ad4..d11fc0a 100755 --- a/script.sh +++ b/script.sh @@ -4,8 +4,11 @@ gcc -w *.c -ly echo " int main(){ const int var1 = 1, var2; - int var2; - int var3, var4 = 1; - return 1; + int var2 = 2 + 3; + int var3, var4 = 4; + if( 4){ + var2 = 6; + } + return 5; } " | ./a.out \ No newline at end of file diff --git a/table_symboles.c b/table_symboles.c index fc31bde..88fb82f 100644 --- a/table_symboles.c +++ b/table_symboles.c @@ -41,17 +41,12 @@ int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type ty return 0; } -int add_symbole_bottom(Table_Symboles * table, char * varName, enum Symbole_Type type, enum Initialised_Variable init){ +int add_symbole_bottom(Table_Symboles * table){ Symbole symbole; - 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) != 0){ - return -2; } else { table->array[table->indexAvailableBottom] = symbole; table->indexAvailableBottom--; @@ -76,6 +71,10 @@ int remove_symboles(Table_Symboles * table, int depth){ return 0; } +void free_temp(Table_Symboles * table){ + table->indexAvailableBottom++; +} + int initialise_symbole(Table_Symboles * table, char * varName){ int index = variable_exists(table, varName); if (index == -1){ diff --git a/table_symboles.h b/table_symboles.h index 1774420..acdc1fc 100644 --- a/table_symboles.h +++ b/table_symboles.h @@ -41,12 +41,11 @@ int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type ty /** * Adds a symbole at the bottom (temp variables) * @param table - * @param varName - * @param type - * @param init * @return 0 if symbole added successfully, -1 if the table is full and -2 if the varaible already exists in the table */ -int add_symbole_bottom(Table_Symboles * table, char * varName, enum Symbole_Type type , enum Initialised_Variable init); +int add_symbole_bottom(Table_Symboles * table); + + /** * Verifies if a varaible name is already present in the table to avoid duplicates @@ -64,6 +63,9 @@ int variable_exists(Table_Symboles * table, char * varName); */ int remove_symboles(Table_Symboles * table, int depth); + +void free_temp(Table_Symboles * table); + /** * Initialises an already exisiting symbole * @param table