Foussats Morgane 3 years ago
parent
commit
1214af43d7
11 changed files with 3532 additions and 201 deletions
  1. BIN
      Lex/a.out
  2. 0
    80
      Lex/analyse_lexicale.lex
  3. 0
    0
      Makefile
  4. 93
    0
      analyse_lexicale.lex
  5. 1452
    0
      analyse_syntaxique.output
  6. 1543
    0
      analyse_syntaxique.tab.c
  7. 104
    0
      analyse_syntaxique.tab.h
  8. 107
    0
      analyse_syntaxique.y
  9. 175
    121
      lex.yy.c
  10. 31
    0
      script.sh
  11. 27
    0
      test

BIN
Lex/a.out View File


+ 0
- 80
Lex/analyse_lexicale.lex View File

1
-ADD         "+"
2
-SUB         "-"
3
-MUL         "*"
4
-DIV         "/"
5
-tPO         "("
6
-tPF         ")"
7
-tAO         "{"
8
-tAF         "}"
9
-EOL         "\n"
10
-EOI         ";"
11
-SPACE       " "
12
-TAB         "\t"
13
-VIRGULE     ","
14
-EGAL        "="
15
-LT          "<"
16
-GT          ">"
17
-tINT        "int"
18
-tMAIN       "main"  
19
-tPRINT      "printf"
20
-tRETURN     "return"
21
-tIF         "if"
22
-tELSE       "else"
23
-tWHILE      "while"
24
-tNOT        "!"
25
-tAND        "&&"
26
-tOR         "||"
27
-DIGIT       [0-9]
28
-VARIABLE    [A-Za-z0-9_]+
29
-DECIMAL     {DIGIT}+
30
-EXPONENTIEL {DIGIT}+"^"{DIGIT}+
31
-ENTIER      {DECIMAL}|{EXPONENTIEL}
32
-OPERATION   {ADD}|{SUB}|{MUL}|{DIV}
33
-COMPARATEUR {EGAL}|{LT}|{GT}
34
-SEPARATOR   {SPACE}|{TAB}
35
-
36
-%%
37
-
38
-{ADD}           {printf("tADD ");}
39
-{SUB}           {printf("tSUB ");}
40
-{MUL}           {printf("tMUL ");}
41
-{DIV}           {printf("tDIV ");}
42
-
43
-{tPO}           {printf("tPO ");}
44
-{tPF}           {printf("tPF ");}
45
-{tAO}           {printf("tAO ");}
46
-{tAF}           {printf("tAF ");}
47
-
48
-{EOI}           {printf("tPV ");}
49
-{SEPARATOR}     {}
50
-{EOL}           {}
51
-{VIRGULE}       {printf("tVIRGULE ");}
52
-
53
-{EGAL}          {printf("tEGAL ");}
54
-{LT}            {printf("tLT ");}
55
-{GT}            {printf("tGT ");}
56
-
57
-{tMAIN}         {printf("tMAIN ");}
58
-{tINT}          {printf("tINT ");}
59
-{tPRINT}        {printf("tPRINT ");}
60
-{tRETURN}       {printf("tRETURN ");}
61
-
62
-{tOR}           {printf("tOR ");}
63
-{tAND}          {printf("tAND ");}
64
-
65
-{tIF}           {printf("tIF ");}
66
-{tELSE}         {printf("tELSE ");}
67
-{tWHILE}        {printf("tWHILE ");}
68
-
69
-{ENTIER}        {printf("tENTIER ");}
70
-{VARIABLE}      {printf("tVAR ");}
71
-
72
-%%
73
-int yywrap(void){
74
-    return 1;
75
-}
76
-int main(void){
77
-    yylex();
78
-}
79
-
80
-

Lex/Makefile → Makefile View File


+ 93
- 0
analyse_lexicale.lex View File

