@@ -97,16 +97,22 @@ MainClass : CLASS IDENTIFIER LEFTANGLEBRACKET PUBLIC STATIC VOID MAIN LEFTPARENT
9797;
9898ClassDeclaration : CLASS IDENTIFIER Extension LEFTANGLEBRACKET VarDeclaration MethodDeclaration RIGHTANGLEBRACKET
9999 {
100- $$ .ast=NewNode(" ClassDeclaration :" , nil).
100+ $$ .ast= NewNode(" <NewClassDeclaration> :" , nil).
101101 AddKid (NewNode(" " ,$1 .token)).
102102 AddKid(NewNode(" " ,$2 .token)).
103103 AddKid($3 .ast).
104104 AddKid(NewNode(" {" ,$4 .token)).
105105 AddKid($5 .ast).
106106 AddKid($6 .ast).
107107 AddKid(NewNode(" }" ,$7 .token))
108+
109+ }
110+ | ClassDeclaration ClassDeclaration
111+ {
112+ $$ .ast=NewNode(" <ExtraClassDeclarations>:" , nil).
113+ AddKid ($1 .ast).
114+ AddKid($2 .ast)
108115 }
109- | ClassDeclaration CLASS IDENTIFIER Extension LEFTANGLEBRACKET VarDeclaration MethodDeclaration RIGHTANGLEBRACKET
110116 ;
111117Extension: EXTENDS IDENTIFIER
112118 {
@@ -117,22 +123,23 @@ Extension: EXTENDS IDENTIFIER
117123 }
118124 | ;
119125
120- VarDeclaration : Type IDENTIFIER SEMICOLON VarDeclaration
126+ VarDeclaration : VarDeclaration VarDeclaration
121127 {
122- $$ .ast=NewNode(" " ,nil).
123- AddKid ($1 .ast).
124- AddKid(NewNode(" " ,$2 .token)).
125- AddKid(NewNode(" " ,$3 .token)).
126- AddKid($4 .ast)
128+ $$ .ast=NewNode(" <Variable definitions>:" ,nil).
129+ AddKid ($1 .ast).
130+ AddKid($2 .ast)
127131 }
132+
128133 | Type IDENTIFIER SEMICOLON
129134 {
130135 $$ .ast=NewNode(" " ,nil).
131136 AddKid ($1 .ast).
132137 AddKid(NewNode(" " ,$2 .token)).
133138 AddKid(NewNode(" " ,$3 .token))
134139 }
140+ | { $$ .ast=nil }
135141 ;
142+
136143Statement : LEFTANGLEBRACKET Statement RIGHTANGLEBRACKET
137144 {
138145 $$ .ast=NewNode(" bracketed statement" ,nil).
@@ -141,39 +148,220 @@ Statement : LEFTANGLEBRACKET Statement RIGHTANGLEBRACKET
141148 AddKid(NewNode(" }" ,$3 .token))
142149 }
143150 | IF LEFTPARENTHESIS Expression RIGHTPARENTHESIS Statement ELSE Statement
151+ {
152+ $$ .ast=NewNode(" <If block>" ,nil).
153+ AddKid (NewNode(" " ,$1 .token)).
154+ AddKid(NewNode(" (" ,$2 .token)).
155+ AddKid($3 .ast).
156+ AddKid(NewNode(" )" ,$4 .token)).
157+ AddKid($5 .ast).
158+ AddKid(NewNode(" " ,$6 .token)).
159+ AddKid($7 .ast)
160+ }
144161 | WHILE LEFTPARENTHESIS Expression RIGHTPARENTHESIS Statement
162+ {
163+ $$ .ast=NewNode(" <While block>" ,nil).
164+ AddKid (NewNode(" " ,$1 .token)).
165+ AddKid(NewNode(" " ,$2 .token)).
166+ AddKid($3 .ast).
167+ AddKid(NewNode(" )" ,$4 .token)).
168+ AddKid($4 .ast)
169+
170+ }
145171 | SYSTEMOUTPRINTLN LEFTPARENTHESIS Expression RIGHTPARENTHESIS SEMICOLON
172+ {
173+ $$ .ast=NewNode(" <Print Statement>" ,nil).
174+ AddKid (NewNode(" " ,$1 .token)).
175+ AddKid(NewNode(" " ,$2 .token)).
176+ AddKid($3 .ast).
177+ AddKid(NewNode(" )" ,$4 .token)).
178+ AddKid(NewNode(" " ,$5 .token))
179+ }
146180 | IDENTIFIER EQUAL Expression SEMICOLON
181+ {
182+ $$ .ast=NewNode(" <Affectation>" ,nil).
183+ AddKid (NewNode(" " ,$1 .token)).
184+ AddKid(NewNode(" =" ,$2 .token)).
185+ AddKid($3 .ast).
186+ AddKid(NewNode(" " ,$4 .token))
187+ }
147188 | IDENTIFIER LEFTBRACKET Expression RIGHTBRACKET EQUAL Expression SEMICOLON
189+ {
190+ $$ .ast=NewNode(" <Array Affectation>" ,nil).
191+ AddKid (NewNode(" " ,$1 .token)).
192+ AddKid(NewNode(" [" ,$2 .token)).
193+ AddKid($3 .ast).
194+ AddKid(NewNode(" ]" ,$4 .token)).
195+ AddKid(NewNode(" =" ,$5 .token)).
196+ AddKid($6 .ast).
197+ AddKid(NewNode(" " ,$7 .token))
198+ }
199+ | Statement Statement
200+ {
201+ $$ .ast=NewNode(" <BlockOfStatements>:" ,nil).
202+ AddKid ($1 .ast).
203+ AddKid($2 .ast)
204+ }
148205 | {$$ .ast=NewNode(" empty statement content" ,nil) } ;
149206Type: INT LEFTBRACKET RIGHTBRACKET { $$ .ast=NewNode(" int[]" ,$1 .token)}
150207 | BOOLEAN {$$ .ast=NewNode(" " ,$1 .token)}
151208 | INT {$$ .ast=NewNode(" " ,$1 .token)}
152209 | IDENTIFIER {$$ .ast=NewNode(" " ,$1 .token)} ;
153210MethodTypeDeclaration:
154211 | Type IDENTIFIER
155- | Type IDENTIFIER COMMA MethodTypeDeclaration ;
212+ {
213+ $$ .ast=NewNode(" " ,nil).
214+ AddKid ($1 .ast).
215+ AddKid(NewNode(" " ,$2 .token))
216+ }
217+ | Type IDENTIFIER COMMA MethodTypeDeclaration
218+ {
219+ $$ .ast = NewNode(" <Method input type>:" ,nil).
220+ AddKid ($1 .ast).
221+ AddKid(NewNode(" " ,$2 .token)).
222+ AddKid(NewNode(" " ,$3 .token)).
223+ AddKid($4 .ast)
224+ }
225+ ;
226+
156227MethodDeclaration : PUBLIC Type IDENTIFIER LEFTPARENTHESIS MethodTypeDeclaration RIGHTPARENTHESIS LEFTANGLEBRACKET VarDeclaration Statement RETURN Expression SEMICOLON RIGHTANGLEBRACKET
157- | PUBLIC Type IDENTIFIER LEFTPARENTHESIS MethodTypeDeclaration RIGHTPARENTHESIS LEFTANGLEBRACKET VarDeclaration Statement RETURN Expression SEMICOLON RIGHTANGLEBRACKET MethodDeclaration
158- | ;
228+ {
229+ $$ .ast=NewNode(" <MethodDeclaration>:" ,nil).
230+ AddKid (NewNode(" " ,$1 .token)).
231+ AddKid($2 .ast).
232+ AddKid(NewNode(" " ,$3 .token)).
233+ AddKid(NewNode(" (" ,$4 .token)).
234+ AddKid($5 .ast).
235+ AddKid(NewNode(" )" ,$6 .token)).
236+ AddKid(NewNode(" {" ,$7 .token)).
237+ AddKid($8 .ast).
238+ AddKid($9 .ast).
239+ AddKid(NewNode(" " ,$10 .token)).
240+ AddKid($11 .ast).
241+ AddKid(NewNode(" ;" ,$12 .token)).
242+ AddKid(NewNode(" }" ,$13 .token))
243+ }
244+ | MethodDeclaration MethodDeclaration
245+ {
246+ $$ .ast=NewNode(" <MethodDeclarations>:" ,nil).
247+ AddKid ($1 .ast).
248+ AddKid($2 .ast)
249+
250+ }
251+ ;
252+
159253Expression : IDENTIFIER
254+ {
255+ $$ .ast=NewNode(" " ,$1 .token)
256+ }
160257 | Expression LOGICALAND Expression
258+ {
259+ $$ .ast=NewNode(" &&" ,$2 .token).
260+ AddKid ($1 .ast).
261+ AddKid($3 .ast)
262+ }
161263 | Expression LESS Expression
264+ {
265+ $$ .ast=NewNode(" <" ,$2 .token).
266+ AddKid ($1 .ast).
267+ AddKid($3 .ast)
268+ }
162269 | Expression PLUS Expression
270+ {
271+ $$ .ast=NewNode(" +" ,$2 .token).
272+ AddKid ($1 .ast).
273+ AddKid($3 .ast)
274+ }
163275 | Expression MINUS Expression
276+ {
277+ $$ .ast=NewNode(" +" ,$2 .token).
278+ AddKid ($1 .ast).
279+ AddKid($3 .ast)
280+ }
164281 | Expression ASTERIX Expression
282+ {
283+ $$ .ast=NewNode(" *" ,$2 .token).
284+ AddKid ($1 .ast).
285+ AddKid($3 .ast)
286+ }
165287 | INTEGER_LITERAL
288+ {
289+ $$ .ast=NewNode(" " ,$1 .token)
290+ }
166291 | BOOLEAN_LITERAL
292+ {
293+ $$ .ast=NewNode(" " ,$1 .token)
294+ }
167295 | Expression LEFTBRACKET Expression RIGHTBRACKET
296+ {
297+ $$ .ast=NewNode(" " ,nil).
298+ AddKid ($1 .ast).
299+ AddKid(NewNode(" [" ,$2 .token)).
300+ AddKid($3 .ast).
301+ AddKid(NewNode(" ]" ,$4 .token))
302+ }
168303 | Expression PERIOD LENGTH
304+ {
305+ $$ .ast=NewNode(" <PeriodAccess>:" ,nil).
306+ AddKid ($1 .ast).
307+ AddKid(NewNode(" ." ,$2 .token)).
308+ AddKid(NewNode(" " ,$3 .token))
309+ }
169310 | Expression PERIOD IDENTIFIER LEFTPARENTHESIS MethodExpressionSignature RIGHTPARENTHESIS
311+ {
312+ $$ .ast=NewNode(" <AccessedFunction>" , nil).
313+ AddKid ($1 .ast).
314+ AddKid(NewNode(" ." ,$2 .token)).
315+ AddKid(NewNode(" " ,$3 .token)).
316+ AddKid(NewNode(" (" ,$4 .token)).
317+ AddKid($5 .ast).
318+ AddKid(NewNode(" )" ,$6 .token))
319+ }
170320 | THIS
321+ {
322+ $$ .ast=NewNode(" " ,$1 .token)
323+ }
171324 | NEW INT LEFTBRACKET Expression RIGHTBRACKET
325+ {
326+ $$ .ast=NewNode(" " ,nil).
327+ AddKid (NewNode(" " ,$1 .token)).
328+ AddKid(NewNode(" " ,$2 .token)).
329+ AddKid(NewNode(" [" ,$3 .token)).
330+ AddKid($4 .ast).
331+ AddKid(NewNode(" ]" ,$5 .token))
332+ }
172333 | NEW IDENTIFIER LEFTPARENTHESIS RIGHTPARENTHESIS
334+ {
335+ $$ .ast=NewNode(" <Instantiation>:" ,nil).
336+ AddKid (NewNode(" " ,$1 .token)).
337+ AddKid(NewNode(" " ,$2 .token)).
338+ AddKid(NewNode(" (" ,$3 .token)).
339+ AddKid(NewNode(" )" ,$4 .token))
340+ }
173341 | BANG Expression
342+ {
343+ $$ .ast=NewNode(" <NOT!>:" ,nil).
344+ AddKid (NewNode(" !" ,$1 .token)).
345+ AddKid($2 .ast)
346+ }
174347 | LEFTPARENTHESIS Expression RIGHTPARENTHESIS
348+ {
349+ $$ .ast=NewNode(" <ParenthesisedExpression>" ,nil).
350+ AddKid (NewNode(" (" ,$1 .token)).
351+ AddKid($2 .ast).
352+ AddKid(NewNode(" )" ,$3 .token))
353+ }
175354 ;
176355MethodExpressionSignature : Expression
356+ {
357+ $$ .ast=$1 .ast
358+ }
177359 | MethodExpressionSignature COMMA Expression
360+ {
361+ $$ .ast=NewNode(" <MultiParametersMethodSignature>" ,nil).
362+ AddKid ($1 .ast).
363+ AddKid(NewNode(" ." ,$2 .token)).
364+ AddKid($3 .ast)
365+ }
178366 ;
179367%%
0 commit comments