Add Print as Statement

This commit is contained in:
Boolean-true 2024-05-20 22:38:44 +02:00
parent 4eb90f72ba
commit 7d4aa26cbb
15 changed files with 694 additions and 589 deletions

View File

@ -31,18 +31,19 @@ stmt : ifCall #If
| localVar ';' #LocalVarDec | localVar ';' #LocalVarDec
| localVarWithInitialization ';' #LocalVarDecWithInitialization | localVarWithInitialization ';' #LocalVarDecWithInitialization
| assign ';' #Assignment | assign ';' #Assignment
| 'print' '(' expr ')' ';' #Print
| stmtexpr ';' #StatementExpressionstmt | stmtexpr ';' #StatementExpressionstmt
; ;
stmtexpr : methCall #MethodCall stmtexpr : methCall #MethodCall
| newCall #New | newCall #New
; ;
expr : expr binaryOp expr #BinaryOperation expr : expr binaryOp expr #BinaryOperation
| unaryOp expr #UnaryOperation | unaryOp expr #UnaryOperation
| literal #Constant | literal #Constant
| '(' expr ')' #Expression | '(' expr ')' #Expression
| fieldVarAccess #Identifier | fieldVarAccess #Identifier
| stmtexpr #StatementExpressionexpr | stmtexpr #StatementExpressionexpr
; ;

View File