1
+ADD         "+"
2
+SUB         "-"
3
+MUL         "*"
4
+DIV         "/"
5
+tPO         "("
6
+tPF         ")"
7
+tAO         "{"
8
+tAF         "}"
9
+EOL         "\n"
10
+EOI         ";"
11
+SPACE       " "
12
+TAB         "\t"
13
+VIRGULE     ","
14
+AFFECTATION        "="
15
+EQUAL       "=="
16
+LT          "<"
17
+GT          ">"
18
+LTE          "<="
19
+GTE          ">="
20
+tINT        "int"
21
+tMAIN       "main"  
22
+tPRINT      "printf"
23
+tRETURN     "return"
24
+tIF         "if"
25
+tELSE       "else"
26
+tWHILE      "while"
27
+tNOT        "!"
28
+tAND        "&&"
29
+tOR         "||"
30
+tDIFF       "!="
31
+DIGIT       [0-9]
32
+VARIABLE    [A-Za-z0-9_]+
33
+CONST       "const"
34
+DECIMAL     {DIGIT}+
35
+EXPONENTIEL {DIGIT}+"^"{DIGIT}+
36
+ENTIER      {DECIMAL}|{EXPONENTIEL}
37
+OPERATION   {ADD}|{SUB}|{MUL}|{DIV}
38
+COMPARATEUR {EGAL}|{LT}|{GT}
39
+SEPARATOR   {SPACE}|{TAB}
40
+
41
+%%
42
+
43
+{ADD}           {return tADD ;}
44
+{SUB}           {return tSUB ;}
45
+{MUL}           {return tMUL ;}
46
+{DIV}           {return tDIV ;}
47
+
48
+{tPO}           {return tPO ;}
49
+{tPF}           {return tPF ;}
50
+{tAO}           {return tAO ;}
51
+{tAF}           {return tAF ;}
52
+
53
+{EOI}           {return tPV ;}
54
+{SEPARATOR}     {}
55
+{EOL}           {}
56
+{VIRGULE}       {return tVIRGULE ;}
57
+
58
+{AFFECTATION}   {return tAFFECTATION ;}
59
+
60
+{EQUAL}          {return tEGAL ;}
61
+{tDIFF}          {return tDIFF ;}
62
+{LT}            {return tLT ;}
63
+{GT}            {return tGT ;}
64
+{LTE}           {return tLTE ;}
65
+{GTE}           {return tGTE ;}
66
+{tNOT}           {return tNOT ;}
67
+
68
+
69
+{tMAIN}         {return tMAIN ;}
70
+{tINT}          {return tINT ;}
71
+{tPRINT}        {return tPRINT ;}
72
+{tRETURN}       {return tRETURN ;}
73
+
74
+{tOR}           {return tOR ;}
75
+{tAND}          {return tAND ;}
76
+
77
+{tIF}           {return tIF ;}
78
+{tELSE}         {return tELSE ;}
79
+{tWHILE}        {return tWHILE ;}
80
+
81
+{CONST}         {return tCONST ;}
82
+{ENTIER}        {return tENTIER ;}
83
+{VARIABLE}      {return tVAR ;}
84
+
85
+%%
86
+int yywrap(void){
87
+    return 1;
88
+}
89
+//int main(void){
90
+//    yylex();
91
+//}
92
+
93
+

+ 1452
- 0
analyse_syntaxique.output
File diff suppressed because it is too large
View File


+ 1543
- 0
analyse_syntaxique.tab.c
File diff suppressed because it is too large
View File


+ 104
- 0
analyse_syntaxique.tab.h View File

1
+/* A Bison parser, made by GNU Bison 3.0.4.  */
2
+
3
+/* Bison interface for Yacc-like parsers in C
4
+
5
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
6
+
7
+   This program is free software: you can redistribute it and/or modify
8
+   it under the terms of the GNU General Public License as published by
9
+   the Free Software Foundation, either version 3 of the License, or
10
+   (at your option) any later version.
11
+
12
+   This program is distributed in the hope that it will be useful,
13
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
+   GNU General Public License for more details.
16
+
17
+   You should have received a copy of the GNU General Public License
18
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
+
20
+/* As a special exception, you may create a larger work that contains
21
+   part or all of the Bison parser skeleton and distribute that work
22
+   under terms of your choice, so long as that work isn't itself a
23
+   parser generator using the skeleton or a modified version thereof
24
+   as a parser skeleton.  Alternatively, if you modify or redistribute
25
+   the parser skeleton itself, you may (at your option) remove this
26
+   special exception, which will cause the skeleton and the resulting
27
+   Bison output files to be licensed under the GNU General Public
28
+   License without this special exception.
29
+
30
+   This special exception was added by the Free Software Foundation in
31
+   version 2.2 of Bison.  */
32
+
33
+#ifndef YY_YY_ANALYSE_SYNTAXIQUE_TAB_H_INCLUDED
34
+# define YY_YY_ANALYSE_SYNTAXIQUE_TAB_H_INCLUDED
35
+/* Debug traces.  */
36
+#ifndef YYDEBUG
37
+# define YYDEBUG 1
38
+#endif
39
+#if YYDEBUG
40
+extern int yydebug;
41
+#endif
42
+
43
+/* Token type.  */
44
+#ifndef YYTOKENTYPE
45
+# define YYTOKENTYPE
46
+  enum yytokentype
47
+  {
48
+    tENTIER = 258,
49
+    tADD = 259,
50
+    tSUB = 260,
51
+    tMUL = 261,
52
+    tDIV = 262,
53
+    tPO = 263,
54
+    tPF = 264,
55
+    tAO = 265,
56
+    tAF = 266,
57
+    tERROR = 267,
58
+    tPV = 268,
59
+    tVIRGULE = 269,
60
+    tAFFECTATION = 270,
61
+    tEGAL = 271,
62
+    tDIFF = 272,
63
+    tLT = 273,
64
+    tGT = 274,
65
+    tGTE = 275,
66
+    tLTE = 276,
67
+    tMAIN = 277,
68
+    tINT = 278,
69
+    tPRINT = 279,
70
+    tRETURN = 280,
71
+    tOR = 281,
72
+    tAND = 282,
73
+    tIF = 283,
74
+    tELSE = 284,
75
+    tWHILE = 285,
76
+    tCONST = 286,
77
+    tVAR = 287,
78
+    tNOT = 288
79
+  };
80
+#endif
81
+
82
+/* Value type.  */
83
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
84
+
85
+union YYSTYPE
86
+{
87
+#line 1 "analyse_syntaxique.y" /* yacc.c:1909  */
88
+
89
+int nombre;
90
+
91
+#line 92 "analyse_syntaxique.tab.h" /* yacc.c:1909  */
92
+};
93
+
94
+typedef union YYSTYPE YYSTYPE;
95
+# define YYSTYPE_IS_TRIVIAL 1
96
+# define YYSTYPE_IS_DECLARED 1
97
+#endif
98
+
99
+
100
+extern YYSTYPE yylval;
101
+
102
+int yyparse (void);
103
+
104
+#endif /* !YY_YY_ANALYSE_SYNTAXIQUE_TAB_H_INCLUDED  */

