fin tp2
This commit is contained in:
parent
1fde03c4c1
commit
1214af43d7
11 changed files with 3529 additions and 198 deletions
BIN
Lex/a.out
BIN
Lex/a.out
Binary file not shown.
|
@ -1,80 +0,0 @@
|
|||
ADD "+"
|
||||
SUB "-"
|
||||
MUL "*"
|
||||
DIV "/"
|
||||
tPO "("
|
||||
tPF ")"
|
||||
tAO "{"
|
||||
tAF "}"
|
||||
EOL "\n"
|
||||
EOI ";"
|
||||
SPACE " "
|
||||
TAB "\t"
|
||||
VIRGULE ","
|
||||
EGAL "="
|
||||
LT "<"
|
||||
GT ">"
|
||||
tINT "int"
|
||||
tMAIN "main"
|
||||
tPRINT "printf"
|
||||
tRETURN "return"
|
||||
tIF "if"
|
||||
tELSE "else"
|
||||
tWHILE "while"
|
||||
tNOT "!"
|
||||
tAND "&&"
|
||||
tOR "||"
|
||||
DIGIT [0-9]
|
||||
VARIABLE [A-Za-z0-9_]+
|
||||
DECIMAL {DIGIT}+
|
||||
EXPONENTIEL {DIGIT}+"^"{DIGIT}+
|
||||
ENTIER {DECIMAL}|{EXPONENTIEL}
|
||||
OPERATION {ADD}|{SUB}|{MUL}|{DIV}
|
||||
COMPARATEUR {EGAL}|{LT}|{GT}
|
||||
SEPARATOR {SPACE}|{TAB}
|
||||
|
||||
%%
|
||||
|
||||
{ADD} {printf("tADD ");}
|
||||
{SUB} {printf("tSUB ");}
|
||||
{MUL} {printf("tMUL ");}
|
||||
{DIV} {printf("tDIV ");}
|
||||
|
||||
{tPO} {printf("tPO ");}
|
||||
{tPF} {printf("tPF ");}
|
||||
{tAO} {printf("tAO ");}
|
||||
{tAF} {printf("tAF ");}
|
||||
|
||||
{EOI} {printf("tPV ");}
|
||||
{SEPARATOR} {}
|
||||
{EOL} {}
|
||||
{VIRGULE} {printf("tVIRGULE ");}
|
||||
|
||||
{EGAL} {printf("tEGAL ");}
|
||||
{LT} {printf("tLT ");}
|
||||
{GT} {printf("tGT ");}
|
||||
|
||||
{tMAIN} {printf("tMAIN ");}
|
||||
{tINT} {printf("tINT ");}
|
||||
{tPRINT} {printf("tPRINT ");}
|
||||
{tRETURN} {printf("tRETURN ");}
|
||||
|
||||
{tOR} {printf("tOR ");}
|
||||
{tAND} {printf("tAND ");}
|
||||
|
||||
{tIF} {printf("tIF ");}
|
||||
{tELSE} {printf("tELSE ");}
|
||||
{tWHILE} {printf("tWHILE ");}
|
||||
|
||||
{ENTIER} {printf("tENTIER ");}
|
||||
{VARIABLE} {printf("tVAR ");}
|
||||
|
||||
%%
|
||||
int yywrap(void){
|
||||
return 1;
|
||||
}
|
||||
int main(void){
|
||||
yylex();
|
||||
}
|
||||
|
||||
|
93
analyse_lexicale.lex
Normal file
93
analyse_lexicale.lex
Normal file
|
@ -0,0 +1,93 @@
|
|||
ADD "+"
|
||||
SUB "-"
|
||||
MUL "*"
|
||||
DIV "/"
|
||||
tPO "("
|
||||
tPF ")"
|
||||
tAO "{"
|
||||
tAF "}"
|
||||
EOL "\n"
|
||||
EOI ";"
|
||||
SPACE " "
|
||||
TAB "\t"
|
||||
VIRGULE ","
|
||||
AFFECTATION "="
|
||||
EQUAL "=="
|
||||
LT "<"
|
||||
GT ">"
|
||||
LTE "<="
|
||||
GTE ">="
|
||||
tINT "int"
|
||||
tMAIN "main"
|
||||
tPRINT "printf"
|
||||
tRETURN "return"
|
||||
tIF "if"
|
||||
tELSE "else"
|
||||
tWHILE "while"
|
||||
tNOT "!"
|
||||
tAND "&&"
|
||||
tOR "||"
|
||||
tDIFF "!="
|
||||
DIGIT [0-9]
|
||||
VARIABLE [A-Za-z0-9_]+
|
||||
CONST "const"
|
||||
DECIMAL {DIGIT}+
|
||||
EXPONENTIEL {DIGIT}+"^"{DIGIT}+
|
||||
ENTIER {DECIMAL}|{EXPONENTIEL}
|
||||
OPERATION {ADD}|{SUB}|{MUL}|{DIV}
|
||||
COMPARATEUR {EGAL}|{LT}|{GT}
|
||||
SEPARATOR {SPACE}|{TAB}
|
||||
|
||||
%%
|
||||
|
||||
{ADD} {return tADD ;}
|
||||
{SUB} {return tSUB ;}
|
||||
{MUL} {return tMUL ;}
|
||||
{DIV} {return tDIV ;}
|
||||
|
||||
{tPO} {return tPO ;}
|
||||
{tPF} {return tPF ;}
|
||||
{tAO} {return tAO ;}
|
||||
{tAF} {return tAF ;}
|
||||
|
||||
{EOI} {return tPV ;}
|
||||
{SEPARATOR} {}
|
||||
{EOL} {}
|
||||
{VIRGULE} {return tVIRGULE ;}
|
||||
|
||||
{AFFECTATION} {return tAFFECTATION ;}
|
||||
|
||||
{EQUAL} {return tEGAL ;}
|
||||
{tDIFF} {return tDIFF ;}
|
||||
{LT} {return tLT ;}
|
||||
{GT} {return tGT ;}
|
||||
{LTE} {return tLTE ;}
|
||||
{GTE} {return tGTE ;}
|
||||
{tNOT} {return tNOT ;}
|
||||
|
||||
|
||||
{tMAIN} {return tMAIN ;}
|
||||
{tINT} {return tINT ;}
|
||||
{tPRINT} {return tPRINT ;}
|
||||
{tRETURN} {return tRETURN ;}
|
||||
|
||||
{tOR} {return tOR ;}
|
||||
{tAND} {return tAND ;}
|
||||
|
||||
{tIF} {return tIF ;}
|
||||
{tELSE} {return tELSE ;}
|
||||
{tWHILE} {return tWHILE ;}
|
||||
|
||||
{CONST} {return tCONST ;}
|
||||
{ENTIER} {return tENTIER ;}
|
||||
{VARIABLE} {return tVAR ;}
|
||||
|
||||
%%
|
||||
int yywrap(void){
|
||||
return 1;
|
||||
}
|
||||
//int main(void){
|
||||
// yylex();
|
||||
//}
|
||||
|
||||
|
1452
analyse_syntaxique.output
Normal file
1452
analyse_syntaxique.output
Normal file
File diff suppressed because it is too large
Load diff
1543
analyse_syntaxique.tab.c
Normal file
1543
analyse_syntaxique.tab.c
Normal file
File diff suppressed because it is too large
Load diff
104
analyse_syntaxique.tab.h
Normal file
104
analyse_syntaxique.tab.h
Normal file
|
@ -0,0 +1,104 @@
|
|||
/* 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_ANALYSE_SYNTAXIQUE_TAB_H_INCLUDED
|
||||
# define YY_YY_ANALYSE_SYNTAXIQUE_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
|
||||
|
||||
/* Value type. */
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
|
||||
union YYSTYPE
|
||||
{
|
||||
#line 1 "analyse_syntaxique.y" /* yacc.c:1909 */
|
||||
|
||||
int nombre;
|
||||
|
||||
#line 92 "analyse_syntaxique.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_ANALYSE_SYNTAXIQUE_TAB_H_INCLUDED */
|
107
analyse_syntaxique.y
Normal file
107
analyse_syntaxique.y
Normal file
|
@ -0,0 +1,107 @@
|
|||
%union {
|
||||
int nombre;
|
||||
}
|
||||
|
||||
%token<nombre> 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
|
||||
%right tEGAL
|
||||
|
||||
%type<nombre> E
|
||||
%%
|
||||
|
||||
C : Fonctions Main ;
|
||||
Fonctions : Fonction Fonctions | Fonction | ;
|
||||
|
||||
Fonction : tINT tVAR tPO Params tPF Body ;
|
||||
|
||||
Main : tINT tMAIN tPO tPF Body ;
|
||||
|
||||
Params : | Param SuiteParams ;
|
||||
Param : tINT tVAR ;
|
||||
|
||||
|
||||
// Ps : P Ps | ;
|
||||
// P : tINT tID ttVIRGULE
|
||||
// Ps =>* tINT tID ttVIRGULE tINT tID ttVIRGULE
|
||||
// Ps => P Ps => P P Ps ...
|
||||
|
||||
SuiteParams : tVIRGULE Param SuiteParams | ;
|
||||
|
||||
Body : tAO Instructions tAF ;
|
||||
|
||||
Instructions : Instruction Instructions | ;
|
||||
|
||||
Instruction : Aff | If | While | tRETURN | Print | Decl | Invocation tPV ;
|
||||
|
||||
Decl : Type Valeur SuiteDecl tPV;
|
||||
|
||||
SuiteDecl: tVIRGULE Valeur SuiteDecl | ;
|
||||
|
||||
Type : tINT | tCONST tINT ;
|
||||
|
||||
Valeur : tVAR | Affbis ;
|
||||
|
||||
Affbis : tVAR tAFFECTATION E;
|
||||
|
||||
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 : tID tPlus tID | ...
|
||||
|
||||
If : tIF tPO Cond tPF Body Else;
|
||||
|
||||
Else : | tELSE Body |tELSE tIF tPO Cond tPF Body Else;
|
||||
|
||||
While : tWHILE tPO Cond tPF Body ;
|
||||
|
||||
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 ;
|
||||
|
||||
Print : tPRINT tPO tVAR tPF tPV ;
|
||||
|
||||
Invocation : tVAR tPO Args tPF ;
|
||||
|
||||
Args : | Arg SuiteArgs ;
|
||||
|
||||
Arg : tVAR ;
|
||||
|
||||
SuiteArgs : tVIRGULE Arg SuiteArgs ;
|
||||
|
||||
RETURN : tRETURN E tPV ;
|
||||
|
||||
%%
|
|
@ -351,8 +351,8 @@ static void yynoreturn yy_fatal_error ( const char* msg );
|
|||
(yy_hold_char) = *yy_cp; \
|
||||
*yy_cp = '\0'; \
|
||||
(yy_c_buf_p) = yy_cp;
|
||||
#define YY_NUM_RULES 25
|
||||
#define YY_END_OF_BUFFER 26
|
||||
#define YY_NUM_RULES 33
|
||||
#define YY_END_OF_BUFFER 34
|
||||
/* This struct is not used in this scanner,
|
||||
but its presence is necessary. */
|
||||
struct yy_trans_info
|
||||
|
@ -360,13 +360,15 @@ struct yy_trans_info
|
|||
flex_int32_t yy_verify;
|
||||
flex_int32_t yy_nxt;
|
||||
};
|
||||
static const flex_int16_t yy_accept[49] =
|
||||
static const flex_int16_t yy_accept[70] =
|
||||
{ 0,
|
||||
0, 0, 26, 25, 23, 24, 25, 5, 6, 3,
|
||||
1, 10, 2, 4, 12, 9, 13, 11, 14, 22,
|
||||
22, 22, 22, 22, 7, 25, 8, 19, 12, 22,
|
||||
0, 22, 20, 22, 22, 22, 18, 12, 22, 16,
|
||||
22, 22, 21, 15, 22, 22, 17, 0
|
||||
0, 0, 34, 33, 10, 11, 20, 33, 5, 6,
|
||||
3, 1, 12, 2, 4, 31, 9, 16, 13, 17,
|
||||
32, 32, 32, 32, 32, 32, 32, 32, 7, 33,
|
||||
8, 15, 26, 31, 32, 0, 18, 14, 19, 32,
|
||||
32, 27, 32, 32, 32, 32, 32, 25, 31, 32,
|
||||
32, 22, 32, 32, 32, 32, 32, 28, 21, 32,
|
||||
32, 32, 30, 32, 32, 29, 23, 24, 0
|
||||
} ;
|
||||
|
||||
static const YY_CHAR yy_ec[256] =
|
||||
|
@ -374,17 +376,17 @@ static const YY_CHAR yy_ec[256] =
|
|||
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 4, 1, 1, 1, 1, 1, 5, 1, 6,
|
||||
7, 8, 9, 10, 11, 1, 12, 13, 13, 13,
|
||||
13, 13, 13, 13, 13, 13, 13, 1, 14, 15,
|
||||
16, 17, 1, 1, 18, 18, 18, 18, 18, 18,
|
||||
18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
|
||||
18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
|
||||
1, 1, 1, 19, 18, 1, 20, 18, 18, 18,
|
||||
1, 4, 5, 1, 1, 1, 1, 6, 1, 7,
|
||||
8, 9, 10, 11, 12, 1, 13, 14, 14, 14,
|
||||
14, 14, 14, 14, 14, 14, 14, 1, 15, 16,
|
||||
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,
|
||||
1, 1, 1, 20, 19, 1, 21, 19, 22, 19,
|
||||
|
||||
21, 22, 18, 18, 23, 18, 18, 24, 25, 26,
|
||||
18, 27, 18, 28, 29, 30, 18, 18, 18, 18,
|
||||
18, 18, 31, 32, 33, 1, 1, 1, 1, 1,
|
||||
23, 24, 19, 25, 26, 19, 19, 27, 28, 29,
|
||||
30, 31, 19, 32, 33, 34, 35, 19, 36, 19,
|
||||
19, 19, 37, 38, 39, 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,
|
||||
|
@ -401,64 +403,76 @@ static const YY_CHAR yy_ec[256] =
|
|||
1, 1, 1, 1, 1
|
||||
} ;
|
||||
|
||||
static const YY_CHAR yy_meta[34] =
|
||||
static const YY_CHAR yy_meta[40] =
|
||||
{ 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 2, 1, 1, 1, 1, 2, 2, 2,
|
||||
1, 1, 1, 2, 1, 1, 1, 1, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
1, 1, 1
|
||||
2, 2, 2, 2, 2, 2, 1, 1, 1
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_base[50] =
|
||||
static const flex_int16_t yy_base[71] =
|
||||
{ 0,
|
||||
0, 0, 77, 78, 78, 78, 71, 78, 78, 78,
|
||||
78, 78, 78, 78, 21, 78, 78, 78, 78, 56,
|
||||
17, 16, 24, 18, 78, 42, 78, 78, 26, 54,
|
||||
59, 28, 52, 29, 30, 31, 78, 57, 37, 50,
|
||||
36, 41, 49, 47, 33, 42, 46, 78, 49
|
||||
0, 0, 116, 117, 117, 117, 98, 108, 117, 117,
|
||||
117, 117, 117, 117, 117, 26, 117, 96, 95, 94,
|
||||
90, 21, 22, 23, 24, 28, 30, 34, 117, 71,
|
||||
117, 117, 117, 41, 88, 93, 117, 117, 117, 36,
|
||||
37, 86, 38, 42, 43, 44, 47, 117, 91, 46,
|
||||
51, 84, 55, 56, 57, 60, 61, 83, 82, 62,
|
||||
66, 68, 81, 69, 70, 80, 77, 74, 117, 81
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_def[50] =
|
||||
static const flex_int16_t yy_def[71] =
|
||||
{ 0,
|
||||
48, 1, 48, 48, 48, 48, 48, 48, 48, 48,
|
||||
48, 48, 48, 48, 49, 48, 48, 48, 48, 49,
|
||||
49, 49, 49, 49, 48, 48, 48, 48, 49, 49,
|
||||
48, 49, 49, 49, 49, 49, 48, 48, 49, 49,
|
||||
49, 49, 49, 49, 49, 49, 49, 0, 48
|
||||
69, 1, 69, 69, 69, 69, 69, 69, 69, 69,
|
||||
69, 69, 69, 69, 69, 70, 69, 69, 69, 69,
|
||||
70, 70, 70, 70, 70, 70, 70, 70, 69, 69,
|
||||
69, 69, 69, 70, 70, 69, 69, 69, 69, 70,
|
||||
70, 70, 70, 70, 70, 70, 70, 69, 69, 70,
|
||||
70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
|
||||
70, 70, 70, 70, 70, 70, 70, 70, 0, 69
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_nxt[112] =
|
||||
static const flex_int16_t yy_nxt[157] =
|
||||
{ 0,
|
||||
4, 5, 6, 5, 7, 8, 9, 10, 11, 12,
|
||||
13, 14, 15, 16, 17, 18, 19, 20, 4, 20,
|
||||
21, 20, 22, 20, 23, 20, 24, 20, 20, 20,
|
||||
25, 26, 27, 29, 48, 48, 48, 33, 29, 31,
|
||||
32, 34, 48, 35, 31, 36, 48, 48, 48, 48,
|
||||
30, 48, 41, 42, 48, 48, 39, 43, 40, 48,
|
||||
48, 44, 46, 47, 48, 48, 45, 48, 48, 38,
|
||||
48, 38, 48, 37, 48, 28, 48, 3, 48, 48,
|
||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
|
||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
|
||||
13, 14, 15, 16, 17, 18, 19, 20, 21, 4,
|
||||
21, 22, 23, 21, 21, 24, 21, 25, 21, 21,
|
||||
26, 27, 21, 21, 21, 28, 29, 30, 31, 34,
|
||||
69, 69, 69, 69, 44, 36, 42, 69, 41, 69,
|
||||
40, 43, 46, 69, 34, 69, 69, 69, 47, 45,
|
||||
36, 69, 69, 69, 50, 69, 69, 53, 54, 51,
|
||||
69, 52, 56, 58, 69, 69, 69, 55, 57, 69,
|
||||
69, 69, 35, 59, 60, 69, 62, 69, 69, 69,
|
||||
66, 61, 67, 69, 63, 64, 69, 65, 68, 69,
|
||||
|
||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
|
||||
48
|
||||
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
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_chk[112] =
|
||||
static const flex_int16_t yy_chk[157] =
|
||||
{ 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, 15, 22, 21, 24, 22, 29, 15,
|
||||
21, 22, 23, 23, 29, 24, 32, 34, 35, 36,
|
||||
49, 45, 35, 36, 41, 39, 32, 39, 34, 42,
|
||||
46, 41, 45, 46, 47, 44, 42, 43, 40, 38,
|
||||
33, 31, 30, 26, 20, 7, 3, 48, 48, 48,
|
||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
|
||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 16,
|
||||
22, 23, 24, 25, 25, 16, 24, 26, 23, 27,
|
||||
22, 24, 27, 28, 34, 40, 41, 43, 28, 26,
|
||||
34, 44, 45, 46, 40, 50, 47, 44, 45, 41,
|
||||
51, 43, 47, 51, 53, 54, 55, 46, 50, 56,
|
||||
57, 60, 70, 53, 54, 61, 56, 62, 64, 65,
|
||||
62, 55, 64, 68, 57, 60, 67, 61, 65, 66,
|
||||
|
||||
48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
|
||||
48
|
||||
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
|
||||
} ;
|
||||
|
||||
static yy_state_type yy_last_accepting_state;
|
||||
|
@ -476,7 +490,7 @@ int yy_flex_debug = 0;
|
|||
#define YY_RESTORE_YY_MORE_OFFSET
|
||||
char *yytext;
|
||||
#line 1 "analyse_lexicale.lex"
|
||||
#line 480 "lex.yy.c"
|
||||
#line 494 "lex.yy.c"
|
||||
|
||||
#define INITIAL 0
|
||||
|
||||
|
@ -693,10 +707,10 @@ YY_DECL
|
|||
}
|
||||
|
||||
{
|
||||
#line 35 "analyse_lexicale.lex"
|
||||
#line 41 "analyse_lexicale.lex"
|
||||
|
||||
|
||||
#line 700 "lex.yy.c"
|
||||
#line 714 "lex.yy.c"
|
||||
|
||||
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
|
||||
{
|
||||
|
@ -723,13 +737,13 @@ yy_match:
|
|||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||
{
|
||||
yy_current_state = (int) yy_def[yy_current_state];
|
||||
if ( yy_current_state >= 49 )
|
||||
if ( yy_current_state >= 70 )
|
||||
yy_c = yy_meta[yy_c];
|
||||
}
|
||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
|
||||
++yy_cp;
|
||||
}
|
||||
while ( yy_base[yy_current_state] != 78 );
|
||||
while ( yy_base[yy_current_state] != 117 );
|
||||
|
||||
yy_find_action:
|
||||
yy_act = yy_accept[yy_current_state];
|
||||
|
@ -755,131 +769,171 @@ do_action: /* This label is used only to access EOF actions. */
|
|||
|
||||
case 1:
|
||||
YY_RULE_SETUP
|
||||
#line 37 "analyse_lexicale.lex"
|
||||
{printf("tADD");}
|
||||
#line 43 "analyse_lexicale.lex"
|
||||
{return tADD ;}
|
||||
YY_BREAK
|
||||
case 2:
|
||||
YY_RULE_SETUP
|
||||
#line 38 "analyse_lexicale.lex"
|
||||
{printf("tSUB");}
|
||||
#line 44 "analyse_lexicale.lex"
|
||||
{return tSUB ;}
|
||||
YY_BREAK
|
||||
case 3:
|
||||
YY_RULE_SETUP
|
||||
#line 39 "analyse_lexicale.lex"
|
||||
{printf("tMUL");}
|
||||
#line 45 "analyse_lexicale.lex"
|
||||
{return tMUL ;}
|
||||
YY_BREAK
|
||||
case 4:
|
||||
YY_RULE_SETUP
|
||||
#line 40 "analyse_lexicale.lex"
|
||||
{printf("tDIV");}
|
||||
#line 46 "analyse_lexicale.lex"
|
||||
{return tDIV ;}
|
||||
YY_BREAK
|
||||
case 5:
|
||||
YY_RULE_SETUP
|
||||
#line 41 "analyse_lexicale.lex"
|
||||
{printf("tPO");}
|
||||
#line 48 "analyse_lexicale.lex"
|
||||
{return tPO ;}
|
||||
YY_BREAK
|
||||
case 6:
|
||||
YY_RULE_SETUP
|
||||
#line 42 "analyse_lexicale.lex"
|
||||
{printf("tPF");}
|
||||
#line 49 "analyse_lexicale.lex"
|
||||
{return tPF ;}
|
||||
YY_BREAK
|
||||
case 7:
|
||||
YY_RULE_SETUP
|
||||
#line 43 "analyse_lexicale.lex"
|
||||
{printf("tAO");}
|
||||
#line 50 "analyse_lexicale.lex"
|
||||
{return tAO ;}
|
||||
YY_BREAK
|
||||
case 8:
|
||||
YY_RULE_SETUP
|
||||
#line 44 "analyse_lexicale.lex"
|
||||
{printf("tAF");}
|
||||
#line 51 "analyse_lexicale.lex"
|
||||
{return tAF ;}
|
||||
YY_BREAK
|
||||
case 9:
|
||||
YY_RULE_SETUP
|
||||
#line 45 "analyse_lexicale.lex"
|
||||
{printf("tPV");}
|
||||
#line 53 "analyse_lexicale.lex"
|
||||
{return tPV ;}
|
||||
YY_BREAK
|
||||
case 10:
|
||||
YY_RULE_SETUP
|
||||
#line 46 "analyse_lexicale.lex"
|
||||
{printf("tVIRGULE");}
|
||||
#line 54 "analyse_lexicale.lex"
|
||||
{}
|
||||
YY_BREAK
|
||||
case 11:
|
||||
/* rule 11 can match eol */
|
||||
YY_RULE_SETUP
|
||||
#line 47 "analyse_lexicale.lex"
|
||||
{printf("tEGAL");}
|
||||
#line 55 "analyse_lexicale.lex"
|
||||
{}
|
||||
YY_BREAK
|
||||
case 12:
|
||||
YY_RULE_SETUP
|
||||
#line 48 "analyse_lexicale.lex"
|
||||
{printf("tENTIER");}
|
||||
#line 56 "analyse_lexicale.lex"
|
||||
{return tVIRGULE ;}
|
||||
YY_BREAK
|
||||
case 13:
|
||||
YY_RULE_SETUP
|
||||
#line 49 "analyse_lexicale.lex"
|
||||
{printf("tLT");}
|
||||
#line 58 "analyse_lexicale.lex"
|
||||
{return tAFFECTATION ;}
|
||||
YY_BREAK
|
||||
case 14:
|
||||
YY_RULE_SETUP
|
||||
#line 50 "analyse_lexicale.lex"
|
||||
{printf("tGT");}
|
||||
#line 60 "analyse_lexicale.lex"
|
||||
{return tEGAL ;}
|
||||
YY_BREAK
|
||||
case 15:
|
||||
YY_RULE_SETUP
|
||||
#line 51 "analyse_lexicale.lex"
|
||||
{printf("tMAIN");}
|
||||
#line 61 "analyse_lexicale.lex"
|
||||
{return tDIFF ;}
|
||||
YY_BREAK
|
||||
case 16:
|
||||
YY_RULE_SETUP
|
||||
#line 52 "analyse_lexicale.lex"
|
||||
{printf("tINT");}
|
||||
#line 62 "analyse_lexicale.lex"
|
||||
{return tLT ;}
|
||||
YY_BREAK
|
||||
case 17:
|
||||
YY_RULE_SETUP
|
||||
#line 53 "analyse_lexicale.lex"
|
||||
{printf("tPRINT");}
|
||||
#line 63 "analyse_lexicale.lex"
|
||||
{return tGT ;}
|
||||
YY_BREAK
|
||||
case 18:
|
||||
YY_RULE_SETUP
|
||||
#line 54 "analyse_lexicale.lex"
|
||||
{printf("tOR");}
|
||||
#line 64 "analyse_lexicale.lex"
|
||||
{return tLTE ;}
|
||||
YY_BREAK
|
||||
case 19:
|
||||
YY_RULE_SETUP
|
||||
#line 55 "analyse_lexicale.lex"
|
||||
{printf("tAND");}
|
||||
#line 65 "analyse_lexicale.lex"
|
||||
{return tGTE ;}
|
||||
YY_BREAK
|
||||
case 20:
|
||||
YY_RULE_SETUP
|
||||
#line 56 "analyse_lexicale.lex"
|
||||
{printf("tIF");}
|
||||
#line 66 "analyse_lexicale.lex"
|
||||
{return tNOT ;}
|
||||
YY_BREAK
|
||||
case 21:
|
||||
YY_RULE_SETUP
|
||||
#line 57 "analyse_lexicale.lex"
|
||||
{printf("tELSE");}
|
||||
#line 69 "analyse_lexicale.lex"
|
||||
{return tMAIN ;}
|
||||
YY_BREAK
|
||||
case 22:
|
||||
YY_RULE_SETUP
|
||||
#line 58 "analyse_lexicale.lex"
|
||||
{printf("tVAR");}
|
||||
#line 70 "analyse_lexicale.lex"
|
||||
{return tINT ;}
|
||||
YY_BREAK
|
||||
case 23:
|
||||
YY_RULE_SETUP
|
||||
#line 59 "analyse_lexicale.lex"
|
||||
{}
|
||||
#line 71 "analyse_lexicale.lex"
|
||||
{return tPRINT ;}
|
||||
YY_BREAK
|
||||
case 24:
|
||||
/* rule 24 can match eol */
|
||||
YY_RULE_SETUP
|
||||
#line 60 "analyse_lexicale.lex"
|
||||
{}
|
||||
#line 72 "analyse_lexicale.lex"
|
||||
{return tRETURN ;}
|
||||
YY_BREAK
|
||||
case 25:
|
||||
YY_RULE_SETUP
|
||||
#line 61 "analyse_lexicale.lex"
|
||||
#line 74 "analyse_lexicale.lex"
|
||||
{return tOR ;}
|
||||
YY_BREAK
|
||||
case 26:
|
||||
YY_RULE_SETUP
|
||||
#line 75 "analyse_lexicale.lex"
|
||||
{return tAND ;}
|
||||
YY_BREAK
|
||||
case 27:
|
||||
YY_RULE_SETUP
|
||||
#line 77 "analyse_lexicale.lex"
|
||||
{return tIF ;}
|
||||
YY_BREAK
|
||||
case 28:
|
||||
YY_RULE_SETUP
|
||||
#line 78 "analyse_lexicale.lex"
|
||||
{return tELSE ;}
|
||||
YY_BREAK
|
||||
case 29:
|
||||
YY_RULE_SETUP
|
||||
#line 79 "analyse_lexicale.lex"
|
||||
{return tWHILE ;}
|
||||
YY_BREAK
|
||||
case 30:
|
||||
YY_RULE_SETUP
|
||||
#line 81 "analyse_lexicale.lex"
|
||||
{return tCONST ;}
|
||||
YY_BREAK
|
||||
case 31:
|
||||
YY_RULE_SETUP
|
||||
#line 82 "analyse_lexicale.lex"
|
||||
{return tENTIER ;}
|
||||
YY_BREAK
|
||||
case 32:
|
||||
YY_RULE_SETUP
|
||||
#line 83 "analyse_lexicale.lex"
|
||||
{return tVAR ;}
|
||||
YY_BREAK
|
||||
case 33:
|
||||
YY_RULE_SETUP
|
||||
#line 85 "analyse_lexicale.lex"
|
||||
ECHO;
|
||||
YY_BREAK
|
||||
#line 883 "lex.yy.c"
|
||||
#line 937 "lex.yy.c"
|
||||
case YY_STATE_EOF(INITIAL):
|
||||
yyterminate();
|
||||
|
||||
|
@ -1176,7 +1230,7 @@ static int yy_get_next_buffer (void)
|
|||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||
{
|
||||
yy_current_state = (int) yy_def[yy_current_state];
|
||||
if ( yy_current_state >= 49 )
|
||||
if ( yy_current_state >= 70 )
|
||||
yy_c = yy_meta[yy_c];
|
||||
}
|
||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
|
||||
|
@ -1204,11 +1258,11 @@ static int yy_get_next_buffer (void)
|
|||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||
{
|
||||
yy_current_state = (int) yy_def[yy_current_state];
|
||||
if ( yy_current_state >= 49 )
|
||||
if ( yy_current_state >= 70 )
|
||||
yy_c = yy_meta[yy_c];
|
||||
}
|
||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
|
||||
yy_is_jam = (yy_current_state == 48);
|
||||
yy_is_jam = (yy_current_state == 69);
|
||||
|
||||
return yy_is_jam ? 0 : yy_current_state;
|
||||
}
|
||||
|
@ -1884,14 +1938,14 @@ void yyfree (void * ptr )
|
|||
|
||||
#define YYTABLES_NAME "yytables"
|
||||
|
||||
#line 61 "analyse_lexicale.lex"
|
||||
#line 85 "analyse_lexicale.lex"
|
||||
|
||||
int yywrap(void){
|
||||
return 1;
|
||||
}
|
||||
int main(void){
|
||||
yylex();
|
||||
}
|
||||
//int main(void){
|
||||
// yylex();
|
||||
//}
|
||||
|
||||
|
||||
|
31
script.sh
Executable file
31
script.sh
Executable file
|
@ -0,0 +1,31 @@
|
|||
bison -d -t analyse_syntaxique.y -v
|
||||
flex analyse_lexicale.lex
|
||||
gcc *.c -ly
|
||||
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(){
|
||||
const int toto = 1, mimi, lolo = 6;
|
||||
int tata = 5, lala;
|
||||
|
||||
if (tata == 5){
|
||||
fonction1(lolo);
|
||||
} else if (toto == 1){
|
||||
fonction2();
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
" | ./a.out
|
27
test
Normal file
27
test
Normal file
|
@ -0,0 +1,27 @@
|
|||
|
||||
int fonction1(int toto){
|
||||
toto = toto + 1 ;
|
||||
return toto;
|
||||
}
|
||||
|
||||
int fonction2(){
|
||||
int i = 0;
|
||||
while (i <= 2){
|
||||
print(i);
|
||||
i = i +1 ;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
int main(){
|
||||
const int toto = 1, mimi, lolo = 6;
|
||||
int tata = 5, lala;
|
||||
|
||||
if (tata == 5){
|
||||
fonction(lolo);
|
||||
} else if (toto == 1){
|
||||
fonction2();
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
Loading…
Reference in a new issue