@ -7,7 +7,6 @@ import de.maishai.ast.records.*;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
public class StatementGenerator extends DecafBaseVisitor<List<Statement>> { public class StatementGenerator extends DecafBaseVisitor<List<Statement>> {
@ -90,6 +89,11 @@ public class StatementGenerator extends DecafBaseVisitor<List<Statement>> {
return List.of(generateAssign(ctx.assign())); return List.of(generateAssign(ctx.assign()));
} }
@Override
public List<Statement> visitPrint(DecafParser.PrintContext ctx) {
return List.of(new Print(new ExpressionGenerator().visit(ctx.expr())));
}
private Assignment generateAssign(DecafParser.AssignContext ctx) { private Assignment generateAssign(DecafParser.AssignContext ctx) {
FieldVarAccess fieldVarAccess = generateField(ctx.fieldVarAccess()); FieldVarAccess fieldVarAccess = generateField(ctx.fieldVarAccess());
Expression expr = resolveFancyAssign(ctx.assignSign(), fieldVarAccess, new ExpressionGenerator().visit(ctx.expr())); Expression expr = resolveFancyAssign(ctx.assignSign(), fieldVarAccess, new ExpressionGenerator().visit(ctx.expr()));

File diff suppressed because one or more lines are too long

View File

@ -15,43 +15,44 @@ T__13=14
T__14=15 T__14=15
T__15=16 T__15=16
T__16=17 T__16=17
PUBLIC=18 T__17=18
NEW=19 PUBLIC=19
NULL=20 NEW=20
THIS=21 NULL=21
IF=22 THIS=22
ELSE=23 IF=23
SUB=24 ELSE=24
ADD=25 SUB=25
MUL=26 ADD=26
DIV=27 MUL=27
MOD=28 DIV=28
GT=29 MOD=29
LT=30 GT=30
GE=31 LT=31
LE=32 GE=32
EQ=33 LE=33
NE=34 EQ=34
AND=35 NE=35
OR=36 AND=36
ASSIGN=37 OR=37
ADD_ASSIGN=38 ASSIGN=38
SUB_ASSIGN=39 ADD_ASSIGN=39
MUL_ASSIGN=40 SUB_ASSIGN=40
MOD_ASSIGN=41 MUL_ASSIGN=41
DIV_ASSIGN=42 MOD_ASSIGN=42
NOT=43 DIV_ASSIGN=43
INT=44 NOT=44
BOOL=45 INT=45
VOID=46 BOOL=46
CHAR=47 VOID=47
BOOLEANLITERAL=48 CHAR=48
CHARLITERAL=49 BOOLEANLITERAL=49
IDENTIFIER=50 CHARLITERAL=50
NUMBER=51 IDENTIFIER=51
WS=52 NUMBER=52
COMMENT=53 WS=53
LINE_COMMENT=54 COMMENT=54
LINE_COMMENT=55
'class'=1 'class'=1
'{'=2 '{'=2
'}'=3 '}'=3
@ -68,34 +69,35 @@ LINE_COMMENT=54
'do'=14 'do'=14
'break'=15 'break'=15
'continue'=16 'continue'=16
'.'=17 'print'=17
'public'=18 '.'=18
'new'=19 'public'=19
'null'=20 'new'=20
'this'=21 'null'=21
'if'=22 'this'=22
'else'=23 'if'=23
'-'=24 'else'=24
'+'=25 '-'=25
'*'=26 '+'=26
'/'=27 '*'=27
'%'=28 '/'=28
'>'=29 '%'=29
'<'=30 '>'=30
'>='=31 '<'=31
'<='=32 '>='=32
'=='=33 '<='=33
'!='=34 '=='=34
'&&'=35 '!='=35
'||'=36 '&&'=36
'='=37 '||'=37
'+='=38 '='=38
'-='=39 '+='=39
'*='=40 '-='=40
'%='=41 '*='=41
'/='=42 '%='=42
'!'=43 '/='=43
'int'=44 '!'=44
'boolean'=45 'int'=45
'void'=46 'boolean'=46
'char'=47 'void'=47
'char'=48

View File

@ -1,4 +1,4 @@
// Generated from C:/Users/laure/Documents/Dev/Compilerbau/Projekt/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1 // Generated from C:/dev/Uni/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1
package de.maishai.antlr; package de.maishai.antlr;
import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.ParserRuleContext;
@ -288,6 +288,18 @@ public class DecafBaseListener implements DecafListener {
* <p>The default implementation does nothing.</p> * <p>The default implementation does nothing.</p>
*/ */
@Override public void exitAssignment(DecafParser.AssignmentContext ctx) { } @Override public void exitAssignment(DecafParser.AssignmentContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterPrint(DecafParser.PrintContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitPrint(DecafParser.PrintContext ctx) { }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *

View File

@ -1,4 +1,4 @@
// Generated from C:/Users/laure/Documents/Dev/Compilerbau/Projekt/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1 // Generated from C:/dev/Uni/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1
package de.maishai.antlr; package de.maishai.antlr;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
@ -173,6 +173,13 @@ public class DecafBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
* {@link #visitChildren} on {@code ctx}.</p> * {@link #visitChildren} on {@code ctx}.</p>
*/ */
@Override public T visitAssignment(DecafParser.AssignmentContext ctx) { return visitChildren(ctx); } @Override public T visitAssignment(DecafParser.AssignmentContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitPrint(DecafParser.PrintContext ctx) { return visitChildren(ctx); }
/** /**
* {@inheritDoc} * {@inheritDoc}
* *

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
// Generated from C:/Users/laure/Documents/Dev/Compilerbau/Projekt/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1 // Generated from C:/dev/Uni/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1
package de.maishai.antlr; package de.maishai.antlr;
import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStream;
@ -19,11 +19,12 @@ public class DecafLexer extends Lexer {
public static final int public static final int
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9, T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
PUBLIC=18, NEW=19, NULL=20, THIS=21, IF=22, ELSE=23, SUB=24, ADD=25, MUL=26, T__17=18, PUBLIC=19, NEW=20, NULL=21, THIS=22, IF=23, ELSE=24, SUB=25,
DIV=27, MOD=28, GT=29, LT=30, GE=31, LE=32, EQ=33, NE=34, AND=35, OR=36, ADD=26, MUL=27, DIV=28, MOD=29, GT=30, LT=31, GE=32, LE=33, EQ=34, NE=35,
ASSIGN=37, ADD_ASSIGN=38, SUB_ASSIGN=39, MUL_ASSIGN=40, MOD_ASSIGN=41, AND=36, OR=37, ASSIGN=38, ADD_ASSIGN=39, SUB_ASSIGN=40, MUL_ASSIGN=41,
DIV_ASSIGN=42, NOT=43, INT=44, BOOL=45, VOID=46, CHAR=47, BOOLEANLITERAL=48, MOD_ASSIGN=42, DIV_ASSIGN=43, NOT=44, INT=45, BOOL=46, VOID=47, CHAR=48,
CHARLITERAL=49, IDENTIFIER=50, NUMBER=51, WS=52, COMMENT=53, LINE_COMMENT=54; BOOLEANLITERAL=49, CHARLITERAL=50, IDENTIFIER=51, NUMBER=52, WS=53, COMMENT=54,
LINE_COMMENT=55;
public static String[] channelNames = { public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN" "DEFAULT_TOKEN_CHANNEL", "HIDDEN"
}; };
@ -36,11 +37,11 @@ public class DecafLexer extends Lexer {
return new String[] { return new String[] {
"T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8",
"T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16",
"PUBLIC", "NEW", "NULL", "THIS", "IF", "ELSE", "SUB", "ADD", "MUL", "DIV", "T__17", "PUBLIC", "NEW", "NULL", "THIS", "IF", "ELSE", "SUB", "ADD",
"MOD", "GT", "LT", "GE", "LE", "EQ", "NE", "AND", "OR", "ASSIGN", "ADD_ASSIGN", "MUL", "DIV", "MOD", "GT", "LT", "GE", "LE", "EQ", "NE", "AND", "OR",
"SUB_ASSIGN", "MUL_ASSIGN", "MOD_ASSIGN", "DIV_ASSIGN", "NOT", "INT", "ASSIGN", "ADD_ASSIGN", "SUB_ASSIGN", "MUL_ASSIGN", "MOD_ASSIGN", "DIV_ASSIGN",
"BOOL", "VOID", "CHAR", "BOOLEANLITERAL", "CHARLITERAL", "IDENTIFIER", "NOT", "INT", "BOOL", "VOID", "CHAR", "BOOLEANLITERAL", "CHARLITERAL",
"NUMBER", "WS", "COMMENT", "LINE_COMMENT" "IDENTIFIER", "NUMBER", "WS", "COMMENT", "LINE_COMMENT"
}; };
} }
public static final String[] ruleNames = makeRuleNames(); public static final String[] ruleNames = makeRuleNames();
@ -49,17 +50,17 @@ public class DecafLexer extends Lexer {
return new String[] { return new String[] {
null, "'class'", "'{'", "'}'", "';'", "'('", "')'", "'static'", "'main'", null, "'class'", "'{'", "'}'", "';'", "'('", "')'", "'static'", "'main'",
"'String[] args'", "','", "'return'", "'for'", "'while'", "'do'", "'break'", "'String[] args'", "','", "'return'", "'for'", "'while'", "'do'", "'break'",
"'continue'", "'.'", "'public'", "'new'", "'null'", "'this'", "'if'", "'continue'", "'print'", "'.'", "'public'", "'new'", "'null'", "'this'",
"'else'", "'-'", "'+'", "'*'", "'/'", "'%'", "'>'", "'<'", "'>='", "'<='", "'if'", "'else'", "'-'", "'+'", "'*'", "'/'", "'%'", "'>'", "'<'", "'>='",
"'=='", "'!='", "'&&'", "'||'", "'='", "'+='", "'-='", "'*='", "'%='", "'<='", "'=='", "'!='", "'&&'", "'||'", "'='", "'+='", "'-='", "'*='",
"'/='", "'!'", "'int'", "'boolean'", "'void'", "'char'" "'%='", "'/='", "'!'", "'int'", "'boolean'", "'void'", "'char'"
}; };
} }
private static final String[] _LITERAL_NAMES = makeLiteralNames(); private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() { private static String[] makeSymbolicNames() {
return new String[] { return new String[] {
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, "PUBLIC", "NEW", "NULL", "THIS", null, null, null, null, null, null, null, "PUBLIC", "NEW", "NULL", "THIS",
"IF", "ELSE", "SUB", "ADD", "MUL", "DIV", "MOD", "GT", "LT", "GE", "LE", "IF", "ELSE", "SUB", "ADD", "MUL", "DIV", "MOD", "GT", "LT", "GE", "LE",
"EQ", "NE", "AND", "OR", "ASSIGN", "ADD_ASSIGN", "SUB_ASSIGN", "MUL_ASSIGN", "EQ", "NE", "AND", "OR", "ASSIGN", "ADD_ASSIGN", "SUB_ASSIGN", "MUL_ASSIGN",
"MOD_ASSIGN", "DIV_ASSIGN", "NOT", "INT", "BOOL", "VOID", "CHAR", "BOOLEANLITERAL", "MOD_ASSIGN", "DIV_ASSIGN", "NOT", "INT", "BOOL", "VOID", "CHAR", "BOOLEANLITERAL",
@ -125,7 +126,7 @@ public class DecafLexer extends Lexer {
public ATN getATN() { return _ATN; } public ATN getATN() { return _ATN; }
public static final String _serializedATN = public static final String _serializedATN =
"\u0004\u00006\u0164\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ "\u0004\u00007\u016c\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
"\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+
"\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+
"\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+
@ -140,204 +141,209 @@ public class DecafLexer extends Lexer {
"&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+ "&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+
"+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+ "+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+
"0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+ "0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+
"5\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+ "5\u00026\u00076\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+
"\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003"+ "\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+
"\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006"+ "\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001"+
"\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007"+ "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+
"\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001"+ "\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+
"\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+
"\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001"+
"\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+ "\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b"+
"\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001"+ "\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001"+
"\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ "\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+
"\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+ "\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+
"\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001"+ "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010"+
"\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+ "\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011"+
"\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001"+ "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+
"\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ "\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014"+
"\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001"+ "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015"+
"\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001"+ "\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016"+
"\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001"+ "\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018"+
"\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001"+ "\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001b"+
"\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ "\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001e"+
" \u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001#\u0001"+ "\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 "+
"#\u0001#\u0001$\u0001$\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001"+ "\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001"+
"\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001*\u0001"+ "$\u0001$\u0001$\u0001%\u0001%\u0001&\u0001&\u0001&\u0001\'\u0001\'\u0001"+
"*\u0001+\u0001+\u0001+\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001"+ "\'\u0001(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001"+
",\u0001,\u0001,\u0001-\u0001-\u0001-\u0001-\u0001-\u0001.\u0001.\u0001"+ "+\u0001+\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001-\u0001-\u0001"+
".\u0001.\u0001.\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001/\u0001"+ "-\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001.\u0001.\u0001/\u0001"+
"/\u0001/\u0003/\u012e\b/\u00010\u00010\u00010\u00010\u00011\u00041\u0135"+ "/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+
"\b1\u000b1\f1\u0136\u00011\u00051\u013a\b1\n1\f1\u013d\t1\u00041\u013f"+ "0\u00010\u00010\u00030\u0136\b0\u00011\u00011\u00011\u00011\u00012\u0004"+
"\b1\u000b1\f1\u0140\u00012\u00042\u0144\b2\u000b2\f2\u0145\u00013\u0001"+ "2\u013d\b2\u000b2\f2\u013e\u00012\u00052\u0142\b2\n2\f2\u0145\t2\u0004"+
"3\u00013\u00013\u00014\u00014\u00014\u00014\u00054\u0150\b4\n4\f4\u0153"+ "2\u0147\b2\u000b2\f2\u0148\u00013\u00043\u014c\b3\u000b3\f3\u014d\u0001"+
"\t4\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u00015\u00015\u0005"+ "4\u00014\u00014\u00014\u00015\u00015\u00015\u00015\u00055\u0158\b5\n5"+
"5\u015e\b5\n5\f5\u0161\t5\u00015\u00015\u0001\u0151\u00006\u0001\u0001"+ "\f5\u015b\t5\u00015\u00015\u00015\u00015\u00015\u00016\u00016\u00016\u0001"+
"\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f"+ "6\u00056\u0166\b6\n6\f6\u0169\t6\u00016\u00016\u0001\u0159\u00007\u0001"+
"\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f"+ "\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007"+
"\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017/\u0018"+ "\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e\u001d"+
"1\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O("+ "\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017/"+
"Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6\u0001\u0000\u0005\u0001\u0000\'\'\u0002\u0000"+ "\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K"+
"AZaz\u0001\u000009\u0003\u0000\t\n\r\r \u0002\u0000\n\n\r\r\u016a\u0000"+ "&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7\u0001\u0000\u0005\u0001\u0000\'\'"+
"\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000"+ "\u0002\u0000AZaz\u0001\u000009\u0003\u0000\t\n\r\r \u0002\u0000\n\n\r"+
"\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000"+ "\r\u0172\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000"+
"\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r"+ "\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011"+ "\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015"+ "\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019"+ "\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000\u001d"+ "\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000!\u0001"+ "\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001\u0000\u0000"+ "\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000"+
"\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000\u0000\u0000"+ "!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001"+
"\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000\u0000/"+ "\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u00003\u0001\u0000"+ "\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000\u0000\u0000"+ "\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u00003"+
"\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000\u0000="+ "\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A\u0001\u0000"+ "\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000\u0000\u0000"+ "\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A"+
"\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000\u0000K"+ "\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O\u0001\u0000"+ "\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000\u0000\u0000"+ "\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O"+
"\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000\u0000Y"+ "\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]\u0001\u0000"+ "\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000\u0000\u0000"+ "\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]"+
"\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000\u0000g"+ "\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000k\u0001\u0000"+ "\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0001m\u0001\u0000\u0000\u0000\u0003s\u0001\u0000\u0000\u0000"+ "\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000k"+
"\u0005u\u0001\u0000\u0000\u0000\u0007w\u0001\u0000\u0000\u0000\ty\u0001"+ "\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0001o\u0001\u0000"+
"\u0000\u0000\u0000\u000b{\u0001\u0000\u0000\u0000\r}\u0001\u0000\u0000"+ "\u0000\u0000\u0003u\u0001\u0000\u0000\u0000\u0005w\u0001\u0000\u0000\u0000"+
"\u0000\u000f\u0084\u0001\u0000\u0000\u0000\u0011\u0089\u0001\u0000\u0000"+ "\u0007y\u0001\u0000\u0000\u0000\t{\u0001\u0000\u0000\u0000\u000b}\u0001"+
"\u0000\u0013\u0097\u0001\u0000\u0000\u0000\u0015\u0099\u0001\u0000\u0000"+ "\u0000\u0000\u0000\r\u007f\u0001\u0000\u0000\u0000\u000f\u0086\u0001\u0000"+
"\u0000\u0017\u00a0\u0001\u0000\u0000\u0000\u0019\u00a4\u0001\u0000\u0000"+ "\u0000\u0000\u0011\u008b\u0001\u0000\u0000\u0000\u0013\u0099\u0001\u0000"+
"\u0000\u001b\u00aa\u0001\u0000\u0000\u0000\u001d\u00ad\u0001\u0000\u0000"+ "\u0000\u0000\u0015\u009b\u0001\u0000\u0000\u0000\u0017\u00a2\u0001\u0000"+
"\u0000\u001f\u00b3\u0001\u0000\u0000\u0000!\u00bc\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0019\u00a6\u0001\u0000\u0000\u0000\u001b\u00ac\u0001\u0000"+
"#\u00be\u0001\u0000\u0000\u0000%\u00c5\u0001\u0000\u0000\u0000\'\u00c9"+ "\u0000\u0000\u001d\u00af\u0001\u0000\u0000\u0000\u001f\u00b5\u0001\u0000"+
"\u0001\u0000\u0000\u0000)\u00ce\u0001\u0000\u0000\u0000+\u00d3\u0001\u0000"+ "\u0000\u0000!\u00be\u0001\u0000\u0000\u0000#\u00c4\u0001\u0000\u0000\u0000"+
"\u0000\u0000-\u00d6\u0001\u0000\u0000\u0000/\u00db\u0001\u0000\u0000\u0000"+ "%\u00c6\u0001\u0000\u0000\u0000\'\u00cd\u0001\u0000\u0000\u0000)\u00d1"+
"1\u00dd\u0001\u0000\u0000\u00003\u00df\u0001\u0000\u0000\u00005\u00e1"+ "\u0001\u0000\u0000\u0000+\u00d6\u0001\u0000\u0000\u0000-\u00db\u0001\u0000"+
"\u0001\u0000\u0000\u00007\u00e3\u0001\u0000\u0000\u00009\u00e5\u0001\u0000"+ "\u0000\u0000/\u00de\u0001\u0000\u0000\u00001\u00e3\u0001\u0000\u0000\u0000"+
"\u0000\u0000;\u00e7\u0001\u0000\u0000\u0000=\u00e9\u0001\u0000\u0000\u0000"+ "3\u00e5\u0001\u0000\u0000\u00005\u00e7\u0001\u0000\u0000\u00007\u00e9"+
"?\u00ec\u0001\u0000\u0000\u0000A\u00ef\u0001\u0000\u0000\u0000C\u00f2"+ "\u0001\u0000\u0000\u00009\u00eb\u0001\u0000\u0000\u0000;\u00ed\u0001\u0000"+
"\u0001\u0000\u0000\u0000E\u00f5\u0001\u0000\u0000\u0000G\u00f8\u0001\u0000"+ "\u0000\u0000=\u00ef\u0001\u0000\u0000\u0000?\u00f1\u0001\u0000\u0000\u0000"+
"\u0000\u0000I\u00fb\u0001\u0000\u0000\u0000K\u00fd\u0001\u0000\u0000\u0000"+ "A\u00f4\u0001\u0000\u0000\u0000C\u00f7\u0001\u0000\u0000\u0000E\u00fa"+
"M\u0100\u0001\u0000\u0000\u0000O\u0103\u0001\u0000\u0000\u0000Q\u0106"+ "\u0001\u0000\u0000\u0000G\u00fd\u0001\u0000\u0000\u0000I\u0100\u0001\u0000"+
"\u0001\u0000\u0000\u0000S\u0109\u0001\u0000\u0000\u0000U\u010c\u0001\u0000"+ "\u0000\u0000K\u0103\u0001\u0000\u0000\u0000M\u0105\u0001\u0000\u0000\u0000"+
"\u0000\u0000W\u010e\u0001\u0000\u0000\u0000Y\u0112\u0001\u0000\u0000\u0000"+ "O\u0108\u0001\u0000\u0000\u0000Q\u010b\u0001\u0000\u0000\u0000S\u010e"+
"[\u011a\u0001\u0000\u0000\u0000]\u011f\u0001\u0000\u0000\u0000_\u012d"+ "\u0001\u0000\u0000\u0000U\u0111\u0001\u0000\u0000\u0000W\u0114\u0001\u0000"+
"\u0001\u0000\u0000\u0000a\u012f\u0001\u0000\u0000\u0000c\u013e\u0001\u0000"+ "\u0000\u0000Y\u0116\u0001\u0000\u0000\u0000[\u011a\u0001\u0000\u0000\u0000"+
"\u0000\u0000e\u0143\u0001\u0000\u0000\u0000g\u0147\u0001\u0000\u0000\u0000"+ "]\u0122\u0001\u0000\u0000\u0000_\u0127\u0001\u0000\u0000\u0000a\u0135"+
"i\u014b\u0001\u0000\u0000\u0000k\u0159\u0001\u0000\u0000\u0000mn\u0005"+ "\u0001\u0000\u0000\u0000c\u0137\u0001\u0000\u0000\u0000e\u0146\u0001\u0000"+
"c\u0000\u0000no\u0005l\u0000\u0000op\u0005a\u0000\u0000pq\u0005s\u0000"+ "\u0000\u0000g\u014b\u0001\u0000\u0000\u0000i\u014f\u0001\u0000\u0000\u0000"+
"\u0000qr\u0005s\u0000\u0000r\u0002\u0001\u0000\u0000\u0000st\u0005{\u0000"+ "k\u0153\u0001\u0000\u0000\u0000m\u0161\u0001\u0000\u0000\u0000op\u0005"+
"\u0000t\u0004\u0001\u0000\u0000\u0000uv\u0005}\u0000\u0000v\u0006\u0001"+ "c\u0000\u0000pq\u0005l\u0000\u0000qr\u0005a\u0000\u0000rs\u0005s\u0000"+
"\u0000\u0000\u0000wx\u0005;\u0000\u0000x\b\u0001\u0000\u0000\u0000yz\u0005"+ "\u0000st\u0005s\u0000\u0000t\u0002\u0001\u0000\u0000\u0000uv\u0005{\u0000"+
"(\u0000\u0000z\n\u0001\u0000\u0000\u0000{|\u0005)\u0000\u0000|\f\u0001"+ "\u0000v\u0004\u0001\u0000\u0000\u0000wx\u0005}\u0000\u0000x\u0006\u0001"+
"\u0000\u0000\u0000}~\u0005s\u0000\u0000~\u007f\u0005t\u0000\u0000\u007f"+ "\u0000\u0000\u0000yz\u0005;\u0000\u0000z\b\u0001\u0000\u0000\u0000{|\u0005"+
"\u0080\u0005a\u0000\u0000\u0080\u0081\u0005t\u0000\u0000\u0081\u0082\u0005"+ "(\u0000\u0000|\n\u0001\u0000\u0000\u0000}~\u0005)\u0000\u0000~\f\u0001"+
"i\u0000\u0000\u0082\u0083\u0005c\u0000\u0000\u0083\u000e\u0001\u0000\u0000"+ "\u0000\u0000\u0000\u007f\u0080\u0005s\u0000\u0000\u0080\u0081\u0005t\u0000"+
"\u0000\u0084\u0085\u0005m\u0000\u0000\u0085\u0086\u0005a\u0000\u0000\u0086"+ "\u0000\u0081\u0082\u0005a\u0000\u0000\u0082\u0083\u0005t\u0000\u0000\u0083"+
"\u0087\u0005i\u0000\u0000\u0087\u0088\u0005n\u0000\u0000\u0088\u0010\u0001"+ "\u0084\u0005i\u0000\u0000\u0084\u0085\u0005c\u0000\u0000\u0085\u000e\u0001"+
"\u0000\u0000\u0000\u0089\u008a\u0005S\u0000\u0000\u008a\u008b\u0005t\u0000"+ "\u0000\u0000\u0000\u0086\u0087\u0005m\u0000\u0000\u0087\u0088\u0005a\u0000"+
"\u0000\u008b\u008c\u0005r\u0000\u0000\u008c\u008d\u0005i\u0000\u0000\u008d"+ "\u0000\u0088\u0089\u0005i\u0000\u0000\u0089\u008a\u0005n\u0000\u0000\u008a"+
"\u008e\u0005n\u0000\u0000\u008e\u008f\u0005g\u0000\u0000\u008f\u0090\u0005"+ "\u0010\u0001\u0000\u0000\u0000\u008b\u008c\u0005S\u0000\u0000\u008c\u008d"+
"[\u0000\u0000\u0090\u0091\u0005]\u0000\u0000\u0091\u0092\u0005 \u0000"+ "\u0005t\u0000\u0000\u008d\u008e\u0005r\u0000\u0000\u008e\u008f\u0005i"+
"\u0000\u0092\u0093\u0005a\u0000\u0000\u0093\u0094\u0005r\u0000\u0000\u0094"+ "\u0000\u0000\u008f\u0090\u0005n\u0000\u0000\u0090\u0091\u0005g\u0000\u0000"+
"\u0095\u0005g\u0000\u0000\u0095\u0096\u0005s\u0000\u0000\u0096\u0012\u0001"+ "\u0091\u0092\u0005[\u0000\u0000\u0092\u0093\u0005]\u0000\u0000\u0093\u0094"+
"\u0000\u0000\u0000\u0097\u0098\u0005,\u0000\u0000\u0098\u0014\u0001\u0000"+ "\u0005 \u0000\u0000\u0094\u0095\u0005a\u0000\u0000\u0095\u0096\u0005r"+
"\u0000\u0000\u0099\u009a\u0005r\u0000\u0000\u009a\u009b\u0005e\u0000\u0000"+ "\u0000\u0000\u0096\u0097\u0005g\u0000\u0000\u0097\u0098\u0005s\u0000\u0000"+
"\u009b\u009c\u0005t\u0000\u0000\u009c\u009d\u0005u\u0000\u0000\u009d\u009e"+ "\u0098\u0012\u0001\u0000\u0000\u0000\u0099\u009a\u0005,\u0000\u0000\u009a"+
"\u0005r\u0000\u0000\u009e\u009f\u0005n\u0000\u0000\u009f\u0016\u0001\u0000"+ "\u0014\u0001\u0000\u0000\u0000\u009b\u009c\u0005r\u0000\u0000\u009c\u009d"+
"\u0000\u0000\u00a0\u00a1\u0005f\u0000\u0000\u00a1\u00a2\u0005o\u0000\u0000"+ "\u0005e\u0000\u0000\u009d\u009e\u0005t\u0000\u0000\u009e\u009f\u0005u"+
"\u00a2\u00a3\u0005r\u0000\u0000\u00a3\u0018\u0001\u0000\u0000\u0000\u00a4"+ "\u0000\u0000\u009f\u00a0\u0005r\u0000\u0000\u00a0\u00a1\u0005n\u0000\u0000"+
"\u00a5\u0005w\u0000\u0000\u00a5\u00a6\u0005h\u0000\u0000\u00a6\u00a7\u0005"+ "\u00a1\u0016\u0001\u0000\u0000\u0000\u00a2\u00a3\u0005f\u0000\u0000\u00a3"+
"i\u0000\u0000\u00a7\u00a8\u0005l\u0000\u0000\u00a8\u00a9\u0005e\u0000"+ "\u00a4\u0005o\u0000\u0000\u00a4\u00a5\u0005r\u0000\u0000\u00a5\u0018\u0001"+
"\u0000\u00a9\u001a\u0001\u0000\u0000\u0000\u00aa\u00ab\u0005d\u0000\u0000"+ "\u0000\u0000\u0000\u00a6\u00a7\u0005w\u0000\u0000\u00a7\u00a8\u0005h\u0000"+
"\u00ab\u00ac\u0005o\u0000\u0000\u00ac\u001c\u0001\u0000\u0000\u0000\u00ad"+ "\u0000\u00a8\u00a9\u0005i\u0000\u0000\u00a9\u00aa\u0005l\u0000\u0000\u00aa"+
"\u00ae\u0005b\u0000\u0000\u00ae\u00af\u0005r\u0000\u0000\u00af\u00b0\u0005"+ "\u00ab\u0005e\u0000\u0000\u00ab\u001a\u0001\u0000\u0000\u0000\u00ac\u00ad"+
"e\u0000\u0000\u00b0\u00b1\u0005a\u0000\u0000\u00b1\u00b2\u0005k\u0000"+ "\u0005d\u0000\u0000\u00ad\u00ae\u0005o\u0000\u0000\u00ae\u001c\u0001\u0000"+
"\u0000\u00b2\u001e\u0001\u0000\u0000\u0000\u00b3\u00b4\u0005c\u0000\u0000"+ "\u0000\u0000\u00af\u00b0\u0005b\u0000\u0000\u00b0\u00b1\u0005r\u0000\u0000"+
"\u00b4\u00b5\u0005o\u0000\u0000\u00b5\u00b6\u0005n\u0000\u0000\u00b6\u00b7"+ "\u00b1\u00b2\u0005e\u0000\u0000\u00b2\u00b3\u0005a\u0000\u0000\u00b3\u00b4"+
"\u0005t\u0000\u0000\u00b7\u00b8\u0005i\u0000\u0000\u00b8\u00b9\u0005n"+ "\u0005k\u0000\u0000\u00b4\u001e\u0001\u0000\u0000\u0000\u00b5\u00b6\u0005"+
"\u0000\u0000\u00b9\u00ba\u0005u\u0000\u0000\u00ba\u00bb\u0005e\u0000\u0000"+ "c\u0000\u0000\u00b6\u00b7\u0005o\u0000\u0000\u00b7\u00b8\u0005n\u0000"+
"\u00bb \u0001\u0000\u0000\u0000\u00bc\u00bd\u0005.\u0000\u0000\u00bd\""+ "\u0000\u00b8\u00b9\u0005t\u0000\u0000\u00b9\u00ba\u0005i\u0000\u0000\u00ba"+
"\u0001\u0000\u0000\u0000\u00be\u00bf\u0005p\u0000\u0000\u00bf\u00c0\u0005"+ "\u00bb\u0005n\u0000\u0000\u00bb\u00bc\u0005u\u0000\u0000\u00bc\u00bd\u0005"+
"u\u0000\u0000\u00c0\u00c1\u0005b\u0000\u0000\u00c1\u00c2\u0005l\u0000"+ "e\u0000\u0000\u00bd \u0001\u0000\u0000\u0000\u00be\u00bf\u0005p\u0000"+
"\u0000\u00c2\u00c3\u0005i\u0000\u0000\u00c3\u00c4\u0005c\u0000\u0000\u00c4"+ "\u0000\u00bf\u00c0\u0005r\u0000\u0000\u00c0\u00c1\u0005i\u0000\u0000\u00c1"+
"$\u0001\u0000\u0000\u0000\u00c5\u00c6\u0005n\u0000\u0000\u00c6\u00c7\u0005"+ "\u00c2\u0005n\u0000\u0000\u00c2\u00c3\u0005t\u0000\u0000\u00c3\"\u0001"+
"e\u0000\u0000\u00c7\u00c8\u0005w\u0000\u0000\u00c8&\u0001\u0000\u0000"+ "\u0000\u0000\u0000\u00c4\u00c5\u0005.\u0000\u0000\u00c5$\u0001\u0000\u0000"+
"\u0000\u00c9\u00ca\u0005n\u0000\u0000\u00ca\u00cb\u0005u\u0000\u0000\u00cb"+ "\u0000\u00c6\u00c7\u0005p\u0000\u0000\u00c7\u00c8\u0005u\u0000\u0000\u00c8"+
"\u00cc\u0005l\u0000\u0000\u00cc\u00cd\u0005l\u0000\u0000\u00cd(\u0001"+ "\u00c9\u0005b\u0000\u0000\u00c9\u00ca\u0005l\u0000\u0000\u00ca\u00cb\u0005"+
"\u0000\u0000\u0000\u00ce\u00cf\u0005t\u0000\u0000\u00cf\u00d0\u0005h\u0000"+ "i\u0000\u0000\u00cb\u00cc\u0005c\u0000\u0000\u00cc&\u0001\u0000\u0000"+
"\u0000\u00d0\u00d1\u0005i\u0000\u0000\u00d1\u00d2\u0005s\u0000\u0000\u00d2"+ "\u0000\u00cd\u00ce\u0005n\u0000\u0000\u00ce\u00cf\u0005e\u0000\u0000\u00cf"+
"*\u0001\u0000\u0000\u0000\u00d3\u00d4\u0005i\u0000\u0000\u00d4\u00d5\u0005"+ "\u00d0\u0005w\u0000\u0000\u00d0(\u0001\u0000\u0000\u0000\u00d1\u00d2\u0005"+
"f\u0000\u0000\u00d5,\u0001\u0000\u0000\u0000\u00d6\u00d7\u0005e\u0000"+ "n\u0000\u0000\u00d2\u00d3\u0005u\u0000\u0000\u00d3\u00d4\u0005l\u0000"+
"\u0000\u00d7\u00d8\u0005l\u0000\u0000\u00d8\u00d9\u0005s\u0000\u0000\u00d9"+ "\u0000\u00d4\u00d5\u0005l\u0000\u0000\u00d5*\u0001\u0000\u0000\u0000\u00d6"+
"\u00da\u0005e\u0000\u0000\u00da.\u0001\u0000\u0000\u0000\u00db\u00dc\u0005"+ "\u00d7\u0005t\u0000\u0000\u00d7\u00d8\u0005h\u0000\u0000\u00d8\u00d9\u0005"+
"-\u0000\u0000\u00dc0\u0001\u0000\u0000\u0000\u00dd\u00de\u0005+\u0000"+ "i\u0000\u0000\u00d9\u00da\u0005s\u0000\u0000\u00da,\u0001\u0000\u0000"+
"\u0000\u00de2\u0001\u0000\u0000\u0000\u00df\u00e0\u0005*\u0000\u0000\u00e0"+ "\u0000\u00db\u00dc\u0005i\u0000\u0000\u00dc\u00dd\u0005f\u0000\u0000\u00dd"+
"4\u0001\u0000\u0000\u0000\u00e1\u00e2\u0005/\u0000\u0000\u00e26\u0001"+ ".\u0001\u0000\u0000\u0000\u00de\u00df\u0005e\u0000\u0000\u00df\u00e0\u0005"+
"\u0000\u0000\u0000\u00e3\u00e4\u0005%\u0000\u0000\u00e48\u0001\u0000\u0000"+ "l\u0000\u0000\u00e0\u00e1\u0005s\u0000\u0000\u00e1\u00e2\u0005e\u0000"+
"\u0000\u00e5\u00e6\u0005>\u0000\u0000\u00e6:\u0001\u0000\u0000\u0000\u00e7"+ "\u0000\u00e20\u0001\u0000\u0000\u0000\u00e3\u00e4\u0005-\u0000\u0000\u00e4"+
"\u00e8\u0005<\u0000\u0000\u00e8<\u0001\u0000\u0000\u0000\u00e9\u00ea\u0005"+ "2\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005+\u0000\u0000\u00e64\u0001"+
">\u0000\u0000\u00ea\u00eb\u0005=\u0000\u0000\u00eb>\u0001\u0000\u0000"+ "\u0000\u0000\u0000\u00e7\u00e8\u0005*\u0000\u0000\u00e86\u0001\u0000\u0000"+
"\u0000\u00ec\u00ed\u0005<\u0000\u0000\u00ed\u00ee\u0005=\u0000\u0000\u00ee"+ "\u0000\u00e9\u00ea\u0005/\u0000\u0000\u00ea8\u0001\u0000\u0000\u0000\u00eb"+
"@\u0001\u0000\u0000\u0000\u00ef\u00f0\u0005=\u0000\u0000\u00f0\u00f1\u0005"+ "\u00ec\u0005%\u0000\u0000\u00ec:\u0001\u0000\u0000\u0000\u00ed\u00ee\u0005"+
"=\u0000\u0000\u00f1B\u0001\u0000\u0000\u0000\u00f2\u00f3\u0005!\u0000"+ ">\u0000\u0000\u00ee<\u0001\u0000\u0000\u0000\u00ef\u00f0\u0005<\u0000"+
"\u0000\u00f3\u00f4\u0005=\u0000\u0000\u00f4D\u0001\u0000\u0000\u0000\u00f5"+ "\u0000\u00f0>\u0001\u0000\u0000\u0000\u00f1\u00f2\u0005>\u0000\u0000\u00f2"+
"\u00f6\u0005&\u0000\u0000\u00f6\u00f7\u0005&\u0000\u0000\u00f7F\u0001"+ "\u00f3\u0005=\u0000\u0000\u00f3@\u0001\u0000\u0000\u0000\u00f4\u00f5\u0005"+
"\u0000\u0000\u0000\u00f8\u00f9\u0005|\u0000\u0000\u00f9\u00fa\u0005|\u0000"+ "<\u0000\u0000\u00f5\u00f6\u0005=\u0000\u0000\u00f6B\u0001\u0000\u0000"+
"\u0000\u00faH\u0001\u0000\u0000\u0000\u00fb\u00fc\u0005=\u0000\u0000\u00fc"+ "\u0000\u00f7\u00f8\u0005=\u0000\u0000\u00f8\u00f9\u0005=\u0000\u0000\u00f9"+
"J\u0001\u0000\u0000\u0000\u00fd\u00fe\u0005+\u0000\u0000\u00fe\u00ff\u0005"+ "D\u0001\u0000\u0000\u0000\u00fa\u00fb\u0005!\u0000\u0000\u00fb\u00fc\u0005"+
"=\u0000\u0000\u00ffL\u0001\u0000\u0000\u0000\u0100\u0101\u0005-\u0000"+ "=\u0000\u0000\u00fcF\u0001\u0000\u0000\u0000\u00fd\u00fe\u0005&\u0000"+
"\u0000\u0101\u0102\u0005=\u0000\u0000\u0102N\u0001\u0000\u0000\u0000\u0103"+ "\u0000\u00fe\u00ff\u0005&\u0000\u0000\u00ffH\u0001\u0000\u0000\u0000\u0100"+
"\u0104\u0005*\u0000\u0000\u0104\u0105\u0005=\u0000\u0000\u0105P\u0001"+ "\u0101\u0005|\u0000\u0000\u0101\u0102\u0005|\u0000\u0000\u0102J\u0001"+
"\u0000\u0000\u0000\u0106\u0107\u0005%\u0000\u0000\u0107\u0108\u0005=\u0000"+ "\u0000\u0000\u0000\u0103\u0104\u0005=\u0000\u0000\u0104L\u0001\u0000\u0000"+
"\u0000\u0108R\u0001\u0000\u0000\u0000\u0109\u010a\u0005/\u0000\u0000\u010a"+ "\u0000\u0105\u0106\u0005+\u0000\u0000\u0106\u0107\u0005=\u0000\u0000\u0107"+
"\u010b\u0005=\u0000\u0000\u010bT\u0001\u0000\u0000\u0000\u010c\u010d\u0005"+ "N\u0001\u0000\u0000\u0000\u0108\u0109\u0005-\u0000\u0000\u0109\u010a\u0005"+
"!\u0000\u0000\u010dV\u0001\u0000\u0000\u0000\u010e\u010f\u0005i\u0000"+ "=\u0000\u0000\u010aP\u0001\u0000\u0000\u0000\u010b\u010c\u0005*\u0000"+
"\u0000\u010f\u0110\u0005n\u0000\u0000\u0110\u0111\u0005t\u0000\u0000\u0111"+ "\u0000\u010c\u010d\u0005=\u0000\u0000\u010dR\u0001\u0000\u0000\u0000\u010e"+
"X\u0001\u0000\u0000\u0000\u0112\u0113\u0005b\u0000\u0000\u0113\u0114\u0005"+ "\u010f\u0005%\u0000\u0000\u010f\u0110\u0005=\u0000\u0000\u0110T\u0001"+
"o\u0000\u0000\u0114\u0115\u0005o\u0000\u0000\u0115\u0116\u0005l\u0000"+ "\u0000\u0000\u0000\u0111\u0112\u0005/\u0000\u0000\u0112\u0113\u0005=\u0000"+
"\u0000\u0116\u0117\u0005e\u0000\u0000\u0117\u0118\u0005a\u0000\u0000\u0118"+ "\u0000\u0113V\u0001\u0000\u0000\u0000\u0114\u0115\u0005!\u0000\u0000\u0115"+
"\u0119\u0005n\u0000\u0000\u0119Z\u0001\u0000\u0000\u0000\u011a\u011b\u0005"+ "X\u0001\u0000\u0000\u0000\u0116\u0117\u0005i\u0000\u0000\u0117\u0118\u0005"+
"v\u0000\u0000\u011b\u011c\u0005o\u0000\u0000\u011c\u011d\u0005i\u0000"+ "n\u0000\u0000\u0118\u0119\u0005t\u0000\u0000\u0119Z\u0001\u0000\u0000"+
"\u0000\u011d\u011e\u0005d\u0000\u0000\u011e\\\u0001\u0000\u0000\u0000"+ "\u0000\u011a\u011b\u0005b\u0000\u0000\u011b\u011c\u0005o\u0000\u0000\u011c"+
"\u011f\u0120\u0005c\u0000\u0000\u0120\u0121\u0005h\u0000\u0000\u0121\u0122"+ "\u011d\u0005o\u0000\u0000\u011d\u011e\u0005l\u0000\u0000\u011e\u011f\u0005"+
"\u0005a\u0000\u0000\u0122\u0123\u0005r\u0000\u0000\u0123^\u0001\u0000"+ "e\u0000\u0000\u011f\u0120\u0005a\u0000\u0000\u0120\u0121\u0005n\u0000"+
"\u0000\u0000\u0124\u0125\u0005t\u0000\u0000\u0125\u0126\u0005r\u0000\u0000"+ "\u0000\u0121\\\u0001\u0000\u0000\u0000\u0122\u0123\u0005v\u0000\u0000"+
"\u0126\u0127\u0005u\u0000\u0000\u0127\u012e\u0005e\u0000\u0000\u0128\u0129"+ "\u0123\u0124\u0005o\u0000\u0000\u0124\u0125\u0005i\u0000\u0000\u0125\u0126"+
"\u0005f\u0000\u0000\u0129\u012a\u0005a\u0000\u0000\u012a\u012b\u0005l"+ "\u0005d\u0000\u0000\u0126^\u0001\u0000\u0000\u0000\u0127\u0128\u0005c"+
"\u0000\u0000\u012b\u012c\u0005s\u0000\u0000\u012c\u012e\u0005e\u0000\u0000"+ "\u0000\u0000\u0128\u0129\u0005h\u0000\u0000\u0129\u012a\u0005a\u0000\u0000"+
"\u012d\u0124\u0001\u0000\u0000\u0000\u012d\u0128\u0001\u0000\u0000\u0000"+ "\u012a\u012b\u0005r\u0000\u0000\u012b`\u0001\u0000\u0000\u0000\u012c\u012d"+
"\u012e`\u0001\u0000\u0000\u0000\u012f\u0130\u0007\u0000\u0000\u0000\u0130"+ "\u0005t\u0000\u0000\u012d\u012e\u0005r\u0000\u0000\u012e\u012f\u0005u"+
"\u0131\u0007\u0001\u0000\u0000\u0131\u0132\u0007\u0000\u0000\u0000\u0132"+ "\u0000\u0000\u012f\u0136\u0005e\u0000\u0000\u0130\u0131\u0005f\u0000\u0000"+
"b\u0001\u0000\u0000\u0000\u0133\u0135\u0007\u0001\u0000\u0000\u0134\u0133"+ "\u0131\u0132\u0005a\u0000\u0000\u0132\u0133\u0005l\u0000\u0000\u0133\u0134"+
"\u0001\u0000\u0000\u0000\u0135\u0136\u0001\u0000\u0000\u0000\u0136\u0134"+ "\u0005s\u0000\u0000\u0134\u0136\u0005e\u0000\u0000\u0135\u012c\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u0136\u0137\u0001\u0000\u0000\u0000\u0137\u013b"+ "\u0000\u0000\u0135\u0130\u0001\u0000\u0000\u0000\u0136b\u0001\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u0138\u013a\u0007\u0002\u0000\u0000\u0139\u0138"+ "\u0000\u0137\u0138\u0007\u0000\u0000\u0000\u0138\u0139\u0007\u0001\u0000"+
"\u0001\u0000\u0000\u0000\u013a\u013d\u0001\u0000\u0000\u0000\u013b\u0139"+ "\u0000\u0139\u013a\u0007\u0000\u0000\u0000\u013ad\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u013b\u013c\u0001\u0000\u0000\u0000\u013c\u013f"+ "\u013b\u013d\u0007\u0001\u0000\u0000\u013c\u013b\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u013d\u013b\u0001\u0000\u0000\u0000\u013e\u0134"+ "\u013d\u013e\u0001\u0000\u0000\u0000\u013e\u013c\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u013f\u0140\u0001\u0000\u0000\u0000\u0140\u013e"+ "\u013e\u013f\u0001\u0000\u0000\u0000\u013f\u0143\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u0140\u0141\u0001\u0000\u0000\u0000\u0141d\u0001"+ "\u0140\u0142\u0007\u0002\u0000\u0000\u0141\u0140\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0142\u0144\u0007\u0002\u0000\u0000\u0143\u0142\u0001"+ "\u0142\u0145\u0001\u0000\u0000\u0000\u0143\u0141\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0144\u0145\u0001\u0000\u0000\u0000\u0145\u0143\u0001"+ "\u0143\u0144\u0001\u0000\u0000\u0000\u0144\u0147\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0145\u0146\u0001\u0000\u0000\u0000\u0146f\u0001\u0000"+ "\u0145\u0143\u0001\u0000\u0000\u0000\u0146\u013c\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0147\u0148\u0007\u0003\u0000\u0000\u0148\u0149\u0001\u0000"+ "\u0147\u0148\u0001\u0000\u0000\u0000\u0148\u0146\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0149\u014a\u00063\u0000\u0000\u014ah\u0001\u0000\u0000\u0000"+ "\u0148\u0149\u0001\u0000\u0000\u0000\u0149f\u0001\u0000\u0000\u0000\u014a"+
"\u014b\u014c\u0005/\u0000\u0000\u014c\u014d\u0005*\u0000\u0000\u014d\u0151"+ "\u014c\u0007\u0002\u0000\u0000\u014b\u014a\u0001\u0000\u0000\u0000\u014c"+
"\u0001\u0000\u0000\u0000\u014e\u0150\t\u0000\u0000\u0000\u014f\u014e\u0001"+ "\u014d\u0001\u0000\u0000\u0000\u014d\u014b\u0001\u0000\u0000\u0000\u014d"+
"\u0000\u0000\u0000\u0150\u0153\u0001\u0000\u0000\u0000\u0151\u0152\u0001"+ "\u014e\u0001\u0000\u0000\u0000\u014eh\u0001\u0000\u0000\u0000\u014f\u0150"+
"\u0000\u0000\u0000\u0151\u014f\u0001\u0000\u0000\u0000\u0152\u0154\u0001"+ "\u0007\u0003\u0000\u0000\u0150\u0151\u0001\u0000\u0000\u0000\u0151\u0152"+
"\u0000\u0000\u0000\u0153\u0151\u0001\u0000\u0000\u0000\u0154\u0155\u0005"+ "\u00064\u0000\u0000\u0152j\u0001\u0000\u0000\u0000\u0153\u0154\u0005/"+
"*\u0000\u0000\u0155\u0156\u0005/\u0000\u0000\u0156\u0157\u0001\u0000\u0000"+ "\u0000\u0000\u0154\u0155\u0005*\u0000\u0000\u0155\u0159\u0001\u0000\u0000"+
"\u0000\u0157\u0158\u00064\u0000\u0000\u0158j\u0001\u0000\u0000\u0000\u0159"+ "\u0000\u0156\u0158\t\u0000\u0000\u0000\u0157\u0156\u0001\u0000\u0000\u0000"+
"\u015a\u0005/\u0000\u0000\u015a\u015b\u0005/\u0000\u0000\u015b\u015f\u0001"+ "\u0158\u015b\u0001\u0000\u0000\u0000\u0159\u015a\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u015c\u015e\b\u0004\u0000\u0000\u015d\u015c\u0001\u0000"+ "\u0159\u0157\u0001\u0000\u0000\u0000\u015a\u015c\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u015e\u0161\u0001\u0000\u0000\u0000\u015f\u015d\u0001\u0000"+ "\u015b\u0159\u0001\u0000\u0000\u0000\u015c\u015d\u0005*\u0000\u0000\u015d"+
"\u0000\u0000\u015f\u0160\u0001\u0000\u0000\u0000\u0160\u0162\u0001\u0000"+ "\u015e\u0005/\u0000\u0000\u015e\u015f\u0001\u0000\u0000\u0000\u015f\u0160"+
"\u0000\u0000\u0161\u015f\u0001\u0000\u0000\u0000\u0162\u0163\u00065\u0000"+ "\u00065\u0000\u0000\u0160l\u0001\u0000\u0000\u0000\u0161\u0162\u0005/"+
"\u0000\u0163l\u0001\u0000\u0000\u0000\b\u0000\u012d\u0136\u013b\u0140"+ "\u0000\u0000\u0162\u0163\u0005/\u0000\u0000\u0163\u0167\u0001\u0000\u0000"+
"\u0145\u0151\u015f\u0001\u0006\u0000\u0000"; "\u0000\u0164\u0166\b\u0004\u0000\u0000\u0165\u0164\u0001\u0000\u0000\u0000"+
"\u0166\u0169\u0001\u0000\u0000\u0000\u0167\u0165\u0001\u0000\u0000\u0000"+
"\u0167\u0168\u0001\u0000\u0000\u0000\u0168\u016a\u0001\u0000\u0000\u0000"+
"\u0169\u0167\u0001\u0000\u0000\u0000\u016a\u016b\u00066\u0000\u0000\u016b"+
"n\u0001\u0000\u0000\u0000\b\u0000\u0135\u013e\u0143\u0148\u014d\u0159"+
"\u0167\u0001\u0006\u0000\u0000";
public static final ATN _ATN = public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray()); new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static { static {

View File

@ -15,43 +15,44 @@ T__13=14
T__14=15 T__14=15
T__15=16 T__15=16
T__16=17 T__16=17
PUBLIC=18 T__17=18
NEW=19 PUBLIC=19
NULL=20 NEW=20
THIS=21 NULL=21
IF=22 THIS=22
ELSE=23 IF=23
SUB=24 ELSE=24
ADD=25 SUB=25
MUL=26 ADD=26
DIV=27 MUL=27
MOD=28 DIV=28
GT=29 MOD=29
LT=30 GT=30
GE=31 LT=31
LE=32 GE=32
EQ=33 LE=33
NE=34 EQ=34
AND=35 NE=35
OR=36 AND=36
ASSIGN=37 OR=37
ADD_ASSIGN=38 ASSIGN=38
SUB_ASSIGN=39 ADD_ASSIGN=39
MUL_ASSIGN=40 SUB_ASSIGN=40
MOD_ASSIGN=41 MUL_ASSIGN=41
DIV_ASSIGN=42 MOD_ASSIGN=42
NOT=43 DIV_ASSIGN=43
INT=44 NOT=44
BOOL=45 INT=45
VOID=46 BOOL=46
CHAR=47 VOID=47
BOOLEANLITERAL=48 CHAR=48
CHARLITERAL=49 BOOLEANLITERAL=49
IDENTIFIER=50 CHARLITERAL=50
NUMBER=51 IDENTIFIER=51
WS=52 NUMBER=52
COMMENT=53 WS=53
LINE_COMMENT=54 COMMENT=54
LINE_COMMENT=55
'class'=1 'class'=1
'{'=2 '{'=2
'}'=3 '}'=3
@ -68,34 +69,35 @@ LINE_COMMENT=54
'do'=14 'do'=14
'break'=15 'break'=15
'continue'=16 'continue'=16
'.'=17 'print'=17
'public'=18 '.'=18
'new'=19 'public'=19
'null'=20 'new'=20
'this'=21 'null'=21
'if'=22 'this'=22
'else'=23 'if'=23
'-'=24 'else'=24
'+'=25 '-'=25
'*'=26 '+'=26
'/'=27 '*'=27
'%'=28 '/'=28
'>'=29 '%'=29
'<'=30 '>'=30
'>='=31 '<'=31
'<='=32 '>='=32
'=='=33 '<='=33
'!='=34 '=='=34
'&&'=35 '!='=35
'||'=36 '&&'=36
'='=37 '||'=37
'+='=38 '='=38
'-='=39 '+='=39
'*='=40 '-='=40
'%='=41 '*='=41
'/='=42 '%='=42
'!'=43 '/='=43
'int'=44 '!'=44
'boolean'=45 'int'=45
'void'=46 'boolean'=46
'char'=47 'void'=47
'char'=48

View File

@ -1,4 +1,4 @@
// Generated from C:/Users/laure/Documents/Dev/Compilerbau/Projekt/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1 // Generated from C:/dev/Uni/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1
package de.maishai.antlr; package de.maishai.antlr;
import org.antlr.v4.runtime.tree.ParseTreeListener; import org.antlr.v4.runtime.tree.ParseTreeListener;
@ -255,6 +255,18 @@ public interface DecafListener extends ParseTreeListener {
* @param ctx the parse tree * @param ctx the parse tree
*/ */
void exitAssignment(DecafParser.AssignmentContext ctx); void exitAssignment(DecafParser.AssignmentContext ctx);
/**
* Enter a parse tree produced by the {@code Print}
* labeled alternative in {@link DecafParser#stmt}.
* @param ctx the parse tree
*/
void enterPrint(DecafParser.PrintContext ctx);
/**
* Exit a parse tree produced by the {@code Print}
* labeled alternative in {@link DecafParser#stmt}.
* @param ctx the parse tree
*/
void exitPrint(DecafParser.PrintContext ctx);
/** /**
* Enter a parse tree produced by the {@code StatementExpressionstmt} * Enter a parse tree produced by the {@code StatementExpressionstmt}
* labeled alternative in {@link DecafParser#stmt}. * labeled alternative in {@link DecafParser#stmt}.

View File

@ -1,4 +1,4 @@
// Generated from C:/Users/laure/Documents/Dev/Compilerbau/Projekt/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1 // Generated from C:/dev/Uni/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1
package de.maishai.antlr; package de.maishai.antlr;
import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.dfa.DFA;
@ -19,11 +19,12 @@ public class DecafParser extends Parser {
public static final int public static final int
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9, T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
PUBLIC=18, NEW=19, NULL=20, THIS=21, IF=22, ELSE=23, SUB=24, ADD=25, MUL=26, T__17=18, PUBLIC=19, NEW=20, NULL=21, THIS=22, IF=23, ELSE=24, SUB=25,
DIV=27, MOD=28, GT=29, LT=30, GE=31, LE=32, EQ=33, NE=34, AND=35, OR=36, ADD=26, MUL=27, DIV=28, MOD=29, GT=30, LT=31, GE=32, LE=33, EQ=34, NE=35,
ASSIGN=37, ADD_ASSIGN=38, SUB_ASSIGN=39, MUL_ASSIGN=40, MOD_ASSIGN=41, AND=36, OR=37, ASSIGN=38, ADD_ASSIGN=39, SUB_ASSIGN=40, MUL_ASSIGN=41,
DIV_ASSIGN=42, NOT=43, INT=44, BOOL=45, VOID=46, CHAR=47, BOOLEANLITERAL=48, MOD_ASSIGN=42, DIV_ASSIGN=43, NOT=44, INT=45, BOOL=46, VOID=47, CHAR=48,
CHARLITERAL=49, IDENTIFIER=50, NUMBER=51, WS=52, COMMENT=53, LINE_COMMENT=54; BOOLEANLITERAL=49, CHARLITERAL=50, IDENTIFIER=51, NUMBER=52, WS=53, COMMENT=54,
LINE_COMMENT=55;
public static final int public static final int
RULE_class = 0, RULE_field = 1, RULE_assignSign = 2, RULE_returntype = 3, RULE_class = 0, RULE_field = 1, RULE_assignSign = 2, RULE_returntype = 3,
RULE_type = 4, RULE_meth = 5, RULE_mainmeth = 6, RULE_constructor = 7, RULE_type = 4, RULE_meth = 5, RULE_mainmeth = 6, RULE_constructor = 7,
@ -48,17 +49,17 @@ public class DecafParser extends Parser {
return new String[] { return new String[] {
null, "'class'", "'{'", "'}'", "';'", "'('", "')'", "'static'", "'main'", null, "'class'", "'{'", "'}'", "';'", "'('", "')'", "'static'", "'main'",
"'String[] args'", "','", "'return'", "'for'", "'while'", "'do'", "'break'", "'String[] args'", "','", "'return'", "'for'", "'while'", "'do'", "'break'",
"'continue'", "'.'", "'public'", "'new'", "'null'", "'this'", "'if'", "'continue'", "'print'", "'.'", "'public'", "'new'", "'null'", "'this'",
"'else'", "'-'", "'+'", "'*'", "'/'", "'%'", "'>'", "'<'", "'>='", "'<='", "'if'", "'else'", "'-'", "'+'", "'*'", "'/'", "'%'", "'>'", "'<'", "'>='",
"'=='", "'!='", "'&&'", "'||'", "'='", "'+='", "'-='", "'*='", "'%='", "'<='", "'=='", "'!='", "'&&'", "'||'", "'='", "'+='", "'-='", "'*='",
"'/='", "'!'", "'int'", "'boolean'", "'void'", "'char'" "'%='", "'/='", "'!'", "'int'", "'boolean'", "'void'", "'char'"
}; };
} }
private static final String[] _LITERAL_NAMES = makeLiteralNames(); private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() { private static String[] makeSymbolicNames() {
return new String[] { return new String[] {
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, "PUBLIC", "NEW", "NULL", "THIS", null, null, null, null, null, null, null, "PUBLIC", "NEW", "NULL", "THIS",
"IF", "ELSE", "SUB", "ADD", "MUL", "DIV", "MOD", "GT", "LT", "GE", "LE", "IF", "ELSE", "SUB", "ADD", "MUL", "DIV", "MOD", "GT", "LT", "GE", "LE",
"EQ", "NE", "AND", "OR", "ASSIGN", "ADD_ASSIGN", "SUB_ASSIGN", "MUL_ASSIGN", "EQ", "NE", "AND", "OR", "ASSIGN", "ADD_ASSIGN", "SUB_ASSIGN", "MUL_ASSIGN",
"MOD_ASSIGN", "DIV_ASSIGN", "NOT", "INT", "BOOL", "VOID", "CHAR", "BOOLEANLITERAL", "MOD_ASSIGN", "DIV_ASSIGN", "NOT", "INT", "BOOL", "VOID", "CHAR", "BOOLEANLITERAL",
@ -190,7 +191,7 @@ public class DecafParser extends Parser {
setState(72); setState(72);
_errHandler.sync(this); _errHandler.sync(this);
_la = _input.LA(1); _la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1319413953593344L) != 0)) { while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 2638827907186688L) != 0)) {
{ {
setState(70); setState(70);
_errHandler.sync(this); _errHandler.sync(this);
@ -334,7 +335,7 @@ public class DecafParser extends Parser {
{ {
setState(84); setState(84);
_la = _input.LA(1); _la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 8658654068736L) != 0)) ) { if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 17317308137472L) != 0)) ) {
_errHandler.recoverInline(this); _errHandler.recoverInline(this);
} }
else { else {
@ -548,7 +549,7 @@ public class DecafParser extends Parser {
setState(101); setState(101);
_errHandler.sync(this); _errHandler.sync(this);
_la = _input.LA(1); _la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1319413953331200L) != 0)) { if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 2638827906662400L) != 0)) {
{ {
setState(100); setState(100);
params(); params();
@ -680,7 +681,7 @@ public class DecafParser extends Parser {
setState(119); setState(119);
_errHandler.sync(this); _errHandler.sync(this);
_la = _input.LA(1); _la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1319413953331200L) != 0)) { if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 2638827906662400L) != 0)) {
{ {
setState(118); setState(118);
params(); params();
@ -861,7 +862,7 @@ public class DecafParser extends Parser {
setState(139); setState(139);
_errHandler.sync(this); _errHandler.sync(this);
_la = _input.LA(1); _la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1319413960273920L) != 0)) { while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 2638827920551936L) != 0)) {
{ {
{ {
setState(136); setState(136);
@ -1102,6 +1103,26 @@ public class DecafParser extends Parser {
} }
} }
@SuppressWarnings("CheckReturnValue") @SuppressWarnings("CheckReturnValue")
public static class PrintContext extends StmtContext {
public ExprContext expr() {
return getRuleContext(ExprContext.class,0);
}
public PrintContext(StmtContext ctx) { copyFrom(ctx); }
@Override
public void enterRule(ParseTreeListener listener) {
if ( listener instanceof DecafListener ) ((DecafListener)listener).enterPrint(this);
}
@Override
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof DecafListener ) ((DecafListener)listener).exitPrint(this);
}
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof DecafVisitor ) return ((DecafVisitor<? extends T>)visitor).visitPrint(this);
else return visitor.visitChildren(this);
}
}
@SuppressWarnings("CheckReturnValue")
public static class LocalVarDecContext extends StmtContext { public static class LocalVarDecContext extends StmtContext {
public LocalVarContext localVar() { public LocalVarContext localVar() {
return getRuleContext(LocalVarContext.class,0); return getRuleContext(LocalVarContext.class,0);
@ -1299,7 +1320,7 @@ public class DecafParser extends Parser {
enterRule(_localctx, 28, RULE_stmt); enterRule(_localctx, 28, RULE_stmt);
int _la; int _la;
try { try {
setState(208); setState(214);
_errHandler.sync(this); _errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
case 1: case 1:
@ -1443,12 +1464,28 @@ public class DecafParser extends Parser {
} }
break; break;
case 10: case 10:
_localctx = new StatementExpressionstmtContext(_localctx); _localctx = new PrintContext(_localctx);
enterOuterAlt(_localctx, 10); enterOuterAlt(_localctx, 10);
{ {
setState(205); setState(205);
stmtexpr(); match(T__16);
setState(206); setState(206);
match(T__4);
setState(207);
expr(0);
setState(208);
match(T__5);
setState(209);
match(T__3);
}
break;
case 11:
_localctx = new StatementExpressionstmtContext(_localctx);
enterOuterAlt(_localctx, 11);
{
setState(211);
stmtexpr();
setState(212);
match(T__3); match(T__3);
} }
break; break;
@ -1522,14 +1559,14 @@ public class DecafParser extends Parser {
StmtexprContext _localctx = new StmtexprContext(_ctx, getState()); StmtexprContext _localctx = new StmtexprContext(_ctx, getState());
enterRule(_localctx, 30, RULE_stmtexpr); enterRule(_localctx, 30, RULE_stmtexpr);
try { try {
setState(212); setState(218);
_errHandler.sync(this); _errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) {
case 1: case 1:
_localctx = new MethodCallContext(_localctx); _localctx = new MethodCallContext(_localctx);
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(210); setState(216);
methCall(); methCall();
} }
break; break;
@ -1537,7 +1574,7 @@ public class DecafParser extends Parser {
_localctx = new NewContext(_localctx); _localctx = new NewContext(_localctx);
enterOuterAlt(_localctx, 2); enterOuterAlt(_localctx, 2);
{ {
setState(211); setState(217);
newCall(); newCall();
} }
break; break;
@ -1711,7 +1748,7 @@ public class DecafParser extends Parser {
int _alt; int _alt;
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(225); setState(231);
_errHandler.sync(this); _errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) {
case 1: case 1:
@ -1720,9 +1757,9 @@ public class DecafParser extends Parser {
_ctx = _localctx; _ctx = _localctx;
_prevctx = _localctx; _prevctx = _localctx;
setState(215); setState(221);
unaryOp(); unaryOp();
setState(216); setState(222);
expr(5); expr(5);
} }
break; break;
@ -1731,7 +1768,7 @@ public class DecafParser extends Parser {
_localctx = new ConstantContext(_localctx); _localctx = new ConstantContext(_localctx);
_ctx = _localctx; _ctx = _localctx;
_prevctx = _localctx; _prevctx = _localctx;
setState(218); setState(224);
literal(); literal();
} }
break; break;
@ -1740,11 +1777,11 @@ public class DecafParser extends Parser {
_localctx = new ExpressionContext(_localctx); _localctx = new ExpressionContext(_localctx);
_ctx = _localctx; _ctx = _localctx;
_prevctx = _localctx; _prevctx = _localctx;
setState(219); setState(225);
match(T__4); match(T__4);
setState(220); setState(226);
expr(0); expr(0);
setState(221); setState(227);
match(T__5); match(T__5);
} }
break; break;
@ -1753,7 +1790,7 @@ public class DecafParser extends Parser {
_localctx = new IdentifierContext(_localctx); _localctx = new IdentifierContext(_localctx);
_ctx = _localctx; _ctx = _localctx;
_prevctx = _localctx; _prevctx = _localctx;
setState(223); setState(229);
fieldVarAccess(); fieldVarAccess();
} }
break; break;
@ -1762,13 +1799,13 @@ public class DecafParser extends Parser {
_localctx = new StatementExpressionexprContext(_localctx); _localctx = new StatementExpressionexprContext(_localctx);
_ctx = _localctx; _ctx = _localctx;
_prevctx = _localctx; _prevctx = _localctx;
setState(224); setState(230);
stmtexpr(); stmtexpr();
} }
break; break;
} }
_ctx.stop = _input.LT(-1); _ctx.stop = _input.LT(-1);
setState(233); setState(239);
_errHandler.sync(this); _errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,17,_ctx); _alt = getInterpreter().adaptivePredict(_input,17,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@ -1779,16 +1816,16 @@ public class DecafParser extends Parser {
{ {
_localctx = new BinaryOperationContext(new ExprContext(_parentctx, _parentState)); _localctx = new BinaryOperationContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr); pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(227); setState(233);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
setState(228); setState(234);
binaryOp(); binaryOp();
setState(229); setState(235);
expr(7); expr(7);
} }
} }
} }
setState(235); setState(241);
_errHandler.sync(this); _errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,17,_ctx); _alt = getInterpreter().adaptivePredict(_input,17,_ctx);
} }
@ -1846,9 +1883,9 @@ public class DecafParser extends Parser {
try { try {
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(236); setState(242);
_la = _input.LA(1); _la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 137422176256L) != 0)) ) { if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 274844352512L) != 0)) ) {
_errHandler.recoverInline(this); _errHandler.recoverInline(this);
} }
else { else {
@ -1899,7 +1936,7 @@ public class DecafParser extends Parser {
try { try {
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(238); setState(244);
_la = _input.LA(1); _la = _input.LA(1);
if ( !(_la==SUB || _la==NOT) ) { if ( !(_la==SUB || _la==NOT) ) {
_errHandler.recoverInline(this); _errHandler.recoverInline(this);
@ -1963,26 +2000,26 @@ public class DecafParser extends Parser {
int _alt; int _alt;
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(245); setState(251);
_errHandler.sync(this); _errHandler.sync(this);
switch (_input.LA(1)) { switch (_input.LA(1)) {
case THIS: case THIS:
{ {
{ {
setState(240); setState(246);
match(THIS); match(THIS);
setState(241); setState(247);
match(T__16); match(T__17);
} }
} }
break; break;
case NEW: case NEW:
{ {
{ {
setState(242); setState(248);
newCall(); newCall();
setState(243); setState(249);
match(T__16); match(T__17);
} }
} }
break; break;
@ -1991,25 +2028,25 @@ public class DecafParser extends Parser {
default: default:
break; break;
} }
setState(252); setState(258);
_errHandler.sync(this); _errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,19,_ctx); _alt = getInterpreter().adaptivePredict(_input,19,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) { if ( _alt==1 ) {
{ {
{ {
setState(247); setState(253);
recipient(); recipient();
setState(248); setState(254);
match(T__16); match(T__17);
} }
} }
} }
setState(254); setState(260);
_errHandler.sync(this); _errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,19,_ctx); _alt = getInterpreter().adaptivePredict(_input,19,_ctx);
} }
setState(255); setState(261);
id(); id();
} }
} }
@ -2060,11 +2097,11 @@ public class DecafParser extends Parser {
try { try {
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(257); setState(263);
fieldVarAccess(); fieldVarAccess();
setState(258); setState(264);
assignSign(); assignSign();
setState(259); setState(265);
expr(0); expr(0);
} }
} }
@ -2120,26 +2157,26 @@ public class DecafParser extends Parser {
int _alt; int _alt;
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(266); setState(272);
_errHandler.sync(this); _errHandler.sync(this);
switch (_input.LA(1)) { switch (_input.LA(1)) {
case THIS: case THIS:
{ {
{ {
setState(261); setState(267);
match(THIS); match(THIS);
setState(262); setState(268);
match(T__16); match(T__17);
} }
} }
break; break;
case NEW: case NEW:
{ {
{ {
setState(263); setState(269);
newCall(); newCall();
setState(264); setState(270);
match(T__16); match(T__17);
} }
} }
break; break;
@ -2148,25 +2185,25 @@ public class DecafParser extends Parser {
default: default:
break; break;
} }
setState(273); setState(279);
_errHandler.sync(this); _errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,21,_ctx); _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) { if ( _alt==1 ) {
{ {
{ {
setState(268); setState(274);
recipient(); recipient();
setState(269); setState(275);
match(T__16); match(T__17);
} }
} }
} }
setState(275); setState(281);
_errHandler.sync(this); _errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,21,_ctx); _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
} }
setState(276); setState(282);
methName(); methName();
} }
} }
@ -2216,23 +2253,23 @@ public class DecafParser extends Parser {
try { try {
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(278); setState(284);
match(NEW); match(NEW);
setState(279); setState(285);
type(); type();
setState(280); setState(286);
match(T__4); match(T__4);
setState(282); setState(288);
_errHandler.sync(this); _errHandler.sync(this);
_la = _input.LA(1); _la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 4230920763080736L) != 0)) { if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 8461841526161440L) != 0)) {
{ {
setState(281); setState(287);
args(); args();
} }
} }
setState(284); setState(290);
match(T__5); match(T__5);
} }
} }
@ -2278,20 +2315,20 @@ public class DecafParser extends Parser {
RecipientContext _localctx = new RecipientContext(_ctx, getState()); RecipientContext _localctx = new RecipientContext(_ctx, getState());
enterRule(_localctx, 46, RULE_recipient); enterRule(_localctx, 46, RULE_recipient);
try { try {
setState(288); setState(294);
_errHandler.sync(this); _errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) {
case 1: case 1:
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(286); setState(292);
methName(); methName();
} }
break; break;
case 2: case 2:
enterOuterAlt(_localctx, 2); enterOuterAlt(_localctx, 2);
{ {
setState(287); setState(293);
id(); id();
} }
break; break;
@ -2342,21 +2379,21 @@ public class DecafParser extends Parser {
try { try {
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(290); setState(296);
id(); id();
setState(291); setState(297);
match(T__4); match(T__4);
setState(293); setState(299);
_errHandler.sync(this); _errHandler.sync(this);
_la = _input.LA(1); _la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 4230920763080736L) != 0)) { if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 8461841526161440L) != 0)) {
{ {
setState(292); setState(298);
args(); args();
} }
} }
setState(295); setState(301);
match(T__5); match(T__5);
} }
} }
@ -2405,21 +2442,21 @@ public class DecafParser extends Parser {
try { try {
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(297); setState(303);
expr(0); expr(0);
setState(302); setState(308);
_errHandler.sync(this); _errHandler.sync(this);
_la = _input.LA(1); _la = _input.LA(1);
while (_la==T__9) { while (_la==T__9) {
{ {
{ {
setState(298); setState(304);
match(T__9); match(T__9);
setState(299); setState(305);
expr(0); expr(0);
} }
} }
setState(304); setState(310);
_errHandler.sync(this); _errHandler.sync(this);
_la = _input.LA(1); _la = _input.LA(1);
} }
@ -2482,40 +2519,40 @@ public class DecafParser extends Parser {
int _alt; int _alt;
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(305); setState(311);
match(IF); match(IF);
setState(306); setState(312);
match(T__4); match(T__4);
setState(307);
expr(0);
setState(308);
match(T__5);
setState(309);
block();
setState(313); setState(313);
expr(0);
setState(314);
match(T__5);
setState(315);
block();
setState(319);
_errHandler.sync(this); _errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,26,_ctx); _alt = getInterpreter().adaptivePredict(_input,26,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) { if ( _alt==1 ) {
{ {
{ {
setState(310); setState(316);
elseIf(); elseIf();
} }
} }
} }
setState(315); setState(321);
_errHandler.sync(this); _errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,26,_ctx); _alt = getInterpreter().adaptivePredict(_input,26,_ctx);
} }
setState(318); setState(324);
_errHandler.sync(this); _errHandler.sync(this);
_la = _input.LA(1); _la = _input.LA(1);
if (_la==ELSE) { if (_la==ELSE) {
{ {
setState(316); setState(322);
match(ELSE); match(ELSE);
setState(317); setState(323);
block(); block();
} }
} }
@ -2568,17 +2605,17 @@ public class DecafParser extends Parser {
try { try {
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(320); setState(326);
match(ELSE); match(ELSE);
setState(321); setState(327);
match(IF); match(IF);
setState(322); setState(328);
match(T__4); match(T__4);
setState(323); setState(329);
expr(0); expr(0);
setState(324); setState(330);
match(T__5); match(T__5);
setState(325); setState(331);
block(); block();
} }
} }
@ -2624,9 +2661,9 @@ public class DecafParser extends Parser {
try { try {
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(327); setState(333);
_la = _input.LA(1); _la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 3096224743817216L) != 0)) ) { if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 6192449487634432L) != 0)) ) {
_errHandler.recoverInline(this); _errHandler.recoverInline(this);
} }
else { else {
@ -2675,7 +2712,7 @@ public class DecafParser extends Parser {
try { try {
enterOuterAlt(_localctx, 1); enterOuterAlt(_localctx, 1);
{ {
setState(329); setState(335);
match(IDENTIFIER); match(IDENTIFIER);
} }
} }
@ -2706,7 +2743,7 @@ public class DecafParser extends Parser {
} }
public static final String _serializedATN = public static final String _serializedATN =
"\u0004\u00016\u014c\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0004\u00017\u0152\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+
"\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+
"\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+
"\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+
@ -2738,43 +2775,44 @@ public class DecafParser extends Parser {
"\u000e\u0003\u000e\u00bf\b\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ "\u000e\u0003\u000e\u00bf\b\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
"\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
"\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
"\u000e\u0003\u000e\u00d1\b\u000e\u0001\u000f\u0001\u000f\u0003\u000f\u00d5"+ "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
"\u000e\u0003\u000e\u00d7\b\u000e\u0001\u000f\u0001\u000f\u0003\u000f\u00db"+
"\b\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ "\b\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+
"\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0003"+ "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0003"+
"\u0010\u00e2\b\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0005"+ "\u0010\u00e8\b\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0005"+
"\u0010\u00e8\b\u0010\n\u0010\f\u0010\u00eb\t\u0010\u0001\u0011\u0001\u0011"+ "\u0010\u00ee\b\u0010\n\u0010\f\u0010\u00f1\t\u0010\u0001\u0011\u0001\u0011"+
"\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+ "\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+
"\u0001\u0013\u0003\u0013\u00f6\b\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+ "\u0001\u0013\u0003\u0013\u00fc\b\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+
"\u0005\u0013\u00fb\b\u0013\n\u0013\f\u0013\u00fe\t\u0013\u0001\u0013\u0001"+ "\u0005\u0013\u0101\b\u0013\n\u0013\f\u0013\u0104\t\u0013\u0001\u0013\u0001"+
"\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+ "\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+
"\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0003\u0015\u010b\b\u0015\u0001"+ "\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0003\u0015\u0111\b\u0015\u0001"+
"\u0015\u0001\u0015\u0001\u0015\u0005\u0015\u0110\b\u0015\n\u0015\f\u0015"+ "\u0015\u0001\u0015\u0001\u0015\u0005\u0015\u0116\b\u0015\n\u0015\f\u0015"+
"\u0113\t\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016"+ "\u0119\t\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016"+
"\u0001\u0016\u0003\u0016\u011b\b\u0016\u0001\u0016\u0001\u0016\u0001\u0017"+ "\u0001\u0016\u0003\u0016\u0121\b\u0016\u0001\u0016\u0001\u0016\u0001\u0017"+
"\u0001\u0017\u0003\u0017\u0121\b\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+ "\u0001\u0017\u0003\u0017\u0127\b\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+
"\u0003\u0018\u0126\b\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019"+ "\u0003\u0018\u012c\b\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019"+
"\u0001\u0019\u0005\u0019\u012d\b\u0019\n\u0019\f\u0019\u0130\t\u0019\u0001"+ "\u0001\u0019\u0005\u0019\u0133\b\u0019\n\u0019\f\u0019\u0136\t\u0019\u0001"+
"\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005"+ "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005"+
"\u001a\u0138\b\u001a\n\u001a\f\u001a\u013b\t\u001a\u0001\u001a\u0001\u001a"+ "\u001a\u013e\b\u001a\n\u001a\f\u001a\u0141\t\u001a\u0001\u001a\u0001\u001a"+
"\u0003\u001a\u013f\b\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+ "\u0003\u001a\u0145\b\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+
"\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d"+ "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d"+
"\u0001\u001d\u0001\u001d\u0000\u0001 \u001e\u0000\u0002\u0004\u0006\b"+ "\u0001\u001d\u0001\u001d\u0000\u0001 \u001e\u0000\u0002\u0004\u0006\b"+
"\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02"+ "\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02"+
"468:\u0000\u0004\u0001\u0000%*\u0001\u0000\u0018$\u0002\u0000\u0018\u0018"+ "468:\u0000\u0004\u0001\u0000&+\u0001\u0000\u0019%\u0002\u0000\u0019\u0019"+
"++\u0002\u00000133\u0159\u0000<\u0001\u0000\u0000\u0000\u0002N\u0001\u0000"+ ",,\u0002\u00001244\u0160\u0000<\u0001\u0000\u0000\u0000\u0002N\u0001\u0000"+
"\u0000\u0000\u0004T\u0001\u0000\u0000\u0000\u0006X\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0004T\u0001\u0000\u0000\u0000\u0006X\u0001\u0000\u0000\u0000"+
"\b^\u0001\u0000\u0000\u0000\n`\u0001\u0000\u0000\u0000\fj\u0001\u0000"+ "\b^\u0001\u0000\u0000\u0000\n`\u0001\u0000\u0000\u0000\fj\u0001\u0000"+
"\u0000\u0000\u000es\u0001\u0000\u0000\u0000\u0010|\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u000es\u0001\u0000\u0000\u0000\u0010|\u0001\u0000\u0000\u0000"+
"\u0012\u0084\u0001\u0000\u0000\u0000\u0014\u0087\u0001\u0000\u0000\u0000"+ "\u0012\u0084\u0001\u0000\u0000\u0000\u0014\u0087\u0001\u0000\u0000\u0000"+
"\u0016\u0093\u0001\u0000\u0000\u0000\u0018\u0096\u0001\u0000\u0000\u0000"+ "\u0016\u0093\u0001\u0000\u0000\u0000\u0018\u0096\u0001\u0000\u0000\u0000"+
"\u001a\u00a1\u0001\u0000\u0000\u0000\u001c\u00d0\u0001\u0000\u0000\u0000"+ "\u001a\u00a1\u0001\u0000\u0000\u0000\u001c\u00d6\u0001\u0000\u0000\u0000"+
"\u001e\u00d4\u0001\u0000\u0000\u0000 \u00e1\u0001\u0000\u0000\u0000\""+ "\u001e\u00da\u0001\u0000\u0000\u0000 \u00e7\u0001\u0000\u0000\u0000\""+
"\u00ec\u0001\u0000\u0000\u0000$\u00ee\u0001\u0000\u0000\u0000&\u00f5\u0001"+ "\u00f2\u0001\u0000\u0000\u0000$\u00f4\u0001\u0000\u0000\u0000&\u00fb\u0001"+
"\u0000\u0000\u0000(\u0101\u0001\u0000\u0000\u0000*\u010a\u0001\u0000\u0000"+ "\u0000\u0000\u0000(\u0107\u0001\u0000\u0000\u0000*\u0110\u0001\u0000\u0000"+
"\u0000,\u0116\u0001\u0000\u0000\u0000.\u0120\u0001\u0000\u0000\u00000"+ "\u0000,\u011c\u0001\u0000\u0000\u0000.\u0126\u0001\u0000\u0000\u00000"+
"\u0122\u0001\u0000\u0000\u00002\u0129\u0001\u0000\u0000\u00004\u0131\u0001"+ "\u0128\u0001\u0000\u0000\u00002\u012f\u0001\u0000\u0000\u00004\u0137\u0001"+
"\u0000\u0000\u00006\u0140\u0001\u0000\u0000\u00008\u0147\u0001\u0000\u0000"+ "\u0000\u0000\u00006\u0146\u0001\u0000\u0000\u00008\u014d\u0001\u0000\u0000"+
"\u0000:\u0149\u0001\u0000\u0000\u0000<=\u0005\u0012\u0000\u0000=>\u0005"+ "\u0000:\u014f\u0001\u0000\u0000\u0000<=\u0005\u0013\u0000\u0000=>\u0005"+
"\u0001\u0000\u0000>?\u0003:\u001d\u0000?A\u0005\u0002\u0000\u0000@B\u0003"+ "\u0001\u0000\u0000>?\u0003:\u001d\u0000?A\u0005\u0002\u0000\u0000@B\u0003"+
"\f\u0006\u0000A@\u0001\u0000\u0000\u0000AB\u0001\u0000\u0000\u0000BH\u0001"+ "\f\u0006\u0000A@\u0001\u0000\u0000\u0000AB\u0001\u0000\u0000\u0000BH\u0001"+
"\u0000\u0000\u0000CG\u0003\u0002\u0001\u0000DG\u0003\n\u0005\u0000EG\u0003"+ "\u0000\u0000\u0000CG\u0003\u0002\u0001\u0000DG\u0003\n\u0005\u0000EG\u0003"+
@ -2782,22 +2820,22 @@ public class DecafParser extends Parser {
"FE\u0001\u0000\u0000\u0000GJ\u0001\u0000\u0000\u0000HF\u0001\u0000\u0000"+ "FE\u0001\u0000\u0000\u0000GJ\u0001\u0000\u0000\u0000HF\u0001\u0000\u0000"+
"\u0000HI\u0001\u0000\u0000\u0000IK\u0001\u0000\u0000\u0000JH\u0001\u0000"+ "\u0000HI\u0001\u0000\u0000\u0000IK\u0001\u0000\u0000\u0000JH\u0001\u0000"+
"\u0000\u0000KL\u0005\u0003\u0000\u0000L\u0001\u0001\u0000\u0000\u0000"+ "\u0000\u0000KL\u0005\u0003\u0000\u0000L\u0001\u0001\u0000\u0000\u0000"+
"MO\u0005\u0012\u0000\u0000NM\u0001\u0000\u0000\u0000NO\u0001\u0000\u0000"+ "MO\u0005\u0013\u0000\u0000NM\u0001\u0000\u0000\u0000NO\u0001\u0000\u0000"+
"\u0000OP\u0001\u0000\u0000\u0000PQ\u0003\b\u0004\u0000QR\u0003:\u001d"+ "\u0000OP\u0001\u0000\u0000\u0000PQ\u0003\b\u0004\u0000QR\u0003:\u001d"+
"\u0000RS\u0005\u0004\u0000\u0000S\u0003\u0001\u0000\u0000\u0000TU\u0007"+ "\u0000RS\u0005\u0004\u0000\u0000S\u0003\u0001\u0000\u0000\u0000TU\u0007"+
"\u0000\u0000\u0000U\u0005\u0001\u0000\u0000\u0000VY\u0003\b\u0004\u0000"+ "\u0000\u0000\u0000U\u0005\u0001\u0000\u0000\u0000VY\u0003\b\u0004\u0000"+
"WY\u0005.\u0000\u0000XV\u0001\u0000\u0000\u0000XW\u0001\u0000\u0000\u0000"+ "WY\u0005/\u0000\u0000XV\u0001\u0000\u0000\u0000XW\u0001\u0000\u0000\u0000"+
"Y\u0007\u0001\u0000\u0000\u0000Z_\u0005,\u0000\u0000[_\u0005-\u0000\u0000"+ "Y\u0007\u0001\u0000\u0000\u0000Z_\u0005-\u0000\u0000[_\u0005.\u0000\u0000"+
"\\_\u0005/\u0000\u0000]_\u0003:\u001d\u0000^Z\u0001\u0000\u0000\u0000"+ "\\_\u00050\u0000\u0000]_\u0003:\u001d\u0000^Z\u0001\u0000\u0000\u0000"+
"^[\u0001\u0000\u0000\u0000^\\\u0001\u0000\u0000\u0000^]\u0001\u0000\u0000"+ "^[\u0001\u0000\u0000\u0000^\\\u0001\u0000\u0000\u0000^]\u0001\u0000\u0000"+
"\u0000_\t\u0001\u0000\u0000\u0000`a\u0005\u0012\u0000\u0000ab\u0003\u0006"+ "\u0000_\t\u0001\u0000\u0000\u0000`a\u0005\u0013\u0000\u0000ab\u0003\u0006"+
"\u0003\u0000bc\u0003:\u001d\u0000ce\u0005\u0005\u0000\u0000df\u0003\u0010"+ "\u0003\u0000bc\u0003:\u001d\u0000ce\u0005\u0005\u0000\u0000df\u0003\u0010"+
"\b\u0000ed\u0001\u0000\u0000\u0000ef\u0001\u0000\u0000\u0000fg\u0001\u0000"+ "\b\u0000ed\u0001\u0000\u0000\u0000ef\u0001\u0000\u0000\u0000fg\u0001\u0000"+
"\u0000\u0000gh\u0005\u0006\u0000\u0000hi\u0003\u0014\n\u0000i\u000b\u0001"+ "\u0000\u0000gh\u0005\u0006\u0000\u0000hi\u0003\u0014\n\u0000i\u000b\u0001"+
"\u0000\u0000\u0000jk\u0005\u0012\u0000\u0000kl\u0005\u0007\u0000\u0000"+ "\u0000\u0000\u0000jk\u0005\u0013\u0000\u0000kl\u0005\u0007\u0000\u0000"+
"lm\u0005.\u0000\u0000mn\u0005\b\u0000\u0000no\u0005\u0005\u0000\u0000"+ "lm\u0005/\u0000\u0000mn\u0005\b\u0000\u0000no\u0005\u0005\u0000\u0000"+
"op\u0005\t\u0000\u0000pq\u0005\u0006\u0000\u0000qr\u0003\u0014\n\u0000"+ "op\u0005\t\u0000\u0000pq\u0005\u0006\u0000\u0000qr\u0003\u0014\n\u0000"+
"r\r\u0001\u0000\u0000\u0000st\u0005\u0012\u0000\u0000tu\u0003:\u001d\u0000"+ "r\r\u0001\u0000\u0000\u0000st\u0005\u0013\u0000\u0000tu\u0003:\u001d\u0000"+
"uw\u0005\u0005\u0000\u0000vx\u0003\u0010\b\u0000wv\u0001\u0000\u0000\u0000"+ "uw\u0005\u0005\u0000\u0000vx\u0003\u0010\b\u0000wv\u0001\u0000\u0000\u0000"+
"wx\u0001\u0000\u0000\u0000xy\u0001\u0000\u0000\u0000yz\u0005\u0006\u0000"+ "wx\u0001\u0000\u0000\u0000xy\u0001\u0000\u0000\u0000yz\u0005\u0006\u0000"+
"\u0000z{\u0003\u0014\n\u0000{\u000f\u0001\u0000\u0000\u0000|\u0081\u0003"+ "\u0000z{\u0003\u0014\n\u0000{\u000f\u0001\u0000\u0000\u0000|\u0081\u0003"+
@ -2815,108 +2853,112 @@ public class DecafParser extends Parser {
"\u0000\u0000\u0091\u0092\u0005\u0003\u0000\u0000\u0092\u0015\u0001\u0000"+ "\u0000\u0000\u0091\u0092\u0005\u0003\u0000\u0000\u0092\u0015\u0001\u0000"+
"\u0000\u0000\u0093\u0094\u0003\b\u0004\u0000\u0094\u0095\u0003:\u001d"+ "\u0000\u0000\u0093\u0094\u0003\b\u0004\u0000\u0094\u0095\u0003:\u001d"+
"\u0000\u0095\u0017\u0001\u0000\u0000\u0000\u0096\u0097\u0003\b\u0004\u0000"+ "\u0000\u0095\u0017\u0001\u0000\u0000\u0000\u0096\u0097\u0003\b\u0004\u0000"+
"\u0097\u0098\u0003:\u001d\u0000\u0098\u0099\u0005%\u0000\u0000\u0099\u009a"+ "\u0097\u0098\u0003:\u001d\u0000\u0098\u0099\u0005&\u0000\u0000\u0099\u009a"+
"\u0003 \u0010\u0000\u009a\u0019\u0001\u0000\u0000\u0000\u009b\u009c\u0005"+ "\u0003 \u0010\u0000\u009a\u0019\u0001\u0000\u0000\u0000\u009b\u009c\u0005"+
"\u000b\u0000\u0000\u009c\u009d\u0003 \u0010\u0000\u009d\u009e\u0005\u0004"+ "\u000b\u0000\u0000\u009c\u009d\u0003 \u0010\u0000\u009d\u009e\u0005\u0004"+
"\u0000\u0000\u009e\u00a2\u0001\u0000\u0000\u0000\u009f\u00a0\u0005\u000b"+ "\u0000\u0000\u009e\u00a2\u0001\u0000\u0000\u0000\u009f\u00a0\u0005\u000b"+
"\u0000\u0000\u00a0\u00a2\u0005\u0004\u0000\u0000\u00a1\u009b\u0001\u0000"+ "\u0000\u0000\u00a0\u00a2\u0005\u0004\u0000\u0000\u00a1\u009b\u0001\u0000"+
"\u0000\u0000\u00a1\u009f\u0001\u0000\u0000\u0000\u00a2\u001b\u0001\u0000"+ "\u0000\u0000\u00a1\u009f\u0001\u0000\u0000\u0000\u00a2\u001b\u0001\u0000"+
"\u0000\u0000\u00a3\u00d1\u00034\u001a\u0000\u00a4\u00a5\u0005\f\u0000"+ "\u0000\u0000\u00a3\u00d7\u00034\u001a\u0000\u00a4\u00a5\u0005\f\u0000"+
"\u0000\u00a5\u00a8\u0005\u0005\u0000\u0000\u00a6\u00a9\u0003(\u0014\u0000"+ "\u0000\u00a5\u00a8\u0005\u0005\u0000\u0000\u00a6\u00a9\u0003(\u0014\u0000"+
"\u00a7\u00a9\u0003\u0018\f\u0000\u00a8\u00a6\u0001\u0000\u0000\u0000\u00a8"+ "\u00a7\u00a9\u0003\u0018\f\u0000\u00a8\u00a6\u0001\u0000\u0000\u0000\u00a8"+
"\u00a7\u0001\u0000\u0000\u0000\u00a9\u00aa\u0001\u0000\u0000\u0000\u00aa"+ "\u00a7\u0001\u0000\u0000\u0000\u00a9\u00aa\u0001\u0000\u0000\u0000\u00aa"+
"\u00ab\u0005\u0004\u0000\u0000\u00ab\u00ac\u0003 \u0010\u0000\u00ac\u00ad"+ "\u00ab\u0005\u0004\u0000\u0000\u00ab\u00ac\u0003 \u0010\u0000\u00ac\u00ad"+
"\u0005\u0004\u0000\u0000\u00ad\u00ae\u0003(\u0014\u0000\u00ae\u00af\u0005"+ "\u0005\u0004\u0000\u0000\u00ad\u00ae\u0003(\u0014\u0000\u00ae\u00af\u0005"+
"\u0006\u0000\u0000\u00af\u00b0\u0003\u0014\n\u0000\u00b0\u00d1\u0001\u0000"+ "\u0006\u0000\u0000\u00af\u00b0\u0003\u0014\n\u0000\u00b0\u00d7\u0001\u0000"+
"\u0000\u0000\u00b1\u00b2\u0005\r\u0000\u0000\u00b2\u00b3\u0005\u0005\u0000"+ "\u0000\u0000\u00b1\u00b2\u0005\r\u0000\u0000\u00b2\u00b3\u0005\u0005\u0000"+
"\u0000\u00b3\u00b4\u0003 \u0010\u0000\u00b4\u00b5\u0005\u0006\u0000\u0000"+ "\u0000\u00b3\u00b4\u0003 \u0010\u0000\u00b4\u00b5\u0005\u0006\u0000\u0000"+
"\u00b5\u00b6\u0003\u0014\n\u0000\u00b6\u00d1\u0001\u0000\u0000\u0000\u00b7"+ "\u00b5\u00b6\u0003\u0014\n\u0000\u00b6\u00d7\u0001\u0000\u0000\u0000\u00b7"+
"\u00b8\u0005\u000e\u0000\u0000\u00b8\u00b9\u0003\u0014\n\u0000\u00b9\u00ba"+ "\u00b8\u0005\u000e\u0000\u0000\u00b8\u00b9\u0003\u0014\n\u0000\u00b9\u00ba"+
"\u0005\r\u0000\u0000\u00ba\u00bb\u0005\u0005\u0000\u0000\u00bb\u00bc\u0003"+ "\u0005\r\u0000\u0000\u00ba\u00bb\u0005\u0005\u0000\u0000\u00bb\u00bc\u0003"+
" \u0010\u0000\u00bc\u00be\u0005\u0006\u0000\u0000\u00bd\u00bf\u0005\u0004"+ " \u0010\u0000\u00bc\u00be\u0005\u0006\u0000\u0000\u00bd\u00bf\u0005\u0004"+
"\u0000\u0000\u00be\u00bd\u0001\u0000\u0000\u0000\u00be\u00bf\u0001\u0000"+ "\u0000\u0000\u00be\u00bd\u0001\u0000\u0000\u0000\u00be\u00bf\u0001\u0000"+
"\u0000\u0000\u00bf\u00d1\u0001\u0000\u0000\u0000\u00c0\u00c1\u0005\u000f"+ "\u0000\u0000\u00bf\u00d7\u0001\u0000\u0000\u0000\u00c0\u00c1\u0005\u000f"+
"\u0000\u0000\u00c1\u00d1\u0005\u0004\u0000\u0000\u00c2\u00c3\u0005\u0010"+ "\u0000\u0000\u00c1\u00d7\u0005\u0004\u0000\u0000\u00c2\u00c3\u0005\u0010"+
"\u0000\u0000\u00c3\u00d1\u0005\u0004\u0000\u0000\u00c4\u00c5\u0003\u0016"+ "\u0000\u0000\u00c3\u00d7\u0005\u0004\u0000\u0000\u00c4\u00c5\u0003\u0016"+
"\u000b\u0000\u00c5\u00c6\u0005\u0004\u0000\u0000\u00c6\u00d1\u0001\u0000"+ "\u000b\u0000\u00c5\u00c6\u0005\u0004\u0000\u0000\u00c6\u00d7\u0001\u0000"+
"\u0000\u0000\u00c7\u00c8\u0003\u0018\f\u0000\u00c8\u00c9\u0005\u0004\u0000"+ "\u0000\u0000\u00c7\u00c8\u0003\u0018\f\u0000\u00c8\u00c9\u0005\u0004\u0000"+
"\u0000\u00c9\u00d1\u0001\u0000\u0000\u0000\u00ca\u00cb\u0003(\u0014\u0000"+ "\u0000\u00c9\u00d7\u0001\u0000\u0000\u0000\u00ca\u00cb\u0003(\u0014\u0000"+
"\u00cb\u00cc\u0005\u0004\u0000\u0000\u00cc\u00d1\u0001\u0000\u0000\u0000"+ "\u00cb\u00cc\u0005\u0004\u0000\u0000\u00cc\u00d7\u0001\u0000\u0000\u0000"+
"\u00cd\u00ce\u0003\u001e\u000f\u0000\u00ce\u00cf\u0005\u0004\u0000\u0000"+ "\u00cd\u00ce\u0005\u0011\u0000\u0000\u00ce\u00cf\u0005\u0005\u0000\u0000"+
"\u00cf\u00d1\u0001\u0000\u0000\u0000\u00d0\u00a3\u0001\u0000\u0000\u0000"+ "\u00cf\u00d0\u0003 \u0010\u0000\u00d0\u00d1\u0005\u0006\u0000\u0000\u00d1"+
"\u00d0\u00a4\u0001\u0000\u0000\u0000\u00d0\u00b1\u0001\u0000\u0000\u0000"+ "\u00d2\u0005\u0004\u0000\u0000\u00d2\u00d7\u0001\u0000\u0000\u0000\u00d3"+
"\u00d0\u00b7\u0001\u0000\u0000\u0000\u00d0\u00c0\u0001\u0000\u0000\u0000"+ "\u00d4\u0003\u001e\u000f\u0000\u00d4\u00d5\u0005\u0004\u0000\u0000\u00d5"+
"\u00d0\u00c2\u0001\u0000\u0000\u0000\u00d0\u00c4\u0001\u0000\u0000\u0000"+ "\u00d7\u0001\u0000\u0000\u0000\u00d6\u00a3\u0001\u0000\u0000\u0000\u00d6"+
"\u00d0\u00c7\u0001\u0000\u0000\u0000\u00d0\u00ca\u0001\u0000\u0000\u0000"+ "\u00a4\u0001\u0000\u0000\u0000\u00d6\u00b1\u0001\u0000\u0000\u0000\u00d6"+
"\u00d0\u00cd\u0001\u0000\u0000\u0000\u00d1\u001d\u0001\u0000\u0000\u0000"+ "\u00b7\u0001\u0000\u0000\u0000\u00d6\u00c0\u0001\u0000\u0000\u0000\u00d6"+
"\u00d2\u00d5\u0003*\u0015\u0000\u00d3\u00d5\u0003,\u0016\u0000\u00d4\u00d2"+ "\u00c2\u0001\u0000\u0000\u0000\u00d6\u00c4\u0001\u0000\u0000\u0000\u00d6"+
"\u0001\u0000\u0000\u0000\u00d4\u00d3\u0001\u0000\u0000\u0000\u00d5\u001f"+ "\u00c7\u0001\u0000\u0000\u0000\u00d6\u00ca\u0001\u0000\u0000\u0000\u00d6"+
"\u0001\u0000\u0000\u0000\u00d6\u00d7\u0006\u0010\uffff\uffff\u0000\u00d7"+ "\u00cd\u0001\u0000\u0000\u0000\u00d6\u00d3\u0001\u0000\u0000\u0000\u00d7"+
"\u00d8\u0003$\u0012\u0000\u00d8\u00d9\u0003 \u0010\u0005\u00d9\u00e2\u0001"+ "\u001d\u0001\u0000\u0000\u0000\u00d8\u00db\u0003*\u0015\u0000\u00d9\u00db"+
"\u0000\u0000\u0000\u00da\u00e2\u00038\u001c\u0000\u00db\u00dc\u0005\u0005"+ "\u0003,\u0016\u0000\u00da\u00d8\u0001\u0000\u0000\u0000\u00da\u00d9\u0001"+
"\u0000\u0000\u00dc\u00dd\u0003 \u0010\u0000\u00dd\u00de\u0005\u0006\u0000"+ "\u0000\u0000\u0000\u00db\u001f\u0001\u0000\u0000\u0000\u00dc\u00dd\u0006"+
"\u0000\u00de\u00e2\u0001\u0000\u0000\u0000\u00df\u00e2\u0003&\u0013\u0000"+ "\u0010\uffff\uffff\u0000\u00dd\u00de\u0003$\u0012\u0000\u00de\u00df\u0003"+
"\u00e0\u00e2\u0003\u001e\u000f\u0000\u00e1\u00d6\u0001\u0000\u0000\u0000"+ " \u0010\u0005\u00df\u00e8\u0001\u0000\u0000\u0000\u00e0\u00e8\u00038\u001c"+
"\u00e1\u00da\u0001\u0000\u0000\u0000\u00e1\u00db\u0001\u0000\u0000\u0000"+ "\u0000\u00e1\u00e2\u0005\u0005\u0000\u0000\u00e2\u00e3\u0003 \u0010\u0000"+
"\u00e1\u00df\u0001\u0000\u0000\u0000\u00e1\u00e0\u0001\u0000\u0000\u0000"+ "\u00e3\u00e4\u0005\u0006\u0000\u0000\u00e4\u00e8\u0001\u0000\u0000\u0000"+
"\u00e2\u00e9\u0001\u0000\u0000\u0000\u00e3\u00e4\n\u0006\u0000\u0000\u00e4"+ "\u00e5\u00e8\u0003&\u0013\u0000\u00e6\u00e8\u0003\u001e\u000f\u0000\u00e7"+
"\u00e5\u0003\"\u0011\u0000\u00e5\u00e6\u0003 \u0010\u0007\u00e6\u00e8"+ "\u00dc\u0001\u0000\u0000\u0000\u00e7\u00e0\u0001\u0000\u0000\u0000\u00e7"+
"\u0001\u0000\u0000\u0000\u00e7\u00e3\u0001\u0000\u0000\u0000\u00e8\u00eb"+ "\u00e1\u0001\u0000\u0000\u0000\u00e7\u00e5\u0001\u0000\u0000\u0000\u00e7"+
"\u0001\u0000\u0000\u0000\u00e9\u00e7\u0001\u0000\u0000\u0000\u00e9\u00ea"+ "\u00e6\u0001\u0000\u0000\u0000\u00e8\u00ef\u0001\u0000\u0000\u0000\u00e9"+
"\u0001\u0000\u0000\u0000\u00ea!\u0001\u0000\u0000\u0000\u00eb\u00e9\u0001"+ "\u00ea\n\u0006\u0000\u0000\u00ea\u00eb\u0003\"\u0011\u0000\u00eb\u00ec"+
"\u0000\u0000\u0000\u00ec\u00ed\u0007\u0001\u0000\u0000\u00ed#\u0001\u0000"+ "\u0003 \u0010\u0007\u00ec\u00ee\u0001\u0000\u0000\u0000\u00ed\u00e9\u0001"+
"\u0000\u0000\u00ee\u00ef\u0007\u0002\u0000\u0000\u00ef%\u0001\u0000\u0000"+ "\u0000\u0000\u0000\u00ee\u00f1\u0001\u0000\u0000\u0000\u00ef\u00ed\u0001"+
"\u0000\u00f0\u00f1\u0005\u0015\u0000\u0000\u00f1\u00f6\u0005\u0011\u0000"+ "\u0000\u0000\u0000\u00ef\u00f0\u0001\u0000\u0000\u0000\u00f0!\u0001\u0000"+
"\u0000\u00f2\u00f3\u0003,\u0016\u0000\u00f3\u00f4\u0005\u0011\u0000\u0000"+ "\u0000\u0000\u00f1\u00ef\u0001\u0000\u0000\u0000\u00f2\u00f3\u0007\u0001"+
"\u00f4\u00f6\u0001\u0000\u0000\u0000\u00f5\u00f0\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u00f3#\u0001\u0000\u0000\u0000\u00f4\u00f5\u0007\u0002\u0000"+
"\u00f5\u00f2\u0001\u0000\u0000\u0000\u00f5\u00f6\u0001\u0000\u0000\u0000"+ "\u0000\u00f5%\u0001\u0000\u0000\u0000\u00f6\u00f7\u0005\u0016\u0000\u0000"+
"\u00f6\u00fc\u0001\u0000\u0000\u0000\u00f7\u00f8\u0003.\u0017\u0000\u00f8"+ "\u00f7\u00fc\u0005\u0012\u0000\u0000\u00f8\u00f9\u0003,\u0016\u0000\u00f9"+
"\u00f9\u0005\u0011\u0000\u0000\u00f9\u00fb\u0001\u0000\u0000\u0000\u00fa"+ "\u00fa\u0005\u0012\u0000\u0000\u00fa\u00fc\u0001\u0000\u0000\u0000\u00fb"+
"\u00f7\u0001\u0000\u0000\u0000\u00fb\u00fe\u0001\u0000\u0000\u0000\u00fc"+ "\u00f6\u0001\u0000\u0000\u0000\u00fb\u00f8\u0001\u0000\u0000\u0000\u00fb"+
"\u00fa\u0001\u0000\u0000\u0000\u00fc\u00fd\u0001\u0000\u0000\u0000\u00fd"+ "\u00fc\u0001\u0000\u0000\u0000\u00fc\u0102\u0001\u0000\u0000\u0000\u00fd"+
"\u00ff\u0001\u0000\u0000\u0000\u00fe\u00fc\u0001\u0000\u0000\u0000\u00ff"+ "\u00fe\u0003.\u0017\u0000\u00fe\u00ff\u0005\u0012\u0000\u0000\u00ff\u0101"+
"\u0100\u0003:\u001d\u0000\u0100\'\u0001\u0000\u0000\u0000\u0101\u0102"+ "\u0001\u0000\u0000\u0000\u0100\u00fd\u0001\u0000\u0000\u0000\u0101\u0104"+
"\u0003&\u0013\u0000\u0102\u0103\u0003\u0004\u0002\u0000\u0103\u0104\u0003"+ "\u0001\u0000\u0000\u0000\u0102\u0100\u0001\u0000\u0000\u0000\u0102\u0103"+
" \u0010\u0000\u0104)\u0001\u0000\u0000\u0000\u0105\u0106\u0005\u0015\u0000"+ "\u0001\u0000\u0000\u0000\u0103\u0105\u0001\u0000\u0000\u0000\u0104\u0102"+
"\u0000\u0106\u010b\u0005\u0011\u0000\u0000\u0107\u0108\u0003,\u0016\u0000"+ "\u0001\u0000\u0000\u0000\u0105\u0106\u0003:\u001d\u0000\u0106\'\u0001"+
"\u0108\u0109\u0005\u0011\u0000\u0000\u0109\u010b\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u0107\u0108\u0003&\u0013\u0000\u0108\u0109\u0003\u0004"+
"\u010a\u0105\u0001\u0000\u0000\u0000\u010a\u0107\u0001\u0000\u0000\u0000"+ "\u0002\u0000\u0109\u010a\u0003 \u0010\u0000\u010a)\u0001\u0000\u0000\u0000"+
"\u010a\u010b\u0001\u0000\u0000\u0000\u010b\u0111\u0001\u0000\u0000\u0000"+ "\u010b\u010c\u0005\u0016\u0000\u0000\u010c\u0111\u0005\u0012\u0000\u0000"+
"\u010c\u010d\u0003.\u0017\u0000\u010d\u010e\u0005\u0011\u0000\u0000\u010e"+ "\u010d\u010e\u0003,\u0016\u0000\u010e\u010f\u0005\u0012\u0000\u0000\u010f"+
"\u0110\u0001\u0000\u0000\u0000\u010f\u010c\u0001\u0000\u0000\u0000\u0110"+ "\u0111\u0001\u0000\u0000\u0000\u0110\u010b\u0001\u0000\u0000\u0000\u0110"+
"\u0113\u0001\u0000\u0000\u0000\u0111\u010f\u0001\u0000\u0000\u0000\u0111"+ "\u010d\u0001\u0000\u0000\u0000\u0110\u0111\u0001\u0000\u0000\u0000\u0111"+
"\u0112\u0001\u0000\u0000\u0000\u0112\u0114\u0001\u0000\u0000\u0000\u0113"+ "\u0117\u0001\u0000\u0000\u0000\u0112\u0113\u0003.\u0017\u0000\u0113\u0114"+
"\u0111\u0001\u0000\u0000\u0000\u0114\u0115\u00030\u0018\u0000\u0115+\u0001"+ "\u0005\u0012\u0000\u0000\u0114\u0116\u0001\u0000\u0000\u0000\u0115\u0112"+
"\u0000\u0000\u0000\u0116\u0117\u0005\u0013\u0000\u0000\u0117\u0118\u0003"+ "\u0001\u0000\u0000\u0000\u0116\u0119\u0001\u0000\u0000\u0000\u0117\u0115"+
"\b\u0004\u0000\u0118\u011a\u0005\u0005\u0000\u0000\u0119\u011b\u00032"+ "\u0001\u0000\u0000\u0000\u0117\u0118\u0001\u0000\u0000\u0000\u0118\u011a"+
"\u0019\u0000\u011a\u0119\u0001\u0000\u0000\u0000\u011a\u011b\u0001\u0000"+ "\u0001\u0000\u0000\u0000\u0119\u0117\u0001\u0000\u0000\u0000\u011a\u011b"+
"\u0000\u0000\u011b\u011c\u0001\u0000\u0000\u0000\u011c\u011d\u0005\u0006"+ "\u00030\u0018\u0000\u011b+\u0001\u0000\u0000\u0000\u011c\u011d\u0005\u0014"+
"\u0000\u0000\u011d-\u0001\u0000\u0000\u0000\u011e\u0121\u00030\u0018\u0000"+ "\u0000\u0000\u011d\u011e\u0003\b\u0004\u0000\u011e\u0120\u0005\u0005\u0000"+
"\u011f\u0121\u0003:\u001d\u0000\u0120\u011e\u0001\u0000\u0000\u0000\u0120"+ "\u0000\u011f\u0121\u00032\u0019\u0000\u0120\u011f\u0001\u0000\u0000\u0000"+
"\u011f\u0001\u0000\u0000\u0000\u0121/\u0001\u0000\u0000\u0000\u0122\u0123"+ "\u0120\u0121\u0001\u0000\u0000\u0000\u0121\u0122\u0001\u0000\u0000\u0000"+
"\u0003:\u001d\u0000\u0123\u0125\u0005\u0005\u0000\u0000\u0124\u0126\u0003"+ "\u0122\u0123\u0005\u0006\u0000\u0000\u0123-\u0001\u0000\u0000\u0000\u0124"+
"2\u0019\u0000\u0125\u0124\u0001\u0000\u0000\u0000\u0125\u0126\u0001\u0000"+ "\u0127\u00030\u0018\u0000\u0125\u0127\u0003:\u001d\u0000\u0126\u0124\u0001"+
"\u0000\u0000\u0126\u0127\u0001\u0000\u0000\u0000\u0127\u0128\u0005\u0006"+ "\u0000\u0000\u0000\u0126\u0125\u0001\u0000\u0000\u0000\u0127/\u0001\u0000"+
"\u0000\u0000\u01281\u0001\u0000\u0000\u0000\u0129\u012e\u0003 \u0010\u0000"+ "\u0000\u0000\u0128\u0129\u0003:\u001d\u0000\u0129\u012b\u0005\u0005\u0000"+
"\u012a\u012b\u0005\n\u0000\u0000\u012b\u012d\u0003 \u0010\u0000\u012c"+ "\u0000\u012a\u012c\u00032\u0019\u0000\u012b\u012a\u0001\u0000\u0000\u0000"+
"\u012a\u0001\u0000\u0000\u0000\u012d\u0130\u0001\u0000\u0000\u0000\u012e"+ "\u012b\u012c\u0001\u0000\u0000\u0000\u012c\u012d\u0001\u0000\u0000\u0000"+
"\u012c\u0001\u0000\u0000\u0000\u012e\u012f\u0001\u0000\u0000\u0000\u012f"+ "\u012d\u012e\u0005\u0006\u0000\u0000\u012e1\u0001\u0000\u0000\u0000\u012f"+
"3\u0001\u0000\u0000\u0000\u0130\u012e\u0001\u0000\u0000\u0000\u0131\u0132"+ "\u0134\u0003 \u0010\u0000\u0130\u0131\u0005\n\u0000\u0000\u0131\u0133"+
"\u0005\u0016\u0000\u0000\u0132\u0133\u0005\u0005\u0000\u0000\u0133\u0134"+ "\u0003 \u0010\u0000\u0132\u0130\u0001\u0000\u0000\u0000\u0133\u0136\u0001"+
"\u0003 \u0010\u0000\u0134\u0135\u0005\u0006\u0000\u0000\u0135\u0139\u0003"+ "\u0000\u0000\u0000\u0134\u0132\u0001\u0000\u0000\u0000\u0134\u0135\u0001"+
"\u0014\n\u0000\u0136\u0138\u00036\u001b\u0000\u0137\u0136\u0001\u0000"+ "\u0000\u0000\u0000\u01353\u0001\u0000\u0000\u0000\u0136\u0134\u0001\u0000"+
"\u0000\u0000\u0138\u013b\u0001\u0000\u0000\u0000\u0139\u0137\u0001\u0000"+ "\u0000\u0000\u0137\u0138\u0005\u0017\u0000\u0000\u0138\u0139\u0005\u0005"+
"\u0000\u0000\u0139\u013a\u0001\u0000\u0000\u0000\u013a\u013e\u0001\u0000"+ "\u0000\u0000\u0139\u013a\u0003 \u0010\u0000\u013a\u013b\u0005\u0006\u0000"+
"\u0000\u0000\u013b\u0139\u0001\u0000\u0000\u0000\u013c\u013d\u0005\u0017"+ "\u0000\u013b\u013f\u0003\u0014\n\u0000\u013c\u013e\u00036\u001b\u0000"+
"\u0000\u0000\u013d\u013f\u0003\u0014\n\u0000\u013e\u013c\u0001\u0000\u0000"+ "\u013d\u013c\u0001\u0000\u0000\u0000\u013e\u0141\u0001\u0000\u0000\u0000"+
"\u0000\u013e\u013f\u0001\u0000\u0000\u0000\u013f5\u0001\u0000\u0000\u0000"+ "\u013f\u013d\u0001\u0000\u0000\u0000\u013f\u0140\u0001\u0000\u0000\u0000"+
"\u0140\u0141\u0005\u0017\u0000\u0000\u0141\u0142\u0005\u0016\u0000\u0000"+ "\u0140\u0144\u0001\u0000\u0000\u0000\u0141\u013f\u0001\u0000\u0000\u0000"+
"\u0142\u0143\u0005\u0005\u0000\u0000\u0143\u0144\u0003 \u0010\u0000\u0144"+ "\u0142\u0143\u0005\u0018\u0000\u0000\u0143\u0145\u0003\u0014\n\u0000\u0144"+
"\u0145\u0005\u0006\u0000\u0000\u0145\u0146\u0003\u0014\n\u0000\u01467"+ "\u0142\u0001\u0000\u0000\u0000\u0144\u0145\u0001\u0000\u0000\u0000\u0145"+
"\u0001\u0000\u0000\u0000\u0147\u0148\u0007\u0003\u0000\u0000\u01489\u0001"+ "5\u0001\u0000\u0000\u0000\u0146\u0147\u0005\u0018\u0000\u0000\u0147\u0148"+
"\u0000\u0000\u0000\u0149\u014a\u00052\u0000\u0000\u014a;\u0001\u0000\u0000"+ "\u0005\u0017\u0000\u0000\u0148\u0149\u0005\u0005\u0000\u0000\u0149\u014a"+
"\u0000\u001cAFHNX^ew\u0081\u008b\u008f\u00a1\u00a8\u00be\u00d0\u00d4\u00e1"+ "\u0003 \u0010\u0000\u014a\u014b\u0005\u0006\u0000\u0000\u014b\u014c\u0003"+
"\u00e9\u00f5\u00fc\u010a\u0111\u011a\u0120\u0125\u012e\u0139\u013e"; "\u0014\n\u0000\u014c7\u0001\u0000\u0000\u0000\u014d\u014e\u0007\u0003"+
"\u0000\u0000\u014e9\u0001\u0000\u0000\u0000\u014f\u0150\u00053\u0000\u0000"+
"\u0150;\u0001\u0000\u0000\u0000\u001cAFHNX^ew\u0081\u008b\u008f\u00a1"+
"\u00a8\u00be\u00d6\u00da\u00e7\u00ef\u00fb\u0102\u0110\u0117\u0120\u0126"+
"\u012b\u0134\u013f\u0144";
public static final ATN _ATN = public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray()); new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static { static {

View File

@ -1,4 +1,4 @@
// Generated from C:/Users/laure/Documents/Dev/Compilerbau/Projekt/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1 // Generated from C:/dev/Uni/CompilerULTIMATE/src/main/antlr/Decaf.g4 by ANTLR 4.13.1
package de.maishai.antlr; package de.maishai.antlr;
import org.antlr.v4.runtime.tree.ParseTreeVisitor; import org.antlr.v4.runtime.tree.ParseTreeVisitor;
@ -157,6 +157,13 @@ public interface DecafVisitor<T> extends ParseTreeVisitor<T> {
* @return the visitor result * @return the visitor result
*/ */
T visitAssignment(DecafParser.AssignmentContext ctx); T visitAssignment(DecafParser.AssignmentContext ctx);
/**
* Visit a parse tree produced by the {@code Print}
* labeled alternative in {@link DecafParser#stmt}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitPrint(DecafParser.PrintContext ctx);
/** /**
* Visit a parse tree produced by the {@code StatementExpressionstmt} * Visit a parse tree produced by the {@code StatementExpressionstmt}
* labeled alternative in {@link DecafParser#stmt}. * labeled alternative in {@link DecafParser#stmt}.

View File

@ -0,0 +1,4 @@
package de.maishai.ast.records;
public record Print(Expression value) implements Statement {
}

View File

@ -1,4 +1,4 @@
package de.maishai.ast.records; package de.maishai.ast.records;
public sealed interface Statement extends Node permits Assignment, Break, Continue, Declaration, DoWhile, For, IfElse, MethodCall, New, Return, While { public sealed interface Statement extends Node permits Assignment, Break, Continue, Declaration, DoWhile, For, IfElse, MethodCall, New, Print, Return, While {
} }

View File

@ -15,6 +15,7 @@ public class ClassCanBeBytecoded {
var1 = var1 + 1; var1 = var1 + 1;
} }
} }
print(x);
return var1; return var1;
} }
} }