+ 107
- 0
analyse_syntaxique.y View File

1
+%union {
2
+int nombre;
3
+}
4
+
5
+%token<nombre> tENTIER
6
+%token tADD
7
+%token tSUB
8
+%token tMUL
9
+%token tDIV
10
+
11
+%token tPO
12
+%token tPF
13
+%token tAO
14
+%token tAF
15
+
16
+%token tERROR
17
+
18
+%token tPV
19
+%token tVIRGULE
20
+%token tAFFECTATION
21
+%token tEGAL
22
+%token tDIFF
23
+%token tLT
24
+%token tGT
25
+%token tGTE
26
+%token tLTE
27
+%token tMAIN
28
+%token tINT
29
+%token tPRINT
30
+%token tRETURN
31
+%token tOR
32
+%token tAND
33
+%token tIF
34
+%token tELSE
35
+%token tWHILE
36
+%token tCONST
37
+%token tVAR
38
+%token tNOT
39
+
40
+%left tADD
41
+%left tSUB
42
+%right tEGAL
43
+
44
+%type<nombre> E
45
+%%
46
+
47
+C : Fonctions Main ;
48
+Fonctions : Fonction Fonctions | Fonction | ;
49
+
50
+Fonction : tINT tVAR tPO Params tPF Body ;
51
+
52
+Main : tINT tMAIN tPO tPF Body ;
53
+
54
+Params : | Param SuiteParams ;
55
+Param : tINT tVAR ;
56
+
57
+
58
+// Ps : P Ps | ;
59
+// P : tINT tID ttVIRGULE
60
+// Ps =>* tINT tID ttVIRGULE tINT tID ttVIRGULE
61
+// Ps => P Ps => P P Ps ...
62
+
63
+SuiteParams : tVIRGULE Param SuiteParams | ;
64
+
65
+Body : tAO Instructions tAF ;
66
+
67
+Instructions : Instruction Instructions | ;
68
+
69
+Instruction : Aff | If | While | tRETURN | Print | Decl | Invocation tPV ;
70
+
71
+Decl : Type Valeur SuiteDecl tPV;
72
+
73
+SuiteDecl: tVIRGULE Valeur SuiteDecl | ;
74
+
75
+Type : tINT | tCONST tINT ; 
76
+
77
+Valeur : tVAR | Affbis ;
78
+
79
+Affbis : tVAR tAFFECTATION E;
80
+
81
+Aff : Affbis tPV ;
82
+
83
+E : tENTIER | tVAR | E tADD E | E tMUL E | E tSUB E | E tDIV E | Invocation | tPO E tPF | tSUB E ;
84
+
85
+// E : tID tPlus tID | ...
86
+
87
+If : tIF tPO Cond tPF Body Else;
88
+
89
+Else : | tELSE Body |tELSE tIF tPO Cond tPF Body Else;
90
+
91
+While : tWHILE tPO Cond tPF Body ;
92
+
93
+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 ;
94
+
95
+Print : tPRINT tPO tVAR tPF tPV ;
96
+
97
+Invocation : tVAR tPO  Args  tPF ;
98
+
99
+Args : | Arg SuiteArgs ;
100
+
101
+Arg : tVAR ;
102
+
103
+SuiteArgs : tVIRGULE Arg SuiteArgs ;
104
+
105
+RETURN : tRETURN E tPV ;
106
+
107
+%%

Lex/lex.yy.c → lex.yy.c View File

351
 	(yy_hold_char) = *yy_cp; \
351
 	(yy_hold_char) = *yy_cp; \
352
 	*yy_cp = '\0'; \
352
 	*yy_cp = '\0'; \
353
 	(yy_c_buf_p) = yy_cp;
353
 	(yy_c_buf_p) = yy_cp;
354
-#define YY_NUM_RULES 25
355
-#define YY_END_OF_BUFFER 26
354
+#define YY_NUM_RULES 33
355
+#define YY_END_OF_BUFFER 34
356
 /* This struct is not used in this scanner,
356
 /* This struct is not used in this scanner,
357
    but its presence is necessary. */
357
    but its presence is necessary. */
358
 struct yy_trans_info
358
 struct yy_trans_info
360
 	flex_int32_t yy_verify;
360
 	flex_int32_t yy_verify;
361
 	flex_int32_t yy_nxt;
361
 	flex_int32_t yy_nxt;
362
 	};
