Move the SCOL for var_assigns and var_decl to the statement rule

This commit is contained in:
Marvin Kaiser
2020-01-14 10:39:46 +01:00
parent f6818b6983
commit 1980e1ba8c
2 changed files with 17 additions and 6 deletions

View File

@@ -20,11 +20,14 @@ braced_block
: OBRK statement+ CBRK
;
// Only the first child of a rule alternative will be visited!
// i.e. SCOL won't be visited, but thats unneccesary anyway
statement
: print
| if_statement
| variable_declaration
| variable_assignment
| variable_declaration SCOL
| variable_assignment SCOL
| return_statement
| whileLoop
| doWhileLoop
@@ -39,11 +42,11 @@ if_statement
;
variable_declaration
: LET IDENT (EQUAL expression)? SCOL
: LET IDENT (EQUAL expression)?
;
variable_assignment
: IDENT EQUAL expression SCOL
: IDENT EQUAL expression
;
return_statement

View File

@@ -23,12 +23,20 @@ public class ContextAnalysis extends KlangBaseVisitor<Node> {
return new Program(funcs, expression);
}
@Override
public Node visitStatement(KlangParser.StatementContext ctx) {
// The first child is the proper context we need to visit
// The second child is either null or just a SCOL!
return this.visit(ctx.getChild(0));
}
@Override
public Node visitBraced_block(KlangParser.Braced_blockContext ctx) {
Statement[] statements = new Statement[ctx.statement().size()];
for (int i = 0; i < ctx.statement().size(); i++) {
Node currentStatement = this.visit(ctx.statement(i));
var stmtCtx = ctx.statement(i);
Node currentStatement = this.visit(stmtCtx);
statements[i] = (Statement) currentStatement;
}