Table des symboles ok, start expressions arithm
This commit is contained in:
parent
2b9f6bde69
commit
22d9a82ba6
11 changed files with 980 additions and 892 deletions
|
@ -1,13 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#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;
|
||||
}
|
BIN
a.out
BIN
a.out
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
@ -162,8 +162,13 @@ int yyparse (void);
|
|||
#line 6 "analyse_syntaxique.y" /* yacc.c:358 */
|
||||
|
||||
#include <stdio.h>
|
||||
#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 <stdio.h>
|
||||
void main(void){
|
||||
initialise_table(&table);
|
||||
yyparse();
|
||||
print_table(&table);
|
||||
remove_symboles(&table, 0);
|
||||
print_table(&table);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,11 @@ char id[30];
|
|||
|
||||
%{
|
||||
#include <stdio.h>
|
||||
#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 <stdio.h>
|
||||
void main(void){
|
||||
//TODO: rajouter gestion des erreurs
|
||||
initialise_table(&table);
|
||||
yyparse();
|
||||
print_table(&table);
|
||||
remove_symboles(&table, 0);
|
||||
print_table(&table);
|
||||
}
|
||||
|
||||
|
|
0
gen_assembleur.c
Normal file
0
gen_assembleur.c
Normal file
21
gen_assembleur.h
Normal file
21
gen_assembleur.h
Normal file
|
@ -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
|
18
poubelle/test.c
Normal file
18
poubelle/test.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include <stdio.h>
|
||||
#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;
|
||||
}
|
|
@ -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
|
|
@ -1,7 +1,3 @@
|
|||
//
|
||||
// Created by Nahom Belay on 31/03/2021.
|
||||
//
|
||||
|
||||
#include "table_symboles.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -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
|
Loading…
Reference in a new issue