362
 	};
363
-static const flex_int16_t yy_accept[49] =
363
+static const flex_int16_t yy_accept[70] =
364
     {   0,
364
     {   0,
365
-        0,    0,   26,   25,   23,   24,   25,    5,    6,    3,
366
-        1,   10,    2,    4,   12,    9,   13,   11,   14,   22,
367
-       22,   22,   22,   22,    7,   25,    8,   19,   12,   22,
368
-        0,   22,   20,   22,   22,   22,   18,   12,   22,   16,
369
-       22,   22,   21,   15,   22,   22,   17,    0
365
+        0,    0,   34,   33,   10,   11,   20,   33,    5,    6,
366
+        3,    1,   12,    2,    4,   31,    9,   16,   13,   17,
367
+       32,   32,   32,   32,   32,   32,   32,   32,    7,   33,
368
+        8,   15,   26,   31,   32,    0,   18,   14,   19,   32,
369
+       32,   27,   32,   32,   32,   32,   32,   25,   31,   32,
370
+       32,   22,   32,   32,   32,   32,   32,   28,   21,   32,
371
+       32,   32,   30,   32,   32,   29,   23,   24,    0
370
     } ;
372
     } ;
371
 
373
 
372
 static const YY_CHAR yy_ec[256] =
374
 static const YY_CHAR yy_ec[256] =
374
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
376
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
375
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
377
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
376
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
378
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
377
-        1,    4,    1,    1,    1,    1,    1,    5,    1,    6,
378
-        7,    8,    9,   10,   11,    1,   12,   13,   13,   13,
379
-       13,   13,   13,   13,   13,   13,   13,    1,   14,   15,
380
-       16,   17,    1,    1,   18,   18,   18,   18,   18,   18,
381
-       18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
382
-       18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
383
-        1,    1,    1,   19,   18,    1,   20,   18,   18,   18,
384
-
385
-       21,   22,   18,   18,   23,   18,   18,   24,   25,   26,
386
-       18,   27,   18,   28,   29,   30,   18,   18,   18,   18,
387
-       18,   18,   31,   32,   33,    1,    1,    1,    1,    1,
379
+        1,    4,    5,    1,    1,    1,    1,    6,    1,    7,
380
+        8,    9,   10,   11,   12,    1,   13,   14,   14,   14,
381
+       14,   14,   14,   14,   14,   14,   14,    1,   15,   16,
382
+       17,   18,    1,    1,   19,   19,   19,   19,   19,   19,
383
+       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
384
+       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
385
+        1,    1,    1,   20,   19,    1,   21,   19,   22,   19,
386
+
387
+       23,   24,   19,   25,   26,   19,   19,   27,   28,   29,
388
+       30,   31,   19,   32,   33,   34,   35,   19,   36,   19,
389
+       19,   19,   37,   38,   39,    1,    1,    1,    1,    1,
388
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
390
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
389
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
391
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
390
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
392
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
401
         1,    1,    1,    1,    1
403
         1,    1,    1,    1,    1
402
     } ;
404
     } ;
403
 
405
 
404
-static const YY_CHAR yy_meta[34] =
406
+static const YY_CHAR yy_meta[40] =
405
     {   0,
407
     {   0,
406
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
408
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
407
-        1,    1,    2,    1,    1,    1,    1,    2,    2,    2,
409
+        1,    1,    1,    2,    1,    1,    1,    1,    2,    2,
408
         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
410
         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
409
-        1,    1,    1
411
+        2,    2,    2,    2,    2,    2,    1,    1,    1
410
     } ;
412
     } ;
411
 
413
 
412
-static const flex_int16_t yy_base[50] =
414
+static const flex_int16_t yy_base[71] =
413
     {   0,
415
     {   0,
414
-        0,    0,   77,   78,   78,   78,   71,   78,   78,   78,
415
-       78,   78,   78,   78,   21,   78,   78,   78,   78,   56,
416
-       17,   16,   24,   18,   78,   42,   78,   78,   26,   54,
417
-       59,   28,   52,   29,   30,   31,   78,   57,   37,   50,
418
-       36,   41,   49,   47,   33,   42,   46,   78,   49
416
+        0,    0,  116,  117,  117,  117,   98,  108,  117,  117,
417
+      117,  117,  117,  117,  117,   26,  117,   96,   95,   94,
418
+       90,   21,   22,   23,   24,   28,   30,   34,  117,   71,
419
+      117,  117,  117,   41,   88,   93,  117,  117,  117,   36,
420
+       37,   86,   38,   42,   43,   44,   47,  117,   91,   46,
421
+       51,   84,   55,   56,   57,   60,   61,   83,   82,   62,
422
+       66,   68,   81,   69,   70,   80,   77,   74,  117,   81
419
     } ;
423
     } ;
420
 
424
 
