Analyse grammaticale OK
This commit is contained in:
parent
1214af43d7
commit
6ab787820b
14 changed files with 6928 additions and 1310 deletions
BIN
a.out
Executable file
BIN
a.out
Executable file
Binary file not shown.
|
@ -1,3 +1,14 @@
|
||||||
|
%{
|
||||||
|
#include "analyse_syntaxique.tab.h"
|
||||||
|
int yywrap(void){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ADD "+"
|
ADD "+"
|
||||||
SUB "-"
|
SUB "-"
|
||||||
MUL "*"
|
MUL "*"
|
||||||
|
@ -32,8 +43,9 @@ DIGIT [0-9]
|
||||||
VARIABLE [A-Za-z0-9_]+
|
VARIABLE [A-Za-z0-9_]+
|
||||||
CONST "const"
|
CONST "const"
|
||||||
DECIMAL {DIGIT}+
|
DECIMAL {DIGIT}+
|
||||||
EXPONENTIEL {DIGIT}+"^"{DIGIT}+
|
EXPONENTIEL {DIGIT}+"e"{DIGIT}+
|
||||||
ENTIER {DECIMAL}|{EXPONENTIEL}
|
ENTIER {DECIMAL}
|
||||||
|
ENTIEREXP {EXPONENTIEL}
|
||||||
OPERATION {ADD}|{SUB}|{MUL}|{DIV}
|
OPERATION {ADD}|{SUB}|{MUL}|{DIV}
|
||||||
COMPARATEUR {EGAL}|{LT}|{GT}
|
COMPARATEUR {EGAL}|{LT}|{GT}
|
||||||
SEPARATOR {SPACE}|{TAB}
|
SEPARATOR {SPACE}|{TAB}
|
||||||
|
@ -79,13 +91,12 @@ SEPARATOR {SPACE}|{TAB}
|
||||||
{tWHILE} {return tWHILE ;}
|
{tWHILE} {return tWHILE ;}
|
||||||
|
|
||||||
{CONST} {return tCONST ;}
|
{CONST} {return tCONST ;}
|
||||||
{ENTIER} {return tENTIER ;}
|
{ENTIER} {yylval.nombre = atoi(yytext); return tENTIER ;}
|
||||||
{VARIABLE} {return tVAR ;}
|
{ENTIEREXP} {yylval.nombre = -1; return tENTIEREXP;}
|
||||||
|
{VARIABLE} {strcpy(yylval.id, yytext); return tVAR ;}
|
||||||
|
|
||||||
%%
|
%%
|
||||||
int yywrap(void){
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
//int main(void){
|
//int main(void){
|
||||||
// yylex();
|
// yylex();
|
||||||
//}
|
//}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -99,36 +99,37 @@ extern int yydebug;
|
||||||
enum yytokentype
|
enum yytokentype
|
||||||
{
|
{
|
||||||
tENTIER = 258,
|
tENTIER = 258,
|
||||||
tADD = 259,
|
tENTIEREXP = 259,
|
||||||
tSUB = 260,
|
tADD = 260,
|
||||||
tMUL = 261,
|
tSUB = 261,
|
||||||
tDIV = 262,
|
tMUL = 262,
|
||||||
tPO = 263,
|
tDIV = 263,
|
||||||
tPF = 264,
|
tPO = 264,
|
||||||
tAO = 265,
|
tPF = 265,
|
||||||
tAF = 266,
|
tAO = 266,
|
||||||
tERROR = 267,
|
tAF = 267,
|
||||||
tPV = 268,
|
tERROR = 268,
|
||||||
tVIRGULE = 269,
|
tPV = 269,
|
||||||
tAFFECTATION = 270,
|
tVIRGULE = 270,
|
||||||
tEGAL = 271,
|
tAFFECTATION = 271,
|
||||||
tDIFF = 272,
|
tEGAL = 272,
|
||||||
tLT = 273,
|
tDIFF = 273,
|
||||||
tGT = 274,
|
tLT = 274,
|
||||||
tGTE = 275,
|
tGT = 275,
|
||||||
tLTE = 276,
|
tGTE = 276,
|
||||||
tMAIN = 277,
|
tLTE = 277,
|
||||||
tINT = 278,
|
tMAIN = 278,
|
||||||
tPRINT = 279,
|
tINT = 279,
|
||||||
tRETURN = 280,
|
tPRINT = 280,
|
||||||
tOR = 281,
|
tRETURN = 281,
|
||||||
tAND = 282,
|
tOR = 282,
|
||||||
tIF = 283,
|
tAND = 283,
|
||||||
tELSE = 284,
|
tIF = 284,
|
||||||
tWHILE = 285,
|
tELSE = 285,
|
||||||
tCONST = 286,
|
tWHILE = 286,
|
||||||
tVAR = 287,
|
tCONST = 287,
|
||||||
tNOT = 288
|
tVAR = 288,
|
||||||
|
tNOT = 289
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -140,8 +141,9 @@ union YYSTYPE
|
||||||
#line 1 "analyse_syntaxique.y" /* yacc.c:355 */
|
#line 1 "analyse_syntaxique.y" /* yacc.c:355 */
|
||||||
|
|
||||||
int nombre;
|
int nombre;
|
||||||
|
char id[30];
|
||||||
|
|
||||||
#line 145 "analyse_syntaxique.tab.c" /* yacc.c:355 */
|
#line 147 "analyse_syntaxique.tab.c" /* yacc.c:355 */
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef union YYSTYPE YYSTYPE;
|
typedef union YYSTYPE YYSTYPE;
|
||||||
|
@ -157,8 +159,11 @@ int yyparse (void);
|
||||||
#endif /* !YY_YY_ANALYSE_SYNTAXIQUE_TAB_H_INCLUDED */
|
#endif /* !YY_YY_ANALYSE_SYNTAXIQUE_TAB_H_INCLUDED */
|
||||||
|
|
||||||
/* Copy the second part of user declarations. */
|
/* Copy the second part of user declarations. */
|
||||||
|
#line 6 "analyse_syntaxique.y" /* yacc.c:358 */
|
||||||
|
|
||||||
#line 162 "analyse_syntaxique.tab.c" /* yacc.c:358 */
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#line 167 "analyse_syntaxique.tab.c" /* yacc.c:358 */
|
||||||
|
|
||||||
#ifdef short
|
#ifdef short
|
||||||
# undef short
|
# undef short
|
||||||
|
@ -398,23 +403,23 @@ union yyalloc
|
||||||
#endif /* !YYCOPY_NEEDED */
|
#endif /* !YYCOPY_NEEDED */
|
||||||
|
|
||||||
/* YYFINAL -- State number of the termination state. */
|
/* YYFINAL -- State number of the termination state. */
|
||||||
#define YYFINAL 6
|
#define YYFINAL 4
|
||||||
/* YYLAST -- Last index in YYTABLE. */
|
/* YYLAST -- Last index in YYTABLE. */
|
||||||
#define YYLAST 130
|
#define YYLAST 132
|
||||||
|
|
||||||
/* YYNTOKENS -- Number of terminals. */
|
/* YYNTOKENS -- Number of terminals. */
|
||||||
#define YYNTOKENS 34
|
#define YYNTOKENS 35
|
||||||
/* YYNNTS -- Number of nonterminals. */
|
/* YYNNTS -- Number of nonterminals. */
|
||||||
#define YYNNTS 25
|
#define YYNNTS 24
|
||||||
/* YYNRULES -- Number of rules. */
|
/* YYNRULES -- Number of rules. */
|
||||||
#define YYNRULES 57
|
#define YYNRULES 54
|
||||||
/* YYNSTATES -- Number of states. */
|
/* YYNSTATES -- Number of states. */
|
||||||
#define YYNSTATES 117
|
#define YYNSTATES 125
|
||||||
|
|
||||||
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
|
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
|
||||||
by yylex, with out-of-bounds checking. */
|
by yylex, with out-of-bounds checking. */
|
||||||
#define YYUNDEFTOK 2
|
#define YYUNDEFTOK 2
|
||||||
#define YYMAXUTOK 288
|
#define YYMAXUTOK 289
|
||||||
|
|
||||||
#define YYTRANSLATE(YYX) \
|
#define YYTRANSLATE(YYX) \
|
||||||
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
|
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
|
||||||
|
@ -451,19 +456,19 @@ static const yytype_uint8 yytranslate[] =
|
||||||
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
|
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
|
||||||
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
||||||
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
||||||
25, 26, 27, 28, 29, 30, 31, 32, 33
|
25, 26, 27, 28, 29, 30, 31, 32, 33, 34
|
||||||
};
|
};
|
||||||
|
|
||||||
#if YYDEBUG
|
#if YYDEBUG
|
||||||
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
|
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
|
||||||
static const yytype_uint8 yyrline[] =
|
static const yytype_uint8 yyrline[] =
|
||||||
{
|
{
|
||||||
0, 47, 47, 48, 48, 48, 50, 52, 54, 54,
|
0, 63, 63, 65, 66, 68, 71, 72, 75, 77,
|
||||||
55, 63, 63, 65, 67, 67, 69, 69, 69, 69,
|
78, 80, 81, 82, 83, 84, 85, 87, 89, 90,
|
||||||
69, 69, 69, 71, 73, 73, 75, 75, 77, 77,
|
92, 93, 95, 96, 98, 100, 102, 103, 104, 105,
|
||||||
79, 81, 83, 83, 83, 83, 83, 83, 83, 83,
|
106, 107, 108, 109, 110, 112, 113, 115, 116, 118,
|
||||||
83, 87, 89, 89, 89, 91, 93, 93, 93, 93,
|
120, 121, 123, 125, 126, 127, 128, 129, 130, 131,
|
||||||
93, 93, 93, 93, 93, 95, 97, 99
|
132, 133, 135, 137, 139
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -472,14 +477,14 @@ static const yytype_uint8 yyrline[] =
|
||||||
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
|
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
|
||||||
static const char *const yytname[] =
|
static const char *const yytname[] =
|
||||||
{
|
{
|
||||||
"$end", "error", "$undefined", "tENTIER", "tADD", "tSUB", "tMUL",
|
"$end", "error", "$undefined", "tENTIER", "tENTIEREXP", "tADD", "tSUB",
|
||||||
"tDIV", "tPO", "tPF", "tAO", "tAF", "tERROR", "tPV", "tVIRGULE",
|
"tMUL", "tDIV", "tPO", "tPF", "tAO", "tAF", "tERROR", "tPV", "tVIRGULE",
|
||||||
"tAFFECTATION", "tEGAL", "tDIFF", "tLT", "tGT", "tGTE", "tLTE", "tMAIN",
|
"tAFFECTATION", "tEGAL", "tDIFF", "tLT", "tGT", "tGTE", "tLTE", "tMAIN",
|
||||||
"tINT", "tPRINT", "tRETURN", "tOR", "tAND", "tIF", "tELSE", "tWHILE",
|
"tINT", "tPRINT", "tRETURN", "tOR", "tAND", "tIF", "tELSE", "tWHILE",
|
||||||
"tCONST", "tVAR", "tNOT", "$accept", "C", "Fonctions", "Fonction",
|
"tCONST", "tVAR", "tNOT", "$accept", "Main", "Params", "Param",
|
||||||
"Main", "Params", "Param", "SuiteParams", "Body", "Instructions",
|
"SuiteParams", "Body", "Instructions", "Instruction", "Decl",
|
||||||
"Instruction", "Decl", "SuiteDecl", "Type", "Valeur", "Affbis", "Aff",
|
"SuiteDecl", "Type", "Valeur", "Affbis", "Aff", "E", "Args", "SuiteArgs",
|
||||||
"E", "If", "Else", "While", "Cond", "Print", "Invocation", "Args", YY_NULLPTR
|
"If", "Else", "While", "Cond", "Invocation", "Print", "Return", YY_NULLPTR
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -491,14 +496,14 @@ static const yytype_uint16 yytoknum[] =
|
||||||
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
|
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
|
||||||
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
|
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
|
||||||
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
|
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
|
||||||
285, 286, 287, 288
|
285, 286, 287, 288, 289
|
||||||
};
|
};
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#define YYPACT_NINF -47
|
#define YYPACT_NINF -36
|
||||||
|
|
||||||
#define yypact_value_is_default(Yystate) \
|
#define yypact_value_is_default(Yystate) \
|
||||||
(!!((Yystate) == (-47)))
|
(!!((Yystate) == (-36)))
|
||||||
|
|
||||||
#define YYTABLE_NINF -1
|
#define YYTABLE_NINF -1
|
||||||
|
|
||||||
|
@ -509,18 +514,19 @@ static const yytype_uint16 yytoknum[] =
|
||||||
STATE-NUM. */
|
STATE-NUM. */
|
||||||
static const yytype_int8 yypact[] =
|
static const yytype_int8 yypact[] =
|
||||||
{
|
{
|
||||||
-17, -24, 40, 23, -17, 57, -47, 47, -47, -47,
|
-7, -4, 26, 18, -36, 9, 12, 40, 36, -36,
|
||||||
43, 71, 48, 73, 72, 78, -47, 83, 43, -47,
|
50, 9, -36, 54, -36, 36, -36, 55, 68, 79,
|
||||||
83, 53, -47, 72, -47, -47, 87, -47, 88, 89,
|
39, -2, 63, 54, -36, 60, 80, -36, -36, -36,
|
||||||
75, 37, 90, 53, -47, 67, 91, -47, -47, -47,
|
81, -36, 82, 64, 15, 15, -36, 65, 19, 19,
|
||||||
-47, 92, -47, 68, 11, 11, -47, -47, 15, -47,
|
88, -36, 86, 89, -36, -36, -36, -36, 93, -36,
|
||||||
-47, 93, 95, -47, -47, -47, 94, -47, 15, 15,
|
19, 19, 96, 15, 48, 97, -36, 99, 91, 100,
|
||||||
98, 11, 54, -5, -47, -2, 101, 85, 67, 99,
|
24, 66, -36, 60, 98, 101, 1, 52, -36, 19,
|
||||||
100, 4, 44, 36, 15, 15, 15, 15, 15, 15,
|
19, 19, 19, 19, 19, 19, 19, 19, 19, 15,
|
||||||
15, 15, 15, 15, 83, 11, 11, 83, -47, 95,
|
15, 102, 103, 78, -36, -36, -36, 89, -36, -36,
|
||||||
-47, -47, -47, 49, 4, 85, 85, 85, 85, 85,
|
-36, 5, 1, 108, -36, 24, 24, 24, 24, 24,
|
||||||
85, 85, 85, 82, 36, 36, -47, -47, 29, -47,
|
24, -36, -36, 54, 54, 91, -36, 105, 106, -36,
|
||||||
106, -47, 11, 0, 83, 82, -47
|
90, -36, -6, -36, 54, 110, 109, 15, -36, 112,
|
||||||
|
113, 54, 111, 90, -36
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
|
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
|
||||||
|
@ -528,34 +534,35 @@ static const yytype_int8 yypact[] =
|
||||||
means the default is an error. */
|
means the default is an error. */
|
||||||
static const yytype_uint8 yydefact[] =
|
static const yytype_uint8 yydefact[] =
|
||||||
{
|
{
|
||||||
0, 0, 0, 0, 0, 0, 1, 0, 2, 3,
|
0, 0, 0, 0, 1, 3, 0, 0, 7, 5,
|
||||||
8, 0, 0, 0, 12, 0, 10, 0, 0, 9,
|
0, 0, 4, 10, 2, 7, 20, 0, 0, 0,
|
||||||
0, 15, 6, 12, 7, 26, 0, 19, 0, 0,
|
0, 0, 0, 10, 15, 0, 0, 11, 12, 13,
|
||||||
0, 0, 0, 15, 21, 0, 0, 16, 17, 18,
|
0, 14, 0, 0, 0, 0, 21, 36, 0, 0,
|
||||||
20, 0, 11, 0, 0, 0, 27, 57, 0, 13,
|
0, 9, 22, 19, 23, 25, 16, 6, 0, 26,
|
||||||
14, 28, 25, 29, 31, 22, 0, 32, 0, 0,
|
0, 0, 27, 0, 0, 0, 32, 0, 38, 0,
|
||||||
33, 0, 0, 0, 38, 0, 0, 30, 0, 0,
|
24, 0, 8, 0, 0, 0, 34, 0, 51, 0,
|
||||||
0, 40, 0, 54, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 56, 25,
|
0, 0, 0, 0, 35, 52, 54, 19, 17, 53,
|
||||||
23, 55, 39, 34, 36, 35, 37, 48, 49, 50,
|
33, 28, 30, 29, 31, 43, 44, 45, 46, 48,
|
||||||
51, 53, 52, 42, 47, 46, 45, 24, 0, 41,
|
47, 50, 49, 10, 10, 38, 18, 0, 0, 37,
|
||||||
0, 43, 0, 0, 0, 42, 44
|
0, 42, 0, 39, 10, 0, 0, 0, 40, 0,
|
||||||
|
0, 10, 0, 0, 41
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYPGOTO[NTERM-NUM]. */
|
/* YYPGOTO[NTERM-NUM]. */
|
||||||
static const yytype_int8 yypgoto[] =
|
static const yytype_int8 yypgoto[] =
|
||||||
{
|
{
|
||||||
-47, -47, 103, -47, -47, -47, 84, 96, -20, 97,
|
-36, -36, -36, 114, 115, -36, -22, -36, -36, 41,
|
||||||
-47, -47, 26, -47, 50, -30, -47, -46, -47, 1,
|
-36, 69, -19, -36, -35, -36, 21, -36, 4, -36,
|
||||||
-47, -44, -47, -18, -47
|
-33, -13, -36, -36
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYDEFGOTO[NTERM-NUM]. */
|
/* YYDEFGOTO[NTERM-NUM]. */
|
||||||
static const yytype_int8 yydefgoto[] =
|
static const yytype_int8 yydefgoto[] =
|
||||||
{
|
{
|
||||||
-1, 2, 3, 4, 8, 13, 14, 19, 22, 32,
|
-1, 2, 7, 8, 12, 14, 22, 23, 24, 64,
|
||||||
33, 34, 69, 35, 52, 36, 37, 62, 38, 109,
|
25, 43, 26, 27, 54, 59, 84, 28, 113, 29,
|
||||||
39, 63, 40, 64, 66
|
55, 56, 31, 40
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
|
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
|
||||||
|
@ -563,78 +570,79 @@ static const yytype_int8 yydefgoto[] =
|
||||||
number is the opposite. If YYTABLE_NINF, syntax error. */
|
number is the opposite. If YYTABLE_NINF, syntax error. */
|
||||||
static const yytype_uint8 yytable[] =
|
static const yytype_uint8 yytable[] =
|
||||||
{
|
{
|
||||||
24, 65, 67, 41, 84, 53, 1, 87, 5, 114,
|
30, 41, 57, 60, 61, 114, 44, 37, 71, 72,
|
||||||
76, 77, 71, 72, 57, 41, 58, 73, 57, 59,
|
30, 70, 71, 72, 38, 66, 67, 1, 49, 3,
|
||||||
58, 85, 86, 59, 85, 86, 85, 86, 93, 94,
|
68, 50, 49, 115, 51, 50, 4, 5, 51, 69,
|
||||||
95, 96, 97, 98, 99, 100, 101, 102, 53, 21,
|
70, 71, 72, 6, 91, 92, 93, 94, 95, 96,
|
||||||
6, 104, 105, 60, 61, 47, 7, 60, 74, 75,
|
97, 98, 99, 100, 44, 9, 101, 102, 52, 53,
|
||||||
76, 77, 48, 92, 75, 76, 77, 110, 74, 75,
|
10, 11, 52, 69, 70, 71, 72, 69, 70, 71,
|
||||||
76, 77, 85, 86, 103, 10, 12, 106, 113, 11,
|
72, 13, 90, 36, 33, 73, 74, 75, 76, 77,
|
||||||
78, 79, 80, 81, 82, 83, 25, 26, 27, 15,
|
78, 69, 70, 71, 72, 79, 80, 34, 16, 17,
|
||||||
16, 28, 17, 29, 30, 31, 18, 20, 111, 74,
|
86, 107, 108, 18, 119, 19, 20, 21, 35, 39,
|
||||||
75, 76, 77, 21, 115, 43, 44, 45, 46, 51,
|
30, 30, 116, 42, 45, 46, 47, 48, 58, 122,
|
||||||
56, 49, 23, 70, 54, 55, 47, 9, 48, 68,
|
62, 30, 38, 65, 63, 37, 83, 81, 30, 82,
|
||||||
88, 108, 90, 91, 112, 107, 116, 0, 89, 42,
|
85, 105, 88, 103, 104, 89, 72, 110, 111, 117,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
112, 118, 120, 123, 121, 15, 109, 124, 106, 0,
|
||||||
50
|
32, 0, 87
|
||||||
};
|
};
|
||||||
|
|
||||||
static const yytype_int8 yycheck[] =
|
static const yytype_int8 yycheck[] =
|
||||||
{
|
{
|
||||||
20, 45, 48, 21, 9, 35, 23, 9, 32, 9,
|
13, 23, 35, 38, 39, 11, 25, 9, 7, 8,
|
||||||
6, 7, 58, 59, 3, 33, 5, 61, 3, 8,
|
23, 6, 7, 8, 16, 50, 51, 24, 3, 23,
|
||||||
5, 26, 27, 8, 26, 27, 26, 27, 74, 75,
|
53, 6, 3, 29, 9, 6, 0, 9, 9, 5,
|
||||||
76, 77, 78, 79, 80, 81, 82, 83, 68, 10,
|
6, 7, 8, 24, 69, 70, 71, 72, 73, 74,
|
||||||
0, 85, 86, 32, 33, 8, 23, 32, 4, 5,
|
75, 76, 77, 78, 63, 33, 79, 80, 33, 34,
|
||||||
6, 7, 15, 9, 5, 6, 7, 28, 4, 5,
|
10, 15, 33, 5, 6, 7, 8, 5, 6, 7,
|
||||||
6, 7, 26, 27, 84, 8, 23, 87, 112, 22,
|
8, 11, 10, 24, 9, 17, 18, 19, 20, 21,
|
||||||
16, 17, 18, 19, 20, 21, 23, 24, 25, 8,
|
22, 5, 6, 7, 8, 27, 28, 9, 24, 25,
|
||||||
32, 28, 9, 30, 31, 32, 14, 9, 108, 4,
|
14, 103, 104, 29, 117, 31, 32, 33, 9, 26,
|
||||||
5, 6, 7, 10, 114, 8, 8, 8, 23, 32,
|
103, 104, 114, 33, 14, 14, 14, 33, 33, 121,
|
||||||
32, 11, 18, 9, 13, 13, 8, 4, 15, 14,
|
12, 114, 16, 10, 15, 9, 15, 10, 121, 10,
|
||||||
9, 29, 13, 13, 8, 89, 115, -1, 68, 23,
|
10, 33, 14, 11, 11, 14, 8, 12, 12, 9,
|
||||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
30, 12, 10, 12, 11, 11, 105, 123, 87, -1,
|
||||||
33
|
15, -1, 63
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
|
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
|
||||||
symbol of state STATE-NUM. */
|
symbol of state STATE-NUM. */
|
||||||
static const yytype_uint8 yystos[] =
|
static const yytype_uint8 yystos[] =
|
||||||
{
|
{
|
||||||
0, 23, 35, 36, 37, 32, 0, 23, 38, 36,
|
0, 24, 36, 23, 0, 9, 24, 37, 38, 33,
|
||||||
8, 22, 23, 39, 40, 8, 32, 9, 14, 41,
|
10, 15, 39, 11, 40, 38, 24, 25, 29, 31,
|
||||||
9, 10, 42, 40, 42, 23, 24, 25, 28, 30,
|
32, 33, 41, 42, 43, 45, 47, 48, 52, 54,
|
||||||
31, 32, 43, 44, 45, 47, 49, 50, 52, 54,
|
56, 57, 39, 9, 9, 9, 24, 9, 16, 26,
|
||||||
56, 57, 41, 8, 8, 8, 23, 8, 15, 11,
|
58, 41, 33, 46, 47, 14, 14, 14, 33, 3,
|
||||||
43, 32, 48, 49, 13, 13, 32, 3, 5, 8,
|
6, 9, 33, 34, 49, 55, 56, 55, 33, 50,
|
||||||
32, 33, 51, 55, 57, 55, 58, 51, 14, 46,
|
49, 49, 12, 15, 44, 10, 49, 49, 55, 5,
|
||||||
9, 51, 51, 55, 4, 5, 6, 7, 16, 17,
|
6, 7, 8, 17, 18, 19, 20, 21, 22, 27,
|
||||||
18, 19, 20, 21, 9, 26, 27, 9, 9, 48,
|
28, 10, 10, 15, 51, 10, 14, 46, 14, 14,
|
||||||
13, 13, 9, 51, 51, 51, 51, 51, 51, 51,
|
10, 49, 49, 49, 49, 49, 49, 49, 49, 49,
|
||||||
51, 51, 51, 42, 55, 55, 42, 46, 29, 53,
|
49, 55, 55, 11, 11, 33, 44, 41, 41, 51,
|
||||||
28, 42, 8, 55, 9, 42, 53
|
12, 12, 30, 53, 11, 29, 41, 9, 12, 55,
|
||||||
|
10, 11, 41, 12, 53
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
|
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
|
||||||
static const yytype_uint8 yyr1[] =
|
static const yytype_uint8 yyr1[] =
|
||||||
{
|
{
|
||||||
0, 34, 35, 36, 36, 36, 37, 38, 39, 39,
|
0, 35, 36, 37, 37, 38, 39, 39, 40, 41,
|
||||||
40, 41, 41, 42, 43, 43, 44, 44, 44, 44,
|
41, 42, 42, 42, 42, 42, 42, 43, 44, 44,
|
||||||
44, 44, 44, 45, 46, 46, 47, 47, 48, 48,
|
45, 45, 46, 46, 47, 48, 49, 49, 49, 49,
|
||||||
49, 50, 51, 51, 51, 51, 51, 51, 51, 51,
|
49, 49, 49, 49, 49, 50, 50, 51, 51, 52,
|
||||||
51, 52, 53, 53, 53, 54, 55, 55, 55, 55,
|
53, 53, 54, 55, 55, 55, 55, 55, 55, 55,
|
||||||
55, 55, 55, 55, 55, 56, 57, 58
|
55, 55, 56, 57, 58
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
|
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
|
||||||
static const yytype_uint8 yyr2[] =
|
static const yytype_uint8 yyr2[] =
|
||||||
{
|
{
|
||||||
0, 2, 2, 2, 1, 0, 6, 5, 0, 2,
|
0, 2, 6, 0, 2, 2, 4, 0, 4, 2,
|
||||||
2, 3, 0, 3, 2, 0, 1, 1, 1, 1,
|
0, 1, 1, 1, 1, 1, 2, 4, 3, 0,
|
||||||
1, 1, 2, 4, 3, 0, 1, 2, 1, 1,
|
1, 2, 1, 1, 3, 2, 1, 1, 3, 3,
|
||||||
3, 2, 1, 1, 3, 3, 3, 3, 1, 3,
|
3, 3, 1, 3, 2, 2, 0, 3, 0, 8,
|
||||||
2, 6, 0, 2, 7, 5, 3, 3, 3, 3,
|
4, 9, 7, 3, 3, 3, 3, 3, 3, 3,
|
||||||
3, 3, 3, 3, 2, 5, 4, 0
|
3, 2, 4, 5, 3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1310,8 +1318,206 @@ yyreduce:
|
||||||
YY_REDUCE_PRINT (yyn);
|
YY_REDUCE_PRINT (yyn);
|
||||||
switch (yyn)
|
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 */
|
||||||
|
break;
|
||||||
|
|
||||||
#line 1315 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
|
case 3:
|
||||||
|
#line 65 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("Sans params\n");}
|
||||||
|
#line 1331 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
#line 68 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("Parametre : %s\n", (yyvsp[0].id));}
|
||||||
|
#line 1337 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
#line 75 "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 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 20:
|
||||||
|
#line 92 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("int\n");}
|
||||||
|
#line 1355 "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 */
|
||||||
|
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 */
|
||||||
|
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 */
|
||||||
|
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 */
|
||||||
|
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 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 28:
|
||||||
|
#line 104 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("Addition\n");}
|
||||||
|
#line 1391 "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 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 30:
|
||||||
|
#line 106 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("Soustraction\n");}
|
||||||
|
#line 1403 "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 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 33:
|
||||||
|
#line 109 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("Parenthèse\n");}
|
||||||
|
#line 1415 "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 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 39:
|
||||||
|
#line 118 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("Dans if\n");}
|
||||||
|
#line 1427 "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 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 41:
|
||||||
|
#line 121 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("elsif\n");}
|
||||||
|
#line 1439 "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 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 43:
|
||||||
|
#line 125 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("Cond ==\n");}
|
||||||
|
#line 1451 "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 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 45:
|
||||||
|
#line 127 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("Cond <\n");}
|
||||||
|
#line 1463 "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 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 47:
|
||||||
|
#line 129 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("Cond <=\n");}
|
||||||
|
#line 1475 "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 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 49:
|
||||||
|
#line 131 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("Cond &&\n");}
|
||||||
|
#line 1487 "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 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 51:
|
||||||
|
#line 133 "analyse_syntaxique.y" /* yacc.c:1646 */
|
||||||
|
{printf("Cond !\n");}
|
||||||
|
#line 1499 "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 */
|
||||||
|
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 */
|
||||||
|
{printf("return\n");}
|
||||||
|
#line 1517 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
#line 1521 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
/* User semantic actions sometimes alter yychar, and that requires
|
/* User semantic actions sometimes alter yychar, and that requires
|
||||||
|
@ -1539,5 +1745,10 @@ yyreturn:
|
||||||
#endif
|
#endif
|
||||||
return yyresult;
|
return yyresult;
|
||||||
}
|
}
|
||||||
#line 107 "analyse_syntaxique.y" /* yacc.c:1906 */
|
#line 141 "analyse_syntaxique.y" /* yacc.c:1906 */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
void main(void){
|
||||||
|
yyparse();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,36 +46,37 @@ extern int yydebug;
|
||||||
enum yytokentype
|
enum yytokentype
|
||||||
{
|
{
|
||||||
tENTIER = 258,
|
tENTIER = 258,
|
||||||
tADD = 259,
|
tENTIEREXP = 259,
|
||||||
tSUB = 260,
|
tADD = 260,
|
||||||
tMUL = 261,
|
tSUB = 261,
|
||||||
tDIV = 262,
|
tMUL = 262,
|
||||||
tPO = 263,
|
tDIV = 263,
|
||||||
tPF = 264,
|
tPO = 264,
|
||||||
tAO = 265,
|
tPF = 265,
|
||||||
tAF = 266,
|
tAO = 266,
|
||||||
tERROR = 267,
|
tAF = 267,
|
||||||
tPV = 268,
|
tERROR = 268,
|
||||||
tVIRGULE = 269,
|
tPV = 269,
|
||||||
tAFFECTATION = 270,
|
tVIRGULE = 270,
|
||||||
tEGAL = 271,
|
tAFFECTATION = 271,
|
||||||
tDIFF = 272,
|
tEGAL = 272,
|
||||||
tLT = 273,
|
tDIFF = 273,
|
||||||
tGT = 274,
|
tLT = 274,
|
||||||
tGTE = 275,
|
tGT = 275,
|
||||||
tLTE = 276,
|
tGTE = 276,
|
||||||
tMAIN = 277,
|
tLTE = 277,
|
||||||
tINT = 278,
|
tMAIN = 278,
|
||||||
tPRINT = 279,
|
tINT = 279,
|
||||||
tRETURN = 280,
|
tPRINT = 280,
|
||||||
tOR = 281,
|
tRETURN = 281,
|
||||||
tAND = 282,
|
tOR = 282,
|
||||||
tIF = 283,
|
tAND = 283,
|
||||||
tELSE = 284,
|
tIF = 284,
|
||||||
tWHILE = 285,
|
tELSE = 285,
|
||||||
tCONST = 286,
|
tWHILE = 286,
|
||||||
tVAR = 287,
|
tCONST = 287,
|
||||||
tNOT = 288
|
tVAR = 288,
|
||||||
|
tNOT = 289
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -87,8 +88,9 @@ union YYSTYPE
|
||||||
#line 1 "analyse_syntaxique.y" /* yacc.c:1909 */
|
#line 1 "analyse_syntaxique.y" /* yacc.c:1909 */
|
||||||
|
|
||||||
int nombre;
|
int nombre;
|
||||||
|
char id[30];
|
||||||
|
|
||||||
#line 92 "analyse_syntaxique.tab.h" /* yacc.c:1909 */
|
#line 94 "analyse_syntaxique.tab.h" /* yacc.c:1909 */
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef union YYSTYPE YYSTYPE;
|
typedef union YYSTYPE YYSTYPE;
|
||||||
|
|
|
@ -1,8 +1,16 @@
|
||||||
%union {
|
%union {
|
||||||
int nombre;
|
int nombre;
|
||||||
|
char id[30];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%{
|
||||||
|
#include <stdio.h>
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
||||||
%token<nombre> tENTIER
|
%token<nombre> tENTIER
|
||||||
|
%token<nombre> tENTIEREXP
|
||||||
|
|
||||||
%token tADD
|
%token tADD
|
||||||
%token tSUB
|
%token tSUB
|
||||||
%token tMUL
|
%token tMUL
|
||||||
|
@ -34,74 +42,105 @@ int nombre;
|
||||||
%token tELSE
|
%token tELSE
|
||||||
%token tWHILE
|
%token tWHILE
|
||||||
%token tCONST
|
%token tCONST
|
||||||
%token tVAR
|
%token<id> tVAR
|
||||||
%token tNOT
|
%token tNOT
|
||||||
|
|
||||||
%left tADD
|
%left tADD
|
||||||
%left tSUB
|
%left tSUB
|
||||||
|
%left tMUL
|
||||||
|
%left tDIV
|
||||||
%right tEGAL
|
%right tEGAL
|
||||||
|
|
||||||
%type<nombre> E
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
C : Fonctions Main ;
|
//C : Fonctions Main ;
|
||||||
Fonctions : Fonction Fonctions | Fonction | ;
|
|
||||||
|
|
||||||
Fonction : tINT tVAR tPO Params tPF Body ;
|
//Fonctions : Fonction Fonctions | ;
|
||||||
|
//Fonction : tINT tVAR tPO Params tPF Body;
|
||||||
Main : tINT tMAIN tPO tPF Body ;
|
|
||||||
|
|
||||||
Params : | Param SuiteParams ;
|
|
||||||
Param : tINT tVAR ;
|
|
||||||
|
|
||||||
|
|
||||||
// Ps : P Ps | ;
|
Main : tINT tMAIN tPO Params tPF Body {printf("Dans main\n");};
|
||||||
// P : tINT tID ttVIRGULE
|
|
||||||
// Ps =>* tINT tID ttVIRGULE tINT tID ttVIRGULE
|
|
||||||
// Ps => P Ps => P P Ps ...
|
|
||||||
|
|
||||||
SuiteParams : tVIRGULE Param SuiteParams | ;
|
Params : {printf("Sans params\n");} ;
|
||||||
|
Params : Param SuiteParams ;
|
||||||
|
|
||||||
Body : tAO Instructions tAF ;
|
Param : tINT tVAR {printf("Parametre : %s\n", $2);} ;
|
||||||
|
|
||||||
Instructions : Instruction Instructions | ;
|
|
||||||
|
|
||||||
Instruction : Aff | If | While | tRETURN | Print | Decl | Invocation tPV ;
|
SuiteParams : tVIRGULE Param SuiteParams tPV ;
|
||||||
|
SuiteParams : ;
|
||||||
|
|
||||||
Decl : Type Valeur SuiteDecl tPV;
|
|
||||||
|
|
||||||
SuiteDecl: tVIRGULE Valeur SuiteDecl | ;
|
Body : tAO Instructions Return tAF {printf("Dans body\n");} ;
|
||||||
|
|
||||||
Type : tINT | tCONST tINT ;
|
Instructions : Instruction Instructions ;
|
||||||
|
Instructions : ;
|
||||||
|
|
||||||
Valeur : tVAR | Affbis ;
|
Instruction : Aff ;
|
||||||
|
Instruction : If ;
|
||||||
|
Instruction : While ;
|
||||||
|
Instruction : Print ;
|
||||||
|
Instruction : Decl ;
|
||||||
|
Instruction : Invocation tPV ;
|
||||||
|
|
||||||
Affbis : tVAR tAFFECTATION E;
|
Decl : Type Valeur SuiteDecl tPV {printf("Declaration\n");} ;
|
||||||
|
|
||||||
|
SuiteDecl: tVIRGULE Valeur SuiteDecl ;
|
||||||
|
SuiteDecl: ;
|
||||||
|
|
||||||
|
Type : tINT {printf("int\n");} ;
|
||||||
|
Type : tCONST tINT {printf("const int\n");} ;
|
||||||
|
|
||||||
|
Valeur : tVAR {printf("Declaration %s\n", $1);};
|
||||||
|
Valeur : Affbis ;
|
||||||
|
|
||||||
|
Affbis : tVAR tAFFECTATION E {printf("Affectation : %s\n", $1);};
|
||||||
|
|
||||||
Aff : Affbis tPV ;
|
Aff : Affbis tPV ;
|
||||||
|
|
||||||
E : tENTIER | tVAR | E tADD E | E tMUL E | E tSUB E | E tDIV E | Invocation | tPO E tPF | tSUB E ;
|
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 : Invocation ;
|
||||||
|
E : tPO E tPF {printf("Parenthèse\n");} ;
|
||||||
|
E : tSUB E {printf("Soustraction\n");} ;
|
||||||
|
|
||||||
// E : tID tPlus tID | ...
|
Args : tVAR SuiteArgs ;
|
||||||
|
Args : ;
|
||||||
|
|
||||||
If : tIF tPO Cond tPF Body Else;
|
SuiteArgs : tVIRGULE tVAR SuiteArgs ;
|
||||||
|
SuiteArgs : ;
|
||||||
|
|
||||||
Else : | tELSE Body |tELSE tIF tPO Cond tPF Body Else;
|
If : tIF tPO Cond tPF tAO Instructions tAF Else {printf("Dans if\n");};
|
||||||
|
|
||||||
While : tWHILE tPO Cond tPF Body ;
|
Else : tELSE tAO Instructions tAF {printf("else\n");} ;
|
||||||
|
Else : tELSE tIF tPO Cond tPF tAO Instructions tAF Else {printf("elsif\n");} ;
|
||||||
|
|
||||||
Cond : Cond tAND Cond | Cond tOR Cond | E tEGAL E | E tDIFF E | E tLT E | E tGT E | E tLTE E | E tGTE E| tNOT Cond ;
|
While : tWHILE tPO Cond tPF tAO Instructions tAF {printf("Dans while\n");};
|
||||||
|
|
||||||
Print : tPRINT tPO tVAR tPF tPV ;
|
Cond : E tEGAL E {printf("Cond ==\n");} ;
|
||||||
|
Cond : E tDIFF E {printf("Cond !=\n");} ;
|
||||||
|
Cond : E tLT E {printf("Cond <\n");} ;
|
||||||
|
Cond : E tGT E {printf("Cond >\n");} ;
|
||||||
|
Cond : E tLTE E {printf("Cond <=\n");} ;
|
||||||
|
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");} ;
|
||||||
|
|
||||||
Invocation : tVAR tPO Args tPF ;
|
Invocation : tVAR tPO Args tPF {printf("Dans invocation\n");};
|
||||||
|
|
||||||
Args : | Arg SuiteArgs ;
|
Print : tPRINT tPO tVAR tPF tPV {printf("printf de %s\n", $3);};
|
||||||
|
|
||||||
Arg : tVAR ;
|
Return : tRETURN E tPV {printf("return\n");};
|
||||||
|
|
||||||
SuiteArgs : tVIRGULE Arg SuiteArgs ;
|
|
||||||
|
|
||||||
RETURN : tRETURN E tPV ;
|
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
#include <stdio.h>
|
||||||
|
void main(void){
|
||||||
|
yyparse();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
192
lex.yy.c
192
lex.yy.c
|
@ -351,8 +351,8 @@ static void yynoreturn yy_fatal_error ( const char* msg );
|
||||||
(yy_hold_char) = *yy_cp; \
|
(yy_hold_char) = *yy_cp; \
|
||||||
*yy_cp = '\0'; \
|
*yy_cp = '\0'; \
|
||||||
(yy_c_buf_p) = yy_cp;
|
(yy_c_buf_p) = yy_cp;
|
||||||
#define YY_NUM_RULES 33
|
#define YY_NUM_RULES 34
|
||||||
#define YY_END_OF_BUFFER 34
|
#define YY_END_OF_BUFFER 35
|
||||||
/* This struct is not used in this scanner,
|
/* This struct is not used in this scanner,
|
||||||
but its presence is necessary. */
|
but its presence is necessary. */
|
||||||
struct yy_trans_info
|
struct yy_trans_info
|
||||||
|
@ -362,13 +362,13 @@ struct yy_trans_info
|
||||||
};
|
};
|
||||||
static const flex_int16_t yy_accept[70] =
|
static const flex_int16_t yy_accept[70] =
|
||||||
{ 0,
|
{ 0,
|
||||||
0, 0, 34, 33, 10, 11, 20, 33, 5, 6,
|
0, 0, 35, 34, 10, 11, 20, 34, 5, 6,
|
||||||
3, 1, 12, 2, 4, 31, 9, 16, 13, 17,
|
3, 1, 12, 2, 4, 31, 9, 16, 13, 17,
|
||||||
32, 32, 32, 32, 32, 32, 32, 32, 7, 33,
|
33, 33, 33, 33, 33, 33, 33, 33, 7, 34,
|
||||||
8, 15, 26, 31, 32, 0, 18, 14, 19, 32,
|
8, 15, 26, 31, 33, 33, 18, 14, 19, 33,
|
||||||
32, 27, 32, 32, 32, 32, 32, 25, 31, 32,
|
33, 27, 33, 33, 33, 33, 33, 25, 32, 33,
|
||||||
32, 22, 32, 32, 32, 32, 32, 28, 21, 32,
|
33, 22, 33, 33, 33, 33, 33, 28, 21, 33,
|
||||||
32, 32, 30, 32, 32, 29, 23, 24, 0
|
33, 33, 30, 33, 33, 29, 23, 24, 0
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static const YY_CHAR yy_ec[256] =
|
static const YY_CHAR yy_ec[256] =
|
||||||
|
@ -382,11 +382,11 @@ static const YY_CHAR yy_ec[256] =
|
||||||
17, 18, 1, 1, 19, 19, 19, 19, 19, 19,
|
17, 18, 1, 1, 19, 19, 19, 19, 19, 19,
|
||||||
19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
|
19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
|
||||||
19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
|
19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
|
||||||
1, 1, 1, 20, 19, 1, 21, 19, 22, 19,
|
1, 1, 1, 1, 19, 1, 20, 19, 21, 19,
|
||||||
|
|
||||||
23, 24, 19, 25, 26, 19, 19, 27, 28, 29,
|
22, 23, 19, 24, 25, 19, 19, 26, 27, 28,
|
||||||
30, 31, 19, 32, 33, 34, 35, 19, 36, 19,
|
29, 30, 19, 31, 32, 33, 34, 19, 35, 19,
|
||||||
19, 19, 37, 38, 39, 1, 1, 1, 1, 1,
|
19, 19, 36, 37, 38, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
|
@ -403,23 +403,23 @@ static const YY_CHAR yy_ec[256] =
|
||||||
1, 1, 1, 1, 1
|
1, 1, 1, 1, 1
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static const YY_CHAR yy_meta[40] =
|
static const YY_CHAR yy_meta[39] =
|
||||||
{ 0,
|
{ 0,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 2, 1, 1, 1, 1, 2, 2,
|
1, 1, 1, 2, 1, 1, 1, 1, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 1, 1, 1
|
2, 2, 2, 2, 2, 1, 1, 1
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static const flex_int16_t yy_base[71] =
|
static const flex_int16_t yy_base[71] =
|
||||||
{ 0,
|
{ 0,
|
||||||
0, 0, 116, 117, 117, 117, 98, 108, 117, 117,
|
0, 0, 79, 80, 80, 80, 61, 71, 80, 80,
|
||||||
117, 117, 117, 117, 117, 26, 117, 96, 95, 94,
|
80, 80, 80, 80, 80, 25, 80, 59, 58, 57,
|
||||||
90, 21, 22, 23, 24, 28, 30, 34, 117, 71,
|
0, 44, 46, 17, 51, 39, 47, 44, 80, 30,
|
||||||
117, 117, 117, 41, 88, 93, 117, 117, 117, 36,
|
80, 80, 80, 27, 0, 52, 80, 80, 80, 37,
|
||||||
37, 86, 38, 42, 43, 44, 47, 117, 91, 46,
|
32, 0, 30, 37, 36, 27, 34, 80, 44, 25,
|
||||||
51, 84, 55, 56, 57, 60, 61, 83, 82, 62,
|
34, 0, 27, 26, 19, 26, 18, 0, 0, 17,
|
||||||
66, 68, 81, 69, 70, 80, 77, 74, 117, 81
|
17, 24, 0, 21, 15, 0, 0, 0, 80, 40
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static const flex_int16_t yy_def[71] =
|
static const flex_int16_t yy_def[71] =
|
||||||
|
@ -427,52 +427,44 @@ static const flex_int16_t yy_def[71] =
|
||||||
69, 1, 69, 69, 69, 69, 69, 69, 69, 69,
|
69, 1, 69, 69, 69, 69, 69, 69, 69, 69,
|
||||||
69, 69, 69, 69, 69, 70, 69, 69, 69, 69,
|
69, 69, 69, 69, 69, 70, 69, 69, 69, 69,
|
||||||
70, 70, 70, 70, 70, 70, 70, 70, 69, 69,
|
70, 70, 70, 70, 70, 70, 70, 70, 69, 69,
|
||||||
69, 69, 69, 70, 70, 69, 69, 69, 69, 70,
|
69, 69, 69, 70, 70, 70, 69, 69, 69, 70,
|
||||||
70, 70, 70, 70, 70, 70, 70, 69, 69, 70,
|
70, 70, 70, 70, 70, 70, 70, 69, 70, 70,
|
||||||
70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
|
70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
|
||||||
70, 70, 70, 70, 70, 70, 70, 70, 0, 69
|
70, 70, 70, 70, 70, 70, 70, 70, 0, 69
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static const flex_int16_t yy_nxt[157] =
|
static const flex_int16_t yy_nxt[119] =
|
||||||
{ 0,
|
{ 0,
|
||||||
4, 5, 6, 5, 7, 8, 9, 10, 11, 12,
|
4, 5, 6, 5, 7, 8, 9, 10, 11, 12,
|
||||||
13, 14, 15, 16, 17, 18, 19, 20, 21, 4,
|
13, 14, 15, 16, 17, 18, 19, 20, 21, 21,
|
||||||
21, 22, 23, 21, 21, 24, 21, 25, 21, 21,
|
22, 23, 21, 21, 24, 21, 25, 21, 21, 26,
|
||||||
26, 27, 21, 21, 21, 28, 29, 30, 31, 34,
|
27, 21, 21, 21, 28, 29, 30, 31, 34, 42,
|
||||||
69, 69, 69, 69, 44, 36, 42, 69, 41, 69,
|
34, 35, 68, 67, 43, 66, 36, 65, 36, 64,
|
||||||
40, 43, 46, 69, 34, 69, 69, 69, 47, 45,
|
63, 62, 61, 60, 59, 58, 57, 49, 56, 55,
|
||||||
36, 69, 69, 69, 50, 69, 69, 53, 54, 51,
|
54, 53, 52, 51, 50, 49, 48, 47, 46, 45,
|
||||||
69, 52, 56, 58, 69, 69, 69, 55, 57, 69,
|
44, 41, 40, 39, 38, 37, 33, 32, 69, 3,
|
||||||
69, 69, 35, 59, 60, 69, 62, 69, 69, 69,
|
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
||||||
66, 61, 67, 69, 63, 64, 69, 65, 68, 69,
|
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
||||||
|
|
||||||
69, 69, 69, 69, 49, 69, 49, 69, 48, 69,
|
|
||||||
39, 38, 37, 33, 32, 69, 3, 69, 69, 69,
|
|
||||||
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
||||||
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
69, 69, 69, 69, 69, 69, 69, 69
|
||||||
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
|
||||||
69, 69, 69, 69, 69, 69
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static const flex_int16_t yy_chk[157] =
|
static const flex_int16_t yy_chk[119] =
|
||||||
{ 0,
|
{ 0,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 16,
|
1, 1, 1, 1, 1, 1, 1, 1, 16, 24,
|
||||||
22, 23, 24, 25, 25, 16, 24, 26, 23, 27,
|
34, 70, 65, 64, 24, 62, 16, 61, 34, 60,
|
||||||
22, 24, 27, 28, 34, 40, 41, 43, 28, 26,
|
57, 56, 55, 54, 53, 51, 50, 49, 47, 46,
|
||||||
34, 44, 45, 46, 40, 50, 47, 44, 45, 41,
|
45, 44, 43, 41, 40, 36, 30, 28, 27, 26,
|
||||||
51, 43, 47, 51, 53, 54, 55, 46, 50, 56,
|
25, 23, 22, 20, 19, 18, 8, 7, 3, 69,
|
||||||
57, 60, 70, 53, 54, 61, 56, 62, 64, 65,
|
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
||||||
62, 55, 64, 68, 57, 60, 67, 61, 65, 66,
|
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
||||||
|
|
||||||
63, 59, 58, 52, 49, 42, 36, 35, 30, 21,
|
|
||||||
20, 19, 18, 8, 7, 3, 69, 69, 69, 69,
|
|
||||||
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
||||||
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
69, 69, 69, 69, 69, 69, 69, 69
|
||||||
69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
|
|
||||||
69, 69, 69, 69, 69, 69
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yy_state_type yy_last_accepting_state;
|
static yy_state_type yy_last_accepting_state;
|
||||||
|
@ -490,7 +482,14 @@ int yy_flex_debug = 0;
|
||||||
#define YY_RESTORE_YY_MORE_OFFSET
|
#define YY_RESTORE_YY_MORE_OFFSET
|
||||||
char *yytext;
|
char *yytext;
|
||||||
#line 1 "analyse_lexicale.lex"
|
#line 1 "analyse_lexicale.lex"
|
||||||
#line 494 "lex.yy.c"
|
#line 2 "analyse_lexicale.lex"
|
||||||
|
#include "analyse_syntaxique.tab.h"
|
||||||
|
int yywrap(void){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#line 492 "lex.yy.c"
|
||||||
|
#line 493 "lex.yy.c"
|
||||||
|
|
||||||
#define INITIAL 0
|
#define INITIAL 0
|
||||||
|
|
||||||
|
@ -707,10 +706,10 @@ YY_DECL
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#line 41 "analyse_lexicale.lex"
|
#line 53 "analyse_lexicale.lex"
|
||||||
|
|
||||||
|
|
||||||
#line 714 "lex.yy.c"
|
#line 713 "lex.yy.c"
|
||||||
|
|
||||||
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
|
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
|
||||||
{
|
{
|
||||||
|
@ -743,7 +742,7 @@ yy_match:
|
||||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
|
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
|
||||||
++yy_cp;
|
++yy_cp;
|
||||||
}
|
}
|
||||||
while ( yy_base[yy_current_state] != 117 );
|
while ( yy_base[yy_current_state] != 80 );
|
||||||
|
|
||||||
yy_find_action:
|
yy_find_action:
|
||||||
yy_act = yy_accept[yy_current_state];
|
yy_act = yy_accept[yy_current_state];
|
||||||
|
@ -769,171 +768,176 @@ do_action: /* This label is used only to access EOF actions. */
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 43 "analyse_lexicale.lex"
|
#line 55 "analyse_lexicale.lex"
|
||||||
{return tADD ;}
|
{return tADD ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 2:
|
case 2:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 44 "analyse_lexicale.lex"
|
#line 56 "analyse_lexicale.lex"
|
||||||
{return tSUB ;}
|
{return tSUB ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 3:
|
case 3:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 45 "analyse_lexicale.lex"
|
#line 57 "analyse_lexicale.lex"
|
||||||
{return tMUL ;}
|
{return tMUL ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 4:
|
case 4:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 46 "analyse_lexicale.lex"
|
#line 58 "analyse_lexicale.lex"
|
||||||
{return tDIV ;}
|
{return tDIV ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 5:
|
case 5:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 48 "analyse_lexicale.lex"
|
#line 60 "analyse_lexicale.lex"
|
||||||
{return tPO ;}
|
{return tPO ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 6:
|
case 6:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 49 "analyse_lexicale.lex"
|
#line 61 "analyse_lexicale.lex"
|
||||||
{return tPF ;}
|
{return tPF ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 7:
|
case 7:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 50 "analyse_lexicale.lex"
|
#line 62 "analyse_lexicale.lex"
|
||||||
{return tAO ;}
|
{return tAO ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 8:
|
case 8:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 51 "analyse_lexicale.lex"
|
#line 63 "analyse_lexicale.lex"
|
||||||
{return tAF ;}
|
{return tAF ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 9:
|
case 9:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 53 "analyse_lexicale.lex"
|
#line 65 "analyse_lexicale.lex"
|
||||||
{return tPV ;}
|
{return tPV ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 10:
|
case 10:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 54 "analyse_lexicale.lex"
|
#line 66 "analyse_lexicale.lex"
|
||||||
{}
|
{}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 11:
|
case 11:
|
||||||
/* rule 11 can match eol */
|
/* rule 11 can match eol */
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 55 "analyse_lexicale.lex"
|
#line 67 "analyse_lexicale.lex"
|
||||||
{}
|
{}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 12:
|
case 12:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 56 "analyse_lexicale.lex"
|
#line 68 "analyse_lexicale.lex"
|
||||||
{return tVIRGULE ;}
|
{return tVIRGULE ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 13:
|
case 13:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 58 "analyse_lexicale.lex"
|
#line 70 "analyse_lexicale.lex"
|
||||||
{return tAFFECTATION ;}
|
{return tAFFECTATION ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 14:
|
case 14:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 60 "analyse_lexicale.lex"
|
#line 72 "analyse_lexicale.lex"
|
||||||
{return tEGAL ;}
|
{return tEGAL ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 15:
|
case 15:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 61 "analyse_lexicale.lex"
|
#line 73 "analyse_lexicale.lex"
|
||||||
{return tDIFF ;}
|
{return tDIFF ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 16:
|
case 16:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 62 "analyse_lexicale.lex"
|
#line 74 "analyse_lexicale.lex"
|
||||||
{return tLT ;}
|
{return tLT ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 17:
|
case 17:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 63 "analyse_lexicale.lex"
|
#line 75 "analyse_lexicale.lex"
|
||||||
{return tGT ;}
|
{return tGT ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 18:
|
case 18:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 64 "analyse_lexicale.lex"
|
#line 76 "analyse_lexicale.lex"
|
||||||
{return tLTE ;}
|
{return tLTE ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 19:
|
case 19:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 65 "analyse_lexicale.lex"
|
#line 77 "analyse_lexicale.lex"
|
||||||
{return tGTE ;}
|
{return tGTE ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 20:
|
case 20:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 66 "analyse_lexicale.lex"
|
#line 78 "analyse_lexicale.lex"
|
||||||
{return tNOT ;}
|
{return tNOT ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 21:
|
case 21:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 69 "analyse_lexicale.lex"
|
#line 81 "analyse_lexicale.lex"
|
||||||
{return tMAIN ;}
|
{return tMAIN ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 22:
|
case 22:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 70 "analyse_lexicale.lex"
|
#line 82 "analyse_lexicale.lex"
|
||||||
{return tINT ;}
|
{return tINT ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 23:
|
case 23:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 71 "analyse_lexicale.lex"
|
#line 83 "analyse_lexicale.lex"
|
||||||
{return tPRINT ;}
|
{return tPRINT ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 24:
|
case 24:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 72 "analyse_lexicale.lex"
|
#line 84 "analyse_lexicale.lex"
|
||||||
{return tRETURN ;}
|
{return tRETURN ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 25:
|
case 25:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 74 "analyse_lexicale.lex"
|
#line 86 "analyse_lexicale.lex"
|
||||||
{return tOR ;}
|
{return tOR ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 26:
|
case 26:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 75 "analyse_lexicale.lex"
|
#line 87 "analyse_lexicale.lex"
|
||||||
{return tAND ;}
|
{return tAND ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 27:
|
case 27:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 77 "analyse_lexicale.lex"
|
#line 89 "analyse_lexicale.lex"
|
||||||
{return tIF ;}
|
{return tIF ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 28:
|
case 28:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 78 "analyse_lexicale.lex"
|
#line 90 "analyse_lexicale.lex"
|
||||||
{return tELSE ;}
|
{return tELSE ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 29:
|
case 29:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 79 "analyse_lexicale.lex"
|
#line 91 "analyse_lexicale.lex"
|
||||||
{return tWHILE ;}
|
{return tWHILE ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 30:
|
case 30:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 81 "analyse_lexicale.lex"
|
#line 93 "analyse_lexicale.lex"
|
||||||
{return tCONST ;}
|
{return tCONST ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 31:
|
case 31:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 82 "analyse_lexicale.lex"
|
#line 94 "analyse_lexicale.lex"
|
||||||
{return tENTIER ;}
|
{yylval.nombre = atoi(yytext); return tENTIER ;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 32:
|
case 32:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 83 "analyse_lexicale.lex"
|
#line 95 "analyse_lexicale.lex"
|
||||||
{return tVAR ;}
|
{yylval.nombre = -1; return tENTIEREXP;}
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 33:
|
case 33:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 85 "analyse_lexicale.lex"
|
#line 96 "analyse_lexicale.lex"
|
||||||
|
{strcpy(yylval.id, yytext); return tVAR ;}
|
||||||
|
YY_BREAK
|
||||||
|
case 34:
|
||||||
|
YY_RULE_SETUP
|
||||||
|
#line 98 "analyse_lexicale.lex"
|
||||||
ECHO;
|
ECHO;
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
#line 937 "lex.yy.c"
|
#line 941 "lex.yy.c"
|
||||||
case YY_STATE_EOF(INITIAL):
|
case YY_STATE_EOF(INITIAL):
|
||||||
yyterminate();
|
yyterminate();
|
||||||
|
|
||||||
|
@ -1938,11 +1942,9 @@ void yyfree (void * ptr )
|
||||||
|
|
||||||
#define YYTABLES_NAME "yytables"
|
#define YYTABLES_NAME "yytables"
|
||||||
|
|
||||||
#line 85 "analyse_lexicale.lex"
|
#line 98 "analyse_lexicale.lex"
|
||||||
|
|
||||||
|
|
||||||
int yywrap(void){
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
//int main(void){
|
//int main(void){
|
||||||
// yylex();
|
// yylex();
|
||||||
//}
|
//}
|
||||||
|
|
64
poubelle/as.y
Normal file
64
poubelle/as.y
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
%union {
|
||||||
|
int nombre;
|
||||||
|
}
|
||||||
|
|
||||||
|
%token tENTIER
|
||||||
|
%token tADD
|
||||||
|
%token tSUB
|
||||||
|
%token tMUL
|
||||||
|
%token tDIV
|
||||||
|
|
||||||
|
%token tPO
|
||||||
|
%token tPF
|
||||||
|
%token tAO
|
||||||
|
%token tAF
|
||||||
|
|
||||||
|
%token tERROR
|
||||||
|
|
||||||
|
%token tPV
|
||||||
|
%token tVIRGULE
|
||||||
|
%token tAFFECTATION
|
||||||
|
%token tEGAL
|
||||||
|
%token tDIFF
|
||||||
|
%token tLT
|
||||||
|
%token tGT
|
||||||
|
%token tGTE
|
||||||
|
%token tLTE
|
||||||
|
%token tMAIN
|
||||||
|
%token tINT
|
||||||
|
%token tPRINT
|
||||||
|
%token tRETURN
|
||||||
|
%token tOR
|
||||||
|
%token tAND
|
||||||
|
%token tIF
|
||||||
|
%token tELSE
|
||||||
|
%token tWHILE
|
||||||
|
%token tCONST
|
||||||
|
%token tVAR
|
||||||
|
%token tNOT
|
||||||
|
|
||||||
|
%left tADD
|
||||||
|
%left tSUB
|
||||||
|
%left tMUL
|
||||||
|
%left tDIV
|
||||||
|
%right tEGAL
|
||||||
|
|
||||||
|
|
||||||
|
%%
|
||||||
|
|
||||||
|
Prog : tINT tMAIN tPO tPF Body {printf("Dans main\n");};
|
||||||
|
|
||||||
|
|
||||||
|
Body : tAO Instructions Return tAF ;
|
||||||
|
|
||||||
|
Instructions : Instruction Instructions | ;
|
||||||
|
|
||||||
|
Instruction : Print ;
|
||||||
|
|
||||||
|
Type : tINT | tCONST tINT ;
|
||||||
|
|
||||||
|
Valeur : tVAR | Affbis ;
|
||||||
|
|
||||||
|
Affbis : tVAR tAFFECTATION E;
|
||||||
|
|
||||||
|
Aff : Affbis tPV ;
|
1956
poubelle/lex.yy.c
Normal file
1956
poubelle/lex.yy.c
Normal file
File diff suppressed because it is too large
Load diff
1474
poubelle/y.output
Normal file
1474
poubelle/y.output
Normal file
File diff suppressed because it is too large
Load diff
1705
poubelle/y.tab.c
Normal file
1705
poubelle/y.tab.c
Normal file
File diff suppressed because it is too large
Load diff
137
poubelle/y.tab.h
Normal file
137
poubelle/y.tab.h
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
/* A Bison parser, made by GNU Bison 3.0.4. */
|
||||||
|
|
||||||
|
/* Bison interface for Yacc-like parsers in C
|
||||||
|
|
||||||
|
Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* As a special exception, you may create a larger work that contains
|
||||||
|
part or all of the Bison parser skeleton and distribute that work
|
||||||
|
under terms of your choice, so long as that work isn't itself a
|
||||||
|
parser generator using the skeleton or a modified version thereof
|
||||||
|
as a parser skeleton. Alternatively, if you modify or redistribute
|
||||||
|
the parser skeleton itself, you may (at your option) remove this
|
||||||
|
special exception, which will cause the skeleton and the resulting
|
||||||
|
Bison output files to be licensed under the GNU General Public
|
||||||
|
License without this special exception.
|
||||||
|
|
||||||
|
This special exception was added by the Free Software Foundation in
|
||||||
|
version 2.2 of Bison. */
|
||||||
|
|
||||||
|
#ifndef YY_YY_Y_TAB_H_INCLUDED
|
||||||
|
# define YY_YY_Y_TAB_H_INCLUDED
|
||||||
|
/* Debug traces. */
|
||||||
|
#ifndef YYDEBUG
|
||||||
|
# define YYDEBUG 1
|
||||||
|
#endif
|
||||||
|
#if YYDEBUG
|
||||||
|
extern int yydebug;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Token type. */
|
||||||
|
#ifndef YYTOKENTYPE
|
||||||
|
# define YYTOKENTYPE
|
||||||
|
enum yytokentype
|
||||||
|
{
|
||||||
|
tENTIER = 258,
|
||||||
|
tADD = 259,
|
||||||
|
tSUB = 260,
|
||||||
|
tMUL = 261,
|
||||||
|
tDIV = 262,
|
||||||
|
tPO = 263,
|
||||||
|
tPF = 264,
|
||||||
|
tAO = 265,
|
||||||
|
tAF = 266,
|
||||||
|
tERROR = 267,
|
||||||
|
tPV = 268,
|
||||||
|
tVIRGULE = 269,
|
||||||
|
tAFFECTATION = 270,
|
||||||
|
tEGAL = 271,
|
||||||
|
tDIFF = 272,
|
||||||
|
tLT = 273,
|
||||||
|
tGT = 274,
|
||||||
|
tGTE = 275,
|
||||||
|
tLTE = 276,
|
||||||
|
tMAIN = 277,
|
||||||
|
tINT = 278,
|
||||||
|
tPRINT = 279,
|
||||||
|
tRETURN = 280,
|
||||||
|
tOR = 281,
|
||||||
|
tAND = 282,
|
||||||
|
tIF = 283,
|
||||||
|
tELSE = 284,
|
||||||
|
tWHILE = 285,
|
||||||
|
tCONST = 286,
|
||||||
|
tVAR = 287,
|
||||||
|
tNOT = 288
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
/* Tokens. */
|
||||||
|
#define tENTIER 258
|
||||||
|
#define tADD 259
|
||||||
|
#define tSUB 260
|
||||||
|
#define tMUL 261
|
||||||
|
#define tDIV 262
|
||||||
|
#define tPO 263
|
||||||
|
#define tPF 264
|
||||||
|
#define tAO 265
|
||||||
|
#define tAF 266
|
||||||
|
#define tERROR 267
|
||||||
|
#define tPV 268
|
||||||
|
#define tVIRGULE 269
|
||||||
|
#define tAFFECTATION 270
|
||||||
|
#define tEGAL 271
|
||||||
|
#define tDIFF 272
|
||||||
|
#define tLT 273
|
||||||
|
#define tGT 274
|
||||||
|
#define tGTE 275
|
||||||
|
#define tLTE 276
|
||||||
|
#define tMAIN 277
|
||||||
|
#define tINT 278
|
||||||
|
#define tPRINT 279
|
||||||
|
#define tRETURN 280
|
||||||
|
#define tOR 281
|
||||||
|
#define tAND 282
|
||||||
|
#define tIF 283
|
||||||
|
#define tELSE 284
|
||||||
|
#define tWHILE 285
|
||||||
|
#define tCONST 286
|
||||||
|
#define tVAR 287
|
||||||
|
#define tNOT 288
|
||||||
|
|
||||||
|
/* Value type. */
|
||||||
|
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||||
|
|
||||||
|
union YYSTYPE
|
||||||
|
{
|
||||||
|
#line 1 "analyse_syntaxique.y" /* yacc.c:1909 */
|
||||||
|
|
||||||
|
int nombre;
|
||||||
|
char id[30];
|
||||||
|
|
||||||
|
#line 125 "y.tab.h" /* yacc.c:1909 */
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef union YYSTYPE YYSTYPE;
|
||||||
|
# define YYSTYPE_IS_TRIVIAL 1
|
||||||
|
# define YYSTYPE_IS_DECLARED 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
extern YYSTYPE yylval;
|
||||||
|
|
||||||
|
int yyparse (void);
|
||||||
|
|
||||||
|
#endif /* !YY_YY_Y_TAB_H_INCLUDED */
|
25
script.sh
25
script.sh
|
@ -1,31 +1,14 @@
|
||||||
bison -d -t analyse_syntaxique.y -v
|
bison -d -t analyse_syntaxique.y -v
|
||||||
flex analyse_lexicale.lex
|
flex analyse_lexicale.lex
|
||||||
gcc *.c -ly
|
gcc -w *.c -ly
|
||||||
echo "
|
echo "
|
||||||
int fonction1(int toto){
|
|
||||||
toto = toto + 1 ;
|
|
||||||
return toto;
|
|
||||||
}
|
|
||||||
|
|
||||||
int fonction2(){
|
|
||||||
int i = 0;
|
|
||||||
while (i <= 2){
|
|
||||||
printf(i);
|
|
||||||
i = i +1 ;
|
|
||||||
}
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
const int toto = 1, mimi, lolo = 6;
|
const int toto = 1, mimi, lolo = 6;
|
||||||
int tata = 5, lala;
|
int tata = 5, lala;
|
||||||
|
while (tata == 5){
|
||||||
if (tata == 5){
|
printf(tata);
|
||||||
fonction1(lolo);
|
lala = lolo + 6;
|
||||||
} else if (toto == 1){
|
|
||||||
fonction2();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
" | ./a.out
|
" | ./a.out
|
Loading…
Reference in a new issue