aboutsummaryrefslogtreecommitdiff
path: root/src/tpc.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/tpc.y')
-rw-r--r--src/tpc.y215
1 files changed, 124 insertions, 91 deletions
diff --git a/src/tpc.y b/src/tpc.y
index 31452fe..a44a9aa 100644
--- a/src/tpc.y
+++ b/src/tpc.y
@@ -12,103 +12,136 @@ void yyerror(char *);
12 12
13%} 13%}
14 14
15%token CARACTERE NUM IDENT ORDER EQ ADDSUB DIVSTAR 15%token CARACTERE NUM IDENT
16%token OR AND CONST IF WHILE RETURN VOID TYPE 16%token ADDSUB DIVSTAR
17%token ORDER EQ OR AND
18%token IF WHILE RETURN
19%token CONST VOID TYPE
20%token PRINT READC READE
17 21
18%left ',' 22%left ','
19%precedence ')' 23%precedence ')'
20%precedence ELSE 24%precedence ELSE
21 25
22%% 26%%
23Prog : DeclConsts DeclVars DeclFoncts 27Prog:
24 ; 28 DeclConsts DeclVars DeclFoncts
25DeclConsts : DeclConsts CONST ListConst ';' 29 ;
26 | 30DeclConsts:
27 ; 31 DeclConsts CONST ListConst ';'
28ListConst : ListConst ',' IDENT '=' Litteral 32 |
29 | IDENT '=' Litteral 33 ;
30 ; 34ListConst:
31Litteral : NombreSigne 35 ListConst ',' IDENT '=' Litteral
32 | CARACTERE 36 | IDENT '=' Litteral
33 ; 37 ;
34NombreSigne : NUM 38Litteral:
35 | ADDSUB NUM 39 NombreSigne
36 ; 40 | CARACTERE
37DeclVars : DeclVars TYPE Declarateurs ';' 41 ;
38 | 42NombreSigne:
39 ; 43 NUM
40Declarateurs : Declarateurs ',' Declarateur 44 | ADDSUB NUM
41 | Declarateur 45 ;
42 ; 46DeclVars:
43Declarateur : IDENT 47 DeclVars TYPE Declarateurs ';'
44 | IDENT '[' NUM ']' 48 |
45 ; 49 ;
46DeclFoncts : DeclFoncts DeclFonct 50Declarateurs:
47 | DeclFonct 51 Declarateurs ',' Declarateur
48 ; 52 | Declarateur
49DeclFonct : EnTeteFonct Corps 53 ;
50 ; 54Declarateur:
51EnTeteFonct : TYPE IDENT '(' Parametres ')' 55 IDENT
52 | VOID IDENT '(' Parametres ')' 56 | IDENT '[' NUM ']'
53 ; 57 ;
54Parametres : VOID 58DeclFoncts:
55 | ListTypVar 59 DeclFoncts DeclFonct
56 ; 60 | DeclFonct
57ListTypVar : ListTypVar ',' TYPE IDENT 61 ;
58 | TYPE IDENT 62DeclFonct:
59 ; 63 EnTeteFonct Corps
60Corps : '{' DeclConsts DeclVars SuiteInstr '}' 64 ;
61 ; 65EnTeteFonct:
62SuiteInstr : SuiteInstr Instr 66 TYPE IDENT '(' Parametres ')'
63 | 67 | VOID IDENT '(' Parametres ')'
64 ; 68 ;
65Instr : Exp ';' 69Parametres:
66 | RETURN Exp ';' 70 VOID
67 | RETURN ';' 71 | ListTypVar
68 | ';' 72 ;
69 | IF '(' Exp ')' Instr 73ListTypVar:
70 | IF '(' Exp ')' Instr ELSE Instr 74 ListTypVar ',' TYPE IDENT
71 | WHILE '(' Exp ')' Instr 75 | TYPE IDENT
72 | '{' SuiteInstr '}' 76 ;
73 ; 77Corps:
74Exp : LValue '=' Exp 78 '{' DeclConsts DeclVars SuiteInstr '}'
75 | EB 79 ;
76 ; 80SuiteInstr:
77EB : EB OR TB 81 SuiteInstr Instr
78 | TB 82 | ;
79 ; 83Instr:
80TB : TB AND FB 84 Exp ';'
81 | FB 85 | ';'
82 ; 86 | RETURN Exp ';'
83FB : FB EQ M 87 | RETURN ';'
84 | M 88 | READE '(' IDENT ')' ';'
85 ; 89 | READC '(' IDENT ')' ';'
86M : M ORDER E 90 | PRINT '(' Exp ')' ';'
87 | E 91 | IF '(' Exp ')' Instr
88 ; 92 | IF '(' Exp ')' Instr ELSE Instr
89E : E ADDSUB T 93 | WHILE '(' Exp ')' Instr
90 | T 94 | '{' SuiteInstr '}'
91 ; 95 ;
92T : T DIVSTAR F 96Exp:
93 | F 97 LValue '=' Exp
94 ; 98 | EB
95F : ADDSUB F 99 ;
96 | '!' F 100EB:
97 | '(' Exp ')' 101 EB OR TB
98 | LValue 102 | TB
99 | NUM 103 ;
100 | CARACTERE 104TB:
101 | IDENT '(' Arguments ')' 105 TB AND FB
102 ; 106 | FB
103LValue : IDENT 107 ;
104 | IDENT '[' Exp ']' 108FB:
105 ; 109 FB EQ M
106Arguments : ListExp 110 | M
107 | 111 ;
108 ; 112M:
109ListExp : ListExp ',' ListExp 113 M ORDER E
110 | Exp 114 | E
111 ; 115 ;
116E:
117 E ADDSUB T
118 | T
119 ;
120T:
121 T DIVSTAR F
122 | F
123 ;
124F:
125 ADDSUB F
126 | '!' F
127 | '(' Exp ')'
128 | LValue
129 | NUM
130 | CARACTERE
131 | IDENT '(' Arguments ')'
132 ;
133LValue:
134 IDENT
135 | IDENT '[' Exp ']'
136 ;
137Arguments:
138 ListExp
139 |
140 ;
141ListExp:
142 ListExp ',' Exp
143 | Exp
144 ;
112%% 145%%
113 146
114void yyerror(char *msg){ 147void yyerror(char *msg){