421
-static const flex_int16_t yy_def[50] =
425
+static const flex_int16_t yy_def[71] =
422
     {   0,
426
     {   0,
423
-       48,    1,   48,   48,   48,   48,   48,   48,   48,   48,
424
-       48,   48,   48,   48,   49,   48,   48,   48,   48,   49,
425
-       49,   49,   49,   49,   48,   48,   48,   48,   49,   49,
426
-       48,   49,   49,   49,   49,   49,   48,   48,   49,   49,
427
-       49,   49,   49,   49,   49,   49,   49,    0,   48
427
+       69,    1,   69,   69,   69,   69,   69,   69,   69,   69,
428
+       69,   69,   69,   69,   69,   70,   69,   69,   69,   69,
429
+       70,   70,   70,   70,   70,   70,   70,   70,   69,   69,
430
+       69,   69,   69,   70,   70,   69,   69,   69,   69,   70,
431
+       70,   70,   70,   70,   70,   70,   70,   69,   69,   70,
432
+       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
433
+       70,   70,   70,   70,   70,   70,   70,   70,    0,   69
428
     } ;
434
     } ;
429
 
435
 
430
-static const flex_int16_t yy_nxt[112] =
436
+static const flex_int16_t yy_nxt[157] =
431
     {   0,
437
     {   0,
432
         4,    5,    6,    5,    7,    8,    9,   10,   11,   12,
438
         4,    5,    6,    5,    7,    8,    9,   10,   11,   12,
433
-       13,   14,   15,   16,   17,   18,   19,   20,    4,   20,
434
-       21,   20,   22,   20,   23,   20,   24,   20,   20,   20,
435
-       25,   26,   27,   29,   48,   48,   48,   33,   29,   31,
436
-       32,   34,   48,   35,   31,   36,   48,   48,   48,   48,
437
-       30,   48,   41,   42,   48,   48,   39,   43,   40,   48,
438
-       48,   44,   46,   47,   48,   48,   45,   48,   48,   38,
439
-       48,   38,   48,   37,   48,   28,   48,    3,   48,   48,
440
-       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
441
-       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
442
-
443
-       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
444
-       48
439
+       13,   14,   15,   16,   17,   18,   19,   20,   21,    4,
440
+       21,   22,   23,   21,   21,   24,   21,   25,   21,   21,
441
+       26,   27,   21,   21,   21,   28,   29,   30,   31,   34,
442
+       69,   69,   69,   69,   44,   36,   42,   69,   41,   69,
443
+       40,   43,   46,   69,   34,   69,   69,   69,   47,   45,
444
+       36,   69,   69,   69,   50,   69,   69,   53,   54,   51,
445
+       69,   52,   56,   58,   69,   69,   69,   55,   57,   69,
446
+       69,   69,   35,   59,   60,   69,   62,   69,   69,   69,
447
+       66,   61,   67,   69,   63,   64,   69,   65,   68,   69,
448
+
449
+       69,   69,   69,   69,   49,   69,   49,   69,   48,   69,
450
+       39,   38,   37,   33,   32,   69,    3,   69,   69,   69,
451
+       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
452
+       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
453
+       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
454
+       69,   69,   69,   69,   69,   69
445
     } ;
455
     } ;
446
 
456
 
447
-static const flex_int16_t yy_chk[112] =
457
+static const flex_int16_t yy_chk[157] =
448
     {   0,
458
     {   0,
449
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
459
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
450
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
460
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
451
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
461
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
452
-        1,    1,    1,   15,   22,   21,   24,   22,   29,   15,
453
-       21,   22,   23,   23,   29,   24,   32,   34,   35,   36,
454
-       49,   45,   35,   36,   41,   39,   32,   39,   34,   42,
455
-       46,   41,   45,   46,   47,   44,   42,   43,   40,   38,
456
-       33,   31,   30,   26,   20,    7,    3,   48,   48,   48,
457
-       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
458
-       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
459
-
460
-       48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
461
-       48
462
+        1,    1,    1,    1,    1,    1,    1,    1,    1,   16,
463
+       22,   23,   24,   25,   25,   16,   24,   26,   23,   27,
464
+       22,   24,   27,   28,   34,   40,   41,   43,   28,   26,
465
+       34,   44,   45,   46,   40,   50,   47,   44,   45,   41,
466
+       51,   43,   47,   51,   53,   54,   55,   46,   50,   56,
467
+       57,   60,   70,   53,   54,   61,   56,   62,   64,   65,
468
+       62,   55,   64,   68,   57,   60,   67,   61,   65,   66,
469
+
470
+       63,   59,   58,   52,   49,   42,   36,   35,   30,   21,
471
+       20,   19,   18,    8,    7,    3,   69,   69,   69,   69,
472
+       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
473
+       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
474
+       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
475
+       69,   69,   69,   69,   69,   69
462
     } ;
476
     } ;
463
 
477
 
464
 static yy_state_type yy_last_accepting_state;
478
 static yy_state_type yy_last_accepting_state;
476
 #define YY_RESTORE_YY_MORE_OFFSET
490
 #define YY_RESTORE_YY_MORE_OFFSET
477
 char *yytext;
491
 char *yytext;
478
 #line 1 "analyse_lexicale.lex"
492
 #line 1 "analyse_lexicale.lex"
479
-#line 480 "lex.yy.c"
493
+#line 494 "lex.yy.c"
480
 
494
 
481
 #define INITIAL 0
495
 #define INITIAL 0
482
 
496
 
693
 		}
707
 		}
694
 
708
 
695
 	{
709
 	{
696
-#line 35 "analyse_lexicale.lex"
710
+#line 41 "analyse_lexicale.lex"
697
 
711
 
698
 
712
 
699
-#line 700 "lex.yy.c"
713
+#line 714 "lex.yy.c"
700
 
714
 
701
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
715
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
702
 		{
716
 		{
723
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
737
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
724
 				{
738
 				{
725
 				yy_current_state = (int) yy_def[yy_current_state];
739
 				yy_current_state = (int) yy_def[yy_current_state];
726
-				if ( yy_current_state >= 49 )
740
+				if ( yy_current_state >= 70 )
727
 					yy_c = yy_meta[yy_c];
741
 					yy_c = yy_meta[yy_c];
728
 				}
742
 				}
729
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
743
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
730
 			++yy_cp;
744
 			++yy_cp;
731
 			}
745
 			}
732
-		while ( yy_base[yy_current_state] != 78 );
746
+		while ( yy_base[yy_current_state] != 117 );
733
 
747
 
734
 yy_find_action:
748
 yy_find_action:
735
 		yy_act = yy_accept[yy_current_state];
749
 		yy_act = yy_accept[yy_current_state];
755
 
769
 
756
 case 1:
770
 case 1:
757
 YY_RULE_SETUP
771
 YY_RULE_SETUP
758
-#line 37 "analyse_lexicale.lex"
759
-{printf("tADD");}
772
+#line 43 "analyse_lexicale.lex"
773
+{return tADD ;}
760
 	YY_BREAK
774
 	YY_BREAK
761
 case 2:
775
 case 2:
762
 YY_RULE_SETUP
776
 YY_RULE_SETUP
763
-#line 38 "analyse_lexicale.lex"
764
-{printf("tSUB");}
777
+#line 44 "analyse_lexicale.lex"
778
+{return tSUB ;}
765
 	YY_BREAK
779
 	YY_BREAK
766
 case 3:
780
 case 3:
767
 YY_RULE_SETUP
781
 YY_RULE_SETUP
768
-#line 39 "analyse_lexicale.lex"
769
-{printf("tMUL");}
782
+#line 45 "analyse_lexicale.lex"
783
+{return tMUL ;}
770
 	YY_BREAK
784
 	YY_BREAK
771
 case 4:
785
 case 4:
772
 YY_RULE_SETUP
786
 YY_RULE_SETUP
773
-#line 40 "analyse_lexicale.lex"
774
-{printf("tDIV");}
787
+#line 46 "analyse_lexicale.lex"
788
+{return tDIV ;}
775
 	YY_BREAK
789
 	YY_BREAK
776
 case 5:
790
 case 5:
777
 YY_RULE_SETUP
791
 YY_RULE_SETUP
778
-#line 41 "analyse_lexicale.lex"
779
-{printf("tPO");}
792
+#line 48 "analyse_lexicale.lex"
793
+{return tPO ;}
780
 	YY_BREAK
794
 	YY_BREAK
781
 case 6:
795
 case 6:
782
 YY_RULE_SETUP
796
 YY_RULE_SETUP
783
-#line 42 "analyse_lexicale.lex"
784
-{printf("tPF");}
797
+#line 49 "analyse_lexicale.lex"
798
+{return tPF ;}
785
 	YY_BREAK
799
 	YY_BREAK
786
 case 7:
800
 case 7:
787
 YY_RULE_SETUP
801
 YY_RULE_SETUP
788
-#line 43 "analyse_lexicale.lex"
789
-{printf("tAO");}
802
+#line 50 "analyse_lexicale.lex"
803
+{return tAO ;}
790
 	YY_BREAK
804
 	YY_BREAK
791
 case 8:
805
 case 8:
792
 YY_RULE_SETUP
806
 YY_RULE_SETUP
793
-#line 44 "analyse_lexicale.lex"
794
-{printf("tAF");}
807
+#line 51 "analyse_lexicale.lex"
808
+{return tAF ;}
795
 	YY_BREAK
809
 	YY_BREAK
796
 case 9:
810
 case 9:
797
 YY_RULE_SETUP
811
 YY_RULE_SETUP
798
-#line 45 "analyse_lexicale.lex"
799
-{printf("tPV");}
812
+#line 53 "analyse_lexicale.lex"
813
+{return tPV ;}
800
 	YY_BREAK
814
 	YY_BREAK
801
 case 10:
815
 case 10:
802
 YY_RULE_SETUP
816
 YY_RULE_SETUP
803
-#line 46 "analyse_lexicale.lex"
804
-{printf("tVIRGULE");}
817
+#line 54 "analyse_lexicale.lex"
818
+{}
805
 	YY_BREAK
819
 	YY_BREAK
806
 case 11:
820
 case 11:
821
+/* rule 11 can match eol */
807
 YY_RULE_SETUP
822
 YY_RULE_SETUP
808
-#line 47 "analyse_lexicale.lex"
809
-{printf("tEGAL");}
823
+#line 55 "analyse_lexicale.lex"
824
+{}
810
 	YY_BREAK
825
 	YY_BREAK
811
 case 12:
826
 case 12:
812
 YY_RULE_SETUP
827
 YY_RULE_SETUP
813
-#line 48 "analyse_lexicale.lex"
814
-{printf("tENTIER");}
828
+#line 56 "analyse_lexicale.lex"
829
+{return tVIRGULE ;}
815
 	YY_BREAK
830
 	YY_BREAK
816
 case 13:
831
 case 13:
817
 YY_RULE_SETUP
832
 YY_RULE_SETUP
818
-#line 49 "analyse_lexicale.lex"
819
-{printf("tLT");}
833
+#line 58 "analyse_lexicale.lex"
834
+{return tAFFECTATION ;}
820
 	YY_BREAK
835
 	YY_BREAK
821
 case 14:
836
 case 14:
822
 YY_RULE_SETUP
837
 YY_RULE_SETUP
823
-#line 50 "analyse_lexicale.lex"
824
-{printf("tGT");}
838
+#line 60 "analyse_lexicale.lex"
839
+{return tEGAL ;}
825
 	YY_BREAK
840
 	YY_BREAK
826
 case 15:
841
 case 15:
827
 YY_RULE_SETUP
842
 YY_RULE_SETUP
828
-#line 51 "analyse_lexicale.lex"
829
-{printf("tMAIN");}
843
+#line 61 "analyse_lexicale.lex"
844
+{return tDIFF ;}
830
 	YY_BREAK
845
 	YY_BREAK
831
 case 16:
846
 case 16:
832
 YY_RULE_SETUP
847
 YY_RULE_SETUP
833
-#line 52 "analyse_lexicale.lex"
834
-{printf("tINT");}
848
+#line 62 "analyse_lexicale.lex"
849
+{return tLT ;}
835
 	YY_BREAK
850
 	YY_BREAK
836
 case 17:
851
 case 17:
837
 YY_RULE_SETUP
852
 YY_RULE_SETUP
838
-#line 53 "analyse_lexicale.lex"
839
-{printf("tPRINT");}
853
+#line 63 "analyse_lexicale.lex"
854
+{return tGT ;}
840
 	YY_BREAK
855
 	YY_BREAK
841
 case 18:
856
 case 18:
842
 YY_RULE_SETUP
857
 YY_RULE_SETUP
843
-#line 54 "analyse_lexicale.lex"
844
-{printf("tOR");}
858
+#line 64 "analyse_lexicale.lex"
859
+{return tLTE ;}
845
 	YY_BREAK
860
 	YY_BREAK
846
 case 19:
861
 case 19:
847
 YY_RULE_SETUP
862
 YY_RULE_SETUP
848
-#line 55 "analyse_lexicale.lex"
849
-{printf("tAND");}
863
+#line 65 "analyse_lexicale.lex"
864
+{return tGTE ;}
850
 	YY_BREAK
865
 	YY_BREAK
851
 case 20:
866
 case 20:
852
 YY_RULE_SETUP
867
 YY_RULE_SETUP
853
-#line 56 "analyse_lexicale.lex"
854
-{printf("tIF");}
868
+#line 66 "analyse_lexicale.lex"
869
+{return tNOT ;}
855
 	YY_BREAK
870
 	YY_BREAK
856
 case 21:
871
 case 21:
857
 YY_RULE_SETUP
872
 YY_RULE_SETUP
858
-#line 57 "analyse_lexicale.lex"
859
-{printf("tELSE");}
873
+#line 69 "analyse_lexicale.lex"
874
+{return tMAIN ;}
860
 	YY_BREAK
875
 	YY_BREAK
861
 case 22:
876
 case 22:
862
 YY_RULE_SETUP
877
 YY_RULE_SETUP
863
-#line 58 "analyse_lexicale.lex"
864
-{printf("tVAR");}
878
+#line 70 "analyse_lexicale.lex"
879
+{return tINT ;}
865
 	YY_BREAK
880
 	YY_BREAK
866
 case 23:
881
 case 23:
867
 YY_RULE_SETUP
882
 YY_RULE_SETUP
868
-#line 59 "analyse_lexicale.lex"
869
-{}
883
+#line 71 "analyse_lexicale.lex"
884
+{return tPRINT ;}
870
 	YY_BREAK
885
 	YY_BREAK
871
 case 24:
886
 case 24:
872
-/* rule 24 can match eol */
873
 YY_RULE_SETUP
887
 YY_RULE_SETUP
874
-#line 60 "analyse_lexicale.lex"
875
-{}
888
+#line 72 "analyse_lexicale.lex"
889
+{return tRETURN ;}
876
 	YY_BREAK
890
 	YY_BREAK
877
 case 25:
891
 case 25:
878
 YY_RULE_SETUP
892
 YY_RULE_SETUP
879
-#line 61 "analyse_lexicale.lex"
893
+#line 74 "analyse_lexicale.lex"
894
+{return tOR ;}
895
+	YY_BREAK
896
+case 26:
897
+YY_RULE_SETUP
898
+#line 75 "analyse_lexicale.lex"
899
+{return tAND ;}
900
+	YY_BREAK
901
+case 27:
902
+YY_RULE_SETUP
903
+#line 77 "analyse_lexicale.lex"
904
+{return tIF ;}
905
+	YY_BREAK
906
+case 28:
907
+YY_RULE_SETUP
908
+#line 78 "analyse_lexicale.lex"
909
+{return tELSE ;}
910
+	YY_BREAK
911
+case 29:
912
+YY_RULE_SETUP
913
+#line 79 "analyse_lexicale.lex"
914
+{return tWHILE ;}
915
+	YY_BREAK
916
+case 30:
917
+YY_RULE_SETUP
918
+#line 81 "analyse_lexicale.lex"
919
+{return tCONST ;}
920
+	YY_BREAK
921
+case 31:
922
+YY_RULE_SETUP
923
+#line 82 "analyse_lexicale.lex"
924
+{return tENTIER ;}
925
+	YY_BREAK
926
+case 32:
927
+YY_RULE_SETUP
928
+#line 83 "analyse_lexicale.lex"
929
+{return tVAR ;}
930
+	YY_BREAK
931
+case 33:
932
+YY_RULE_SETUP
933
+#line 85 "analyse_lexicale.lex"
880
 ECHO;
934
 ECHO;
881
 	YY_BREAK
935
 	YY_BREAK
882
-#line 883 "lex.yy.c"
936
+#line 937 "lex.yy.c"
883
 case YY_STATE_EOF(INITIAL):
937
 case YY_STATE_EOF(INITIAL):
884
 	yyterminate();
938
 	yyterminate();
885
 
939
 
1176
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1230
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1177
 			{
1231
 			{
1178
 			yy_current_state = (int) yy_def[yy_current_state];
1232
 			yy_current_state = (int) yy_def[yy_current_state];
1179
-			if ( yy_current_state >= 49 )
1233
+			if ( yy_current_state >= 70 )
1180
 				yy_c = yy_meta[yy_c];
1234
 				yy_c = yy_meta[yy_c];
1181
 			}
1235
 			}
1182
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
1236
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
1204
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1258
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1205
 		{
1259
 		{
1206
 		yy_current_state = (int) yy_def[yy_current_state];
1260
 		yy_current_state = (int) yy_def[yy_current_state];
1207
-		if ( yy_current_state >= 49 )
1261
+		if ( yy_current_state >= 70 )
1208
 			yy_c = yy_meta[yy_c];
1262
 			yy_c = yy_meta[yy_c];
1209
 		}
1263
 		}
1210
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
1264
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
1211
-	yy_is_jam = (yy_current_state == 48);
1265
+	yy_is_jam = (yy_current_state == 69);
1212
 
1266
 
1213
 		return yy_is_jam ? 0 : yy_current_state;
1267
 		return yy_is_jam ? 0 : yy_current_state;
1214
 }
1268
 }
1884
 
1938
 
1885
 #define YYTABLES_NAME "yytables"
1939
 #define YYTABLES_NAME "yytables"
1886
 
1940
 
1887
-#line 61 "analyse_lexicale.lex"
1941
+#line 85 "analyse_lexicale.lex"
1888
 
1942
 
1889
 int yywrap(void){
1943
 int yywrap(void){
1890
     return 1;
1944
     return 1;
1891
 }
1945
 }
1892
-int main(void){
1893
-    yylex();
1894
-}
1946
+//int main(void){
1947
+//    yylex();
1948
+//}
1895
 
1949
 
1896
 
1950
 
1897
 
1951
 

+ 31
- 0
script.sh View File

1
+bison -d -t analyse_syntaxique.y -v
2
+flex analyse_lexicale.lex 
3
+gcc *.c -ly
4
+echo "
5
+    int fonction1(int toto){
6
+    toto = toto + 1 ;
7
+    return toto;
8
+    }
9
+
10
+    int fonction2(){
11
+        int i = 0;
12
+        while (i <= 2){
13
+            printf(i);
14
+            i = i +1 ;
15
+        }
16
+        return i;
17
+    }
18
+
19
+    int main(){
20
+        const int toto = 1, mimi, lolo = 6;
21
+        int tata = 5, lala;
22
+
23
+        if (tata == 5){
24
+            fonction1(lolo);
25
+        } else if (toto == 1){
26
+            fonction2();
27
+        }
28
+
29
+        return 1;
30
+    }
31
+" | ./a.out

+ 27
- 0
test View File

1
+
2
+int fonction1(int toto){
3
+    toto = toto + 1 ;
4
+    return toto;
5
+}
6
+
7
+int fonction2(){
8
+    int i = 0;
9
+    while (i <= 2){
10
+        print(i);
11
+        i = i +1 ;
12
+    }
13
+    return i;
14
+}
15
+
16
+int main(){
17
+    const int toto = 1, mimi, lolo = 6;
18
+    int tata = 5, lala;
19
+
20
+    if (tata == 5){
21
+        fonction(lolo);
22
+    } else if (toto == 1){
23
+        fonction2();
24
+    }
25
+
26
+    return 1;
27
+}

Loading…
Cancel
Save