diff --git a/src/main/java/Decaf.g4 b/src/main/java/Decaf.g4 index 30455b5..ea4066c 100644 --- a/src/main/java/Decaf.g4 +++ b/src/main/java/Decaf.g4 @@ -65,7 +65,7 @@ MainMethodDecl : 'public static void main(String[] args)'; //Types Void : 'void'; Int : 'int'; -Boolean : 'bool'; +Boolean : 'boolean'; Char : 'char'; //Operators diff --git a/src/main/java/Input.java b/src/main/java/Input.java index 3dd70ab..8521bf3 100644 --- a/src/main/java/Input.java +++ b/src/main/java/Input.java @@ -1,13 +1,29 @@ +class ExampleEmpty { + +} + class Example { int i; boolean b; char c; - public char m(int n) { - if (true) { - return 'a'; - } else { - return 'b'; - } +} +class Example2 { + boolean instVarBool; + int m(int n){ + int localA; + int localB; + return n; + } +} + +class Example3 { + char isNice; + char m(int n) { + int test = 12; + this.m(test); + boolean l; + l = false; + return 't'; } } diff --git a/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java b/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java index a1de06a..88b3ec3 100644 --- a/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java +++ b/src/main/java/abstractSyntaxTree/StatementExpression/MethodCallStatementExpression.java @@ -11,19 +11,20 @@ import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Objects; +import java.util.*; public class MethodCallStatementExpression extends AbstractType implements IExpression, IStatement { String methodName; List arguments; + Receiver receiver; + List receivingMethods; RefType classThatHasTheMethodIfNotThis; RefType thisClass; - public MethodCallStatementExpression(String methodName, List arguments) { + public MethodCallStatementExpression(String methodName, Receiver receiver, List receivingMethods, List arguments) { this.methodName = methodName; + this.receiver = receiver; + this.receivingMethods = receivingMethods; this.arguments = arguments; } diff --git a/src/main/java/abstractSyntaxTree/StatementExpression/Receiver.java b/src/main/java/abstractSyntaxTree/StatementExpression/Receiver.java new file mode 100644 index 0000000..589c169 --- /dev/null +++ b/src/main/java/abstractSyntaxTree/StatementExpression/Receiver.java @@ -0,0 +1,30 @@ +package abstractSyntaxTree.StatementExpression; + +import abstractSyntaxTree.Expression.InstVarExpression; +import abstractSyntaxTree.Node; + +public class Receiver implements Node { + boolean thisExpression; + InstVarExpression instVarExpression; + NewStatementExpression newStatementExpression; + String identifier; + + public Receiver(boolean thisExpression) { + this.thisExpression = thisExpression; + } + + public Receiver(InstVarExpression instVarExpression) { + this.instVarExpression = instVarExpression; + } + + public Receiver(NewStatementExpression newStatementExpression) { + this.newStatementExpression = newStatementExpression; + } + + public Receiver(String identifier) { + this.identifier = identifier; + } +} + + + diff --git a/src/main/java/abstractSyntaxTree/StatementExpression/ReceivingMethod.java b/src/main/java/abstractSyntaxTree/StatementExpression/ReceivingMethod.java new file mode 100644 index 0000000..df6ffc1 --- /dev/null +++ b/src/main/java/abstractSyntaxTree/StatementExpression/ReceivingMethod.java @@ -0,0 +1,16 @@ +package abstractSyntaxTree.StatementExpression; + +import abstractSyntaxTree.Expression.IExpression; +import abstractSyntaxTree.Node; + +import java.util.List; + +public class ReceivingMethod implements Node { + String methodName; + List arguments; + + public ReceivingMethod(String methodName, List arguments) { + this.methodName = methodName; + this.arguments = arguments; + } +} diff --git a/src/main/java/abstractSyntaxTree/StatementExpression/SuperStatementExpression.java b/src/main/java/abstractSyntaxTree/StatementExpression/SuperStatementExpression.java index 61fa3cc..55d3467 100644 --- a/src/main/java/abstractSyntaxTree/StatementExpression/SuperStatementExpression.java +++ b/src/main/java/abstractSyntaxTree/StatementExpression/SuperStatementExpression.java @@ -4,7 +4,7 @@ import abstractSyntaxTree.Expression.IExpression; import java.util.List; public class SuperStatementExpression extends MethodCallStatementExpression{ - public SuperStatementExpression(String methodName, List arguments) { - super(methodName, arguments); + public SuperStatementExpression(String methodName, List arguments, List receivingMethods, Receiver receiver) { + super(methodName, receiver, receivingMethods, arguments); } } diff --git a/src/main/java/astGenerator/ASTGenerator.java b/src/main/java/astGenerator/ASTGenerator.java index 3815ee8..f20e62e 100644 --- a/src/main/java/astGenerator/ASTGenerator.java +++ b/src/main/java/astGenerator/ASTGenerator.java @@ -9,8 +9,7 @@ import abstractSyntaxTree.Parameter.Parameter; import abstractSyntaxTree.Parameter.ParameterList; import abstractSyntaxTree.Program; import abstractSyntaxTree.Statement.*; -import abstractSyntaxTree.StatementExpression.AssignStatementExpression; -import abstractSyntaxTree.StatementExpression.NewStatementExpression; +import abstractSyntaxTree.StatementExpression.*; import gen.DecafBaseVisitor; import gen.DecafParser; @@ -189,7 +188,33 @@ public class ASTGenerator extends DecafBaseVisitor { // @Override public Node visitMethodCall(DecafParser.MethodCallContext ctx) { - return super.visitMethodCall(ctx); + String methodName = ctx.Identifier().getText(); + List arguments = generateExpressions(ctx.argumentList()); + List receivingMethods = new ArrayList<>(); + for(DecafParser.ReceivingMethodContext receivingMethod: ctx.receivingMethod()) { + receivingMethods.add((ReceivingMethod) visit(receivingMethod)); + } + Receiver receiver = (Receiver) visit(ctx.receiver()); + return new MethodCallStatementExpression(methodName, receiver, receivingMethods, arguments); + } + + @Override + public Node visitReceivingMethod(DecafParser.ReceivingMethodContext ctx) { + return new ReceivingMethod(ctx.Identifier().getText(), generateExpressions(ctx.argumentList())); + } + + @Override + public Node visitReceiver(DecafParser.ReceiverContext ctx) { + if (ctx.This() != null) { + return new Receiver(true); + } else if (ctx.instVar() != null) { + return new Receiver((InstVarExpression) visit(ctx.instVar())); + } else if (ctx.newDecl() != null) { + return new Receiver((NewStatementExpression) visit(ctx.newDecl())); + } else if (ctx.Identifier() != null) { + return new Receiver(ctx.Identifier().getText()); + } + return null; } @Override diff --git a/src/main/java/gen/Decaf.interp b/src/main/java/gen/Decaf.interp index 7e784ba..327f176 100644 --- a/src/main/java/gen/Decaf.interp +++ b/src/main/java/gen/Decaf.interp @@ -6,7 +6,7 @@ null 'public static void main(String[] args)' 'void' 'int' -'bool' +'boolean' 'char' null null diff --git a/src/main/java/gen/Decaf.tokens b/src/main/java/gen/Decaf.tokens index bd7816d..501cbd7 100644 --- a/src/main/java/gen/Decaf.tokens +++ b/src/main/java/gen/Decaf.tokens @@ -48,7 +48,7 @@ WS=45 'public static void main(String[] args)'=4 'void'=5 'int'=6 -'bool'=7 +'boolean'=7 'char'=8 '='=13 '-'=14 diff --git a/src/main/java/gen/DecafLexer.interp b/src/main/java/gen/DecafLexer.interp index fdb7efd..ddc17ed 100644 --- a/src/main/java/gen/DecafLexer.interp +++ b/src/main/java/gen/DecafLexer.interp @@ -6,7 +6,7 @@ null 'public static void main(String[] args)' 'void' 'int' -'bool' +'boolean' 'char' null null @@ -152,4 +152,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 45, 322, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 107, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 3, 8, 182, 8, 8, 1, 9, 1, 9, 3, 9, 186, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 194, 8, 10, 1, 11, 1, 11, 3, 11, 198, 8, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 5, 41, 287, 8, 41, 10, 41, 12, 41, 290, 9, 41, 1, 41, 4, 41, 293, 8, 41, 11, 41, 12, 41, 294, 1, 42, 1, 42, 3, 42, 299, 8, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 3, 45, 310, 8, 45, 1, 46, 1, 46, 5, 46, 314, 8, 46, 10, 46, 12, 46, 317, 9, 46, 1, 47, 1, 47, 1, 47, 1, 47, 0, 0, 48, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 0, 89, 0, 91, 0, 93, 44, 95, 45, 1, 0, 6, 2, 0, 43, 43, 45, 45, 1, 0, 48, 57, 2, 0, 10, 10, 13, 13, 2, 0, 65, 90, 97, 122, 2, 0, 36, 36, 95, 95, 3, 0, 9, 10, 13, 13, 32, 32, 334, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 1, 106, 1, 0, 0, 0, 3, 108, 1, 0, 0, 0, 5, 113, 1, 0, 0, 0, 7, 120, 1, 0, 0, 0, 9, 159, 1, 0, 0, 0, 11, 164, 1, 0, 0, 0, 13, 168, 1, 0, 0, 0, 15, 173, 1, 0, 0, 0, 17, 181, 1, 0, 0, 0, 19, 185, 1, 0, 0, 0, 21, 193, 1, 0, 0, 0, 23, 197, 1, 0, 0, 0, 25, 199, 1, 0, 0, 0, 27, 201, 1, 0, 0, 0, 29, 203, 1, 0, 0, 0, 31, 205, 1, 0, 0, 0, 33, 207, 1, 0, 0, 0, 35, 209, 1, 0, 0, 0, 37, 211, 1, 0, 0, 0, 39, 213, 1, 0, 0, 0, 41, 215, 1, 0, 0, 0, 43, 218, 1, 0, 0, 0, 45, 221, 1, 0, 0, 0, 47, 224, 1, 0, 0, 0, 49, 227, 1, 0, 0, 0, 51, 229, 1, 0, 0, 0, 53, 232, 1, 0, 0, 0, 55, 235, 1, 0, 0, 0, 57, 237, 1, 0, 0, 0, 59, 239, 1, 0, 0, 0, 61, 241, 1, 0, 0, 0, 63, 243, 1, 0, 0, 0, 65, 245, 1, 0, 0, 0, 67, 247, 1, 0, 0, 0, 69, 249, 1, 0, 0, 0, 71, 255, 1, 0, 0, 0, 73, 260, 1, 0, 0, 0, 75, 266, 1, 0, 0, 0, 77, 269, 1, 0, 0, 0, 79, 274, 1, 0, 0, 0, 81, 281, 1, 0, 0, 0, 83, 288, 1, 0, 0, 0, 85, 296, 1, 0, 0, 0, 87, 302, 1, 0, 0, 0, 89, 304, 1, 0, 0, 0, 91, 309, 1, 0, 0, 0, 93, 311, 1, 0, 0, 0, 95, 318, 1, 0, 0, 0, 97, 98, 5, 116, 0, 0, 98, 99, 5, 114, 0, 0, 99, 100, 5, 117, 0, 0, 100, 107, 5, 101, 0, 0, 101, 102, 5, 102, 0, 0, 102, 103, 5, 97, 0, 0, 103, 104, 5, 108, 0, 0, 104, 105, 5, 115, 0, 0, 105, 107, 5, 101, 0, 0, 106, 97, 1, 0, 0, 0, 106, 101, 1, 0, 0, 0, 107, 2, 1, 0, 0, 0, 108, 109, 5, 110, 0, 0, 109, 110, 5, 117, 0, 0, 110, 111, 5, 108, 0, 0, 111, 112, 5, 108, 0, 0, 112, 4, 1, 0, 0, 0, 113, 114, 5, 112, 0, 0, 114, 115, 5, 117, 0, 0, 115, 116, 5, 98, 0, 0, 116, 117, 5, 108, 0, 0, 117, 118, 5, 105, 0, 0, 118, 119, 5, 99, 0, 0, 119, 6, 1, 0, 0, 0, 120, 121, 5, 112, 0, 0, 121, 122, 5, 117, 0, 0, 122, 123, 5, 98, 0, 0, 123, 124, 5, 108, 0, 0, 124, 125, 5, 105, 0, 0, 125, 126, 5, 99, 0, 0, 126, 127, 5, 32, 0, 0, 127, 128, 5, 115, 0, 0, 128, 129, 5, 116, 0, 0, 129, 130, 5, 97, 0, 0, 130, 131, 5, 116, 0, 0, 131, 132, 5, 105, 0, 0, 132, 133, 5, 99, 0, 0, 133, 134, 5, 32, 0, 0, 134, 135, 5, 118, 0, 0, 135, 136, 5, 111, 0, 0, 136, 137, 5, 105, 0, 0, 137, 138, 5, 100, 0, 0, 138, 139, 5, 32, 0, 0, 139, 140, 5, 109, 0, 0, 140, 141, 5, 97, 0, 0, 141, 142, 5, 105, 0, 0, 142, 143, 5, 110, 0, 0, 143, 144, 5, 40, 0, 0, 144, 145, 5, 83, 0, 0, 145, 146, 5, 116, 0, 0, 146, 147, 5, 114, 0, 0, 147, 148, 5, 105, 0, 0, 148, 149, 5, 110, 0, 0, 149, 150, 5, 103, 0, 0, 150, 151, 5, 91, 0, 0, 151, 152, 5, 93, 0, 0, 152, 153, 5, 32, 0, 0, 153, 154, 5, 97, 0, 0, 154, 155, 5, 114, 0, 0, 155, 156, 5, 103, 0, 0, 156, 157, 5, 115, 0, 0, 157, 158, 5, 41, 0, 0, 158, 8, 1, 0, 0, 0, 159, 160, 5, 118, 0, 0, 160, 161, 5, 111, 0, 0, 161, 162, 5, 105, 0, 0, 162, 163, 5, 100, 0, 0, 163, 10, 1, 0, 0, 0, 164, 165, 5, 105, 0, 0, 165, 166, 5, 110, 0, 0, 166, 167, 5, 116, 0, 0, 167, 12, 1, 0, 0, 0, 168, 169, 5, 98, 0, 0, 169, 170, 5, 111, 0, 0, 170, 171, 5, 111, 0, 0, 171, 172, 5, 108, 0, 0, 172, 14, 1, 0, 0, 0, 173, 174, 5, 99, 0, 0, 174, 175, 5, 104, 0, 0, 175, 176, 5, 97, 0, 0, 176, 177, 5, 114, 0, 0, 177, 16, 1, 0, 0, 0, 178, 182, 3, 31, 15, 0, 179, 182, 3, 33, 16, 0, 180, 182, 3, 35, 17, 0, 181, 178, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 181, 180, 1, 0, 0, 0, 182, 18, 1, 0, 0, 0, 183, 186, 3, 29, 14, 0, 184, 186, 3, 27, 13, 0, 185, 183, 1, 0, 0, 0, 185, 184, 1, 0, 0, 0, 186, 20, 1, 0, 0, 0, 187, 194, 3, 37, 18, 0, 188, 194, 3, 39, 19, 0, 189, 194, 3, 41, 20, 0, 190, 194, 3, 43, 21, 0, 191, 194, 3, 45, 22, 0, 192, 194, 3, 47, 23, 0, 193, 187, 1, 0, 0, 0, 193, 188, 1, 0, 0, 0, 193, 189, 1, 0, 0, 0, 193, 190, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 193, 192, 1, 0, 0, 0, 194, 22, 1, 0, 0, 0, 195, 198, 3, 51, 25, 0, 196, 198, 3, 53, 26, 0, 197, 195, 1, 0, 0, 0, 197, 196, 1, 0, 0, 0, 198, 24, 1, 0, 0, 0, 199, 200, 5, 61, 0, 0, 200, 26, 1, 0, 0, 0, 201, 202, 5, 45, 0, 0, 202, 28, 1, 0, 0, 0, 203, 204, 5, 43, 0, 0, 204, 30, 1, 0, 0, 0, 205, 206, 5, 42, 0, 0, 206, 32, 1, 0, 0, 0, 207, 208, 5, 47, 0, 0, 208, 34, 1, 0, 0, 0, 209, 210, 5, 37, 0, 0, 210, 36, 1, 0, 0, 0, 211, 212, 5, 62, 0, 0, 212, 38, 1, 0, 0, 0, 213, 214, 5, 60, 0, 0, 214, 40, 1, 0, 0, 0, 215, 216, 5, 62, 0, 0, 216, 217, 5, 61, 0, 0, 217, 42, 1, 0, 0, 0, 218, 219, 5, 60, 0, 0, 219, 220, 5, 61, 0, 0, 220, 44, 1, 0, 0, 0, 221, 222, 5, 61, 0, 0, 222, 223, 5, 61, 0, 0, 223, 46, 1, 0, 0, 0, 224, 225, 5, 33, 0, 0, 225, 226, 5, 61, 0, 0, 226, 48, 1, 0, 0, 0, 227, 228, 5, 33, 0, 0, 228, 50, 1, 0, 0, 0, 229, 230, 5, 38, 0, 0, 230, 231, 5, 38, 0, 0, 231, 52, 1, 0, 0, 0, 232, 233, 5, 124, 0, 0, 233, 234, 5, 124, 0, 0, 234, 54, 1, 0, 0, 0, 235, 236, 5, 46, 0, 0, 236, 56, 1, 0, 0, 0, 237, 238, 5, 40, 0, 0, 238, 58, 1, 0, 0, 0, 239, 240, 5, 41, 0, 0, 240, 60, 1, 0, 0, 0, 241, 242, 5, 123, 0, 0, 242, 62, 1, 0, 0, 0, 243, 244, 5, 125, 0, 0, 244, 64, 1, 0, 0, 0, 245, 246, 5, 59, 0, 0, 246, 66, 1, 0, 0, 0, 247, 248, 5, 44, 0, 0, 248, 68, 1, 0, 0, 0, 249, 250, 5, 99, 0, 0, 250, 251, 5, 108, 0, 0, 251, 252, 5, 97, 0, 0, 252, 253, 5, 115, 0, 0, 253, 254, 5, 115, 0, 0, 254, 70, 1, 0, 0, 0, 255, 256, 5, 116, 0, 0, 256, 257, 5, 104, 0, 0, 257, 258, 5, 105, 0, 0, 258, 259, 5, 115, 0, 0, 259, 72, 1, 0, 0, 0, 260, 261, 5, 119, 0, 0, 261, 262, 5, 104, 0, 0, 262, 263, 5, 105, 0, 0, 263, 264, 5, 108, 0, 0, 264, 265, 5, 101, 0, 0, 265, 74, 1, 0, 0, 0, 266, 267, 5, 105, 0, 0, 267, 268, 5, 102, 0, 0, 268, 76, 1, 0, 0, 0, 269, 270, 5, 101, 0, 0, 270, 271, 5, 108, 0, 0, 271, 272, 5, 115, 0, 0, 272, 273, 5, 101, 0, 0, 273, 78, 1, 0, 0, 0, 274, 275, 5, 114, 0, 0, 275, 276, 5, 101, 0, 0, 276, 277, 5, 116, 0, 0, 277, 278, 5, 117, 0, 0, 278, 279, 5, 114, 0, 0, 279, 280, 5, 110, 0, 0, 280, 80, 1, 0, 0, 0, 281, 282, 5, 110, 0, 0, 282, 283, 5, 101, 0, 0, 283, 284, 5, 119, 0, 0, 284, 82, 1, 0, 0, 0, 285, 287, 7, 0, 0, 0, 286, 285, 1, 0, 0, 0, 287, 290, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 292, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 291, 293, 7, 1, 0, 0, 292, 291, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 292, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 84, 1, 0, 0, 0, 296, 298, 5, 39, 0, 0, 297, 299, 8, 2, 0, 0, 298, 297, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 301, 5, 39, 0, 0, 301, 86, 1, 0, 0, 0, 302, 303, 7, 3, 0, 0, 303, 88, 1, 0, 0, 0, 304, 305, 7, 1, 0, 0, 305, 90, 1, 0, 0, 0, 306, 310, 3, 87, 43, 0, 307, 310, 3, 89, 44, 0, 308, 310, 7, 4, 0, 0, 309, 306, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 309, 308, 1, 0, 0, 0, 310, 92, 1, 0, 0, 0, 311, 315, 3, 87, 43, 0, 312, 314, 3, 91, 45, 0, 313, 312, 1, 0, 0, 0, 314, 317, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 94, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 318, 319, 7, 5, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 6, 47, 0, 0, 321, 96, 1, 0, 0, 0, 11, 0, 106, 181, 185, 193, 197, 288, 294, 298, 309, 315, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 45, 325, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 107, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 3, 8, 185, 8, 8, 1, 9, 1, 9, 3, 9, 189, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 197, 8, 10, 1, 11, 1, 11, 3, 11, 201, 8, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 5, 41, 290, 8, 41, 10, 41, 12, 41, 293, 9, 41, 1, 41, 4, 41, 296, 8, 41, 11, 41, 12, 41, 297, 1, 42, 1, 42, 3, 42, 302, 8, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 3, 45, 313, 8, 45, 1, 46, 1, 46, 5, 46, 317, 8, 46, 10, 46, 12, 46, 320, 9, 46, 1, 47, 1, 47, 1, 47, 1, 47, 0, 0, 48, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 0, 89, 0, 91, 0, 93, 44, 95, 45, 1, 0, 6, 2, 0, 43, 43, 45, 45, 1, 0, 48, 57, 2, 0, 10, 10, 13, 13, 2, 0, 65, 90, 97, 122, 2, 0, 36, 36, 95, 95, 3, 0, 9, 10, 13, 13, 32, 32, 337, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 1, 106, 1, 0, 0, 0, 3, 108, 1, 0, 0, 0, 5, 113, 1, 0, 0, 0, 7, 120, 1, 0, 0, 0, 9, 159, 1, 0, 0, 0, 11, 164, 1, 0, 0, 0, 13, 168, 1, 0, 0, 0, 15, 176, 1, 0, 0, 0, 17, 184, 1, 0, 0, 0, 19, 188, 1, 0, 0, 0, 21, 196, 1, 0, 0, 0, 23, 200, 1, 0, 0, 0, 25, 202, 1, 0, 0, 0, 27, 204, 1, 0, 0, 0, 29, 206, 1, 0, 0, 0, 31, 208, 1, 0, 0, 0, 33, 210, 1, 0, 0, 0, 35, 212, 1, 0, 0, 0, 37, 214, 1, 0, 0, 0, 39, 216, 1, 0, 0, 0, 41, 218, 1, 0, 0, 0, 43, 221, 1, 0, 0, 0, 45, 224, 1, 0, 0, 0, 47, 227, 1, 0, 0, 0, 49, 230, 1, 0, 0, 0, 51, 232, 1, 0, 0, 0, 53, 235, 1, 0, 0, 0, 55, 238, 1, 0, 0, 0, 57, 240, 1, 0, 0, 0, 59, 242, 1, 0, 0, 0, 61, 244, 1, 0, 0, 0, 63, 246, 1, 0, 0, 0, 65, 248, 1, 0, 0, 0, 67, 250, 1, 0, 0, 0, 69, 252, 1, 0, 0, 0, 71, 258, 1, 0, 0, 0, 73, 263, 1, 0, 0, 0, 75, 269, 1, 0, 0, 0, 77, 272, 1, 0, 0, 0, 79, 277, 1, 0, 0, 0, 81, 284, 1, 0, 0, 0, 83, 291, 1, 0, 0, 0, 85, 299, 1, 0, 0, 0, 87, 305, 1, 0, 0, 0, 89, 307, 1, 0, 0, 0, 91, 312, 1, 0, 0, 0, 93, 314, 1, 0, 0, 0, 95, 321, 1, 0, 0, 0, 97, 98, 5, 116, 0, 0, 98, 99, 5, 114, 0, 0, 99, 100, 5, 117, 0, 0, 100, 107, 5, 101, 0, 0, 101, 102, 5, 102, 0, 0, 102, 103, 5, 97, 0, 0, 103, 104, 5, 108, 0, 0, 104, 105, 5, 115, 0, 0, 105, 107, 5, 101, 0, 0, 106, 97, 1, 0, 0, 0, 106, 101, 1, 0, 0, 0, 107, 2, 1, 0, 0, 0, 108, 109, 5, 110, 0, 0, 109, 110, 5, 117, 0, 0, 110, 111, 5, 108, 0, 0, 111, 112, 5, 108, 0, 0, 112, 4, 1, 0, 0, 0, 113, 114, 5, 112, 0, 0, 114, 115, 5, 117, 0, 0, 115, 116, 5, 98, 0, 0, 116, 117, 5, 108, 0, 0, 117, 118, 5, 105, 0, 0, 118, 119, 5, 99, 0, 0, 119, 6, 1, 0, 0, 0, 120, 121, 5, 112, 0, 0, 121, 122, 5, 117, 0, 0, 122, 123, 5, 98, 0, 0, 123, 124, 5, 108, 0, 0, 124, 125, 5, 105, 0, 0, 125, 126, 5, 99, 0, 0, 126, 127, 5, 32, 0, 0, 127, 128, 5, 115, 0, 0, 128, 129, 5, 116, 0, 0, 129, 130, 5, 97, 0, 0, 130, 131, 5, 116, 0, 0, 131, 132, 5, 105, 0, 0, 132, 133, 5, 99, 0, 0, 133, 134, 5, 32, 0, 0, 134, 135, 5, 118, 0, 0, 135, 136, 5, 111, 0, 0, 136, 137, 5, 105, 0, 0, 137, 138, 5, 100, 0, 0, 138, 139, 5, 32, 0, 0, 139, 140, 5, 109, 0, 0, 140, 141, 5, 97, 0, 0, 141, 142, 5, 105, 0, 0, 142, 143, 5, 110, 0, 0, 143, 144, 5, 40, 0, 0, 144, 145, 5, 83, 0, 0, 145, 146, 5, 116, 0, 0, 146, 147, 5, 114, 0, 0, 147, 148, 5, 105, 0, 0, 148, 149, 5, 110, 0, 0, 149, 150, 5, 103, 0, 0, 150, 151, 5, 91, 0, 0, 151, 152, 5, 93, 0, 0, 152, 153, 5, 32, 0, 0, 153, 154, 5, 97, 0, 0, 154, 155, 5, 114, 0, 0, 155, 156, 5, 103, 0, 0, 156, 157, 5, 115, 0, 0, 157, 158, 5, 41, 0, 0, 158, 8, 1, 0, 0, 0, 159, 160, 5, 118, 0, 0, 160, 161, 5, 111, 0, 0, 161, 162, 5, 105, 0, 0, 162, 163, 5, 100, 0, 0, 163, 10, 1, 0, 0, 0, 164, 165, 5, 105, 0, 0, 165, 166, 5, 110, 0, 0, 166, 167, 5, 116, 0, 0, 167, 12, 1, 0, 0, 0, 168, 169, 5, 98, 0, 0, 169, 170, 5, 111, 0, 0, 170, 171, 5, 111, 0, 0, 171, 172, 5, 108, 0, 0, 172, 173, 5, 101, 0, 0, 173, 174, 5, 97, 0, 0, 174, 175, 5, 110, 0, 0, 175, 14, 1, 0, 0, 0, 176, 177, 5, 99, 0, 0, 177, 178, 5, 104, 0, 0, 178, 179, 5, 97, 0, 0, 179, 180, 5, 114, 0, 0, 180, 16, 1, 0, 0, 0, 181, 185, 3, 31, 15, 0, 182, 185, 3, 33, 16, 0, 183, 185, 3, 35, 17, 0, 184, 181, 1, 0, 0, 0, 184, 182, 1, 0, 0, 0, 184, 183, 1, 0, 0, 0, 185, 18, 1, 0, 0, 0, 186, 189, 3, 29, 14, 0, 187, 189, 3, 27, 13, 0, 188, 186, 1, 0, 0, 0, 188, 187, 1, 0, 0, 0, 189, 20, 1, 0, 0, 0, 190, 197, 3, 37, 18, 0, 191, 197, 3, 39, 19, 0, 192, 197, 3, 41, 20, 0, 193, 197, 3, 43, 21, 0, 194, 197, 3, 45, 22, 0, 195, 197, 3, 47, 23, 0, 196, 190, 1, 0, 0, 0, 196, 191, 1, 0, 0, 0, 196, 192, 1, 0, 0, 0, 196, 193, 1, 0, 0, 0, 196, 194, 1, 0, 0, 0, 196, 195, 1, 0, 0, 0, 197, 22, 1, 0, 0, 0, 198, 201, 3, 51, 25, 0, 199, 201, 3, 53, 26, 0, 200, 198, 1, 0, 0, 0, 200, 199, 1, 0, 0, 0, 201, 24, 1, 0, 0, 0, 202, 203, 5, 61, 0, 0, 203, 26, 1, 0, 0, 0, 204, 205, 5, 45, 0, 0, 205, 28, 1, 0, 0, 0, 206, 207, 5, 43, 0, 0, 207, 30, 1, 0, 0, 0, 208, 209, 5, 42, 0, 0, 209, 32, 1, 0, 0, 0, 210, 211, 5, 47, 0, 0, 211, 34, 1, 0, 0, 0, 212, 213, 5, 37, 0, 0, 213, 36, 1, 0, 0, 0, 214, 215, 5, 62, 0, 0, 215, 38, 1, 0, 0, 0, 216, 217, 5, 60, 0, 0, 217, 40, 1, 0, 0, 0, 218, 219, 5, 62, 0, 0, 219, 220, 5, 61, 0, 0, 220, 42, 1, 0, 0, 0, 221, 222, 5, 60, 0, 0, 222, 223, 5, 61, 0, 0, 223, 44, 1, 0, 0, 0, 224, 225, 5, 61, 0, 0, 225, 226, 5, 61, 0, 0, 226, 46, 1, 0, 0, 0, 227, 228, 5, 33, 0, 0, 228, 229, 5, 61, 0, 0, 229, 48, 1, 0, 0, 0, 230, 231, 5, 33, 0, 0, 231, 50, 1, 0, 0, 0, 232, 233, 5, 38, 0, 0, 233, 234, 5, 38, 0, 0, 234, 52, 1, 0, 0, 0, 235, 236, 5, 124, 0, 0, 236, 237, 5, 124, 0, 0, 237, 54, 1, 0, 0, 0, 238, 239, 5, 46, 0, 0, 239, 56, 1, 0, 0, 0, 240, 241, 5, 40, 0, 0, 241, 58, 1, 0, 0, 0, 242, 243, 5, 41, 0, 0, 243, 60, 1, 0, 0, 0, 244, 245, 5, 123, 0, 0, 245, 62, 1, 0, 0, 0, 246, 247, 5, 125, 0, 0, 247, 64, 1, 0, 0, 0, 248, 249, 5, 59, 0, 0, 249, 66, 1, 0, 0, 0, 250, 251, 5, 44, 0, 0, 251, 68, 1, 0, 0, 0, 252, 253, 5, 99, 0, 0, 253, 254, 5, 108, 0, 0, 254, 255, 5, 97, 0, 0, 255, 256, 5, 115, 0, 0, 256, 257, 5, 115, 0, 0, 257, 70, 1, 0, 0, 0, 258, 259, 5, 116, 0, 0, 259, 260, 5, 104, 0, 0, 260, 261, 5, 105, 0, 0, 261, 262, 5, 115, 0, 0, 262, 72, 1, 0, 0, 0, 263, 264, 5, 119, 0, 0, 264, 265, 5, 104, 0, 0, 265, 266, 5, 105, 0, 0, 266, 267, 5, 108, 0, 0, 267, 268, 5, 101, 0, 0, 268, 74, 1, 0, 0, 0, 269, 270, 5, 105, 0, 0, 270, 271, 5, 102, 0, 0, 271, 76, 1, 0, 0, 0, 272, 273, 5, 101, 0, 0, 273, 274, 5, 108, 0, 0, 274, 275, 5, 115, 0, 0, 275, 276, 5, 101, 0, 0, 276, 78, 1, 0, 0, 0, 277, 278, 5, 114, 0, 0, 278, 279, 5, 101, 0, 0, 279, 280, 5, 116, 0, 0, 280, 281, 5, 117, 0, 0, 281, 282, 5, 114, 0, 0, 282, 283, 5, 110, 0, 0, 283, 80, 1, 0, 0, 0, 284, 285, 5, 110, 0, 0, 285, 286, 5, 101, 0, 0, 286, 287, 5, 119, 0, 0, 287, 82, 1, 0, 0, 0, 288, 290, 7, 0, 0, 0, 289, 288, 1, 0, 0, 0, 290, 293, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 295, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, 294, 296, 7, 1, 0, 0, 295, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 295, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 84, 1, 0, 0, 0, 299, 301, 5, 39, 0, 0, 300, 302, 8, 2, 0, 0, 301, 300, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 5, 39, 0, 0, 304, 86, 1, 0, 0, 0, 305, 306, 7, 3, 0, 0, 306, 88, 1, 0, 0, 0, 307, 308, 7, 1, 0, 0, 308, 90, 1, 0, 0, 0, 309, 313, 3, 87, 43, 0, 310, 313, 3, 89, 44, 0, 311, 313, 7, 4, 0, 0, 312, 309, 1, 0, 0, 0, 312, 310, 1, 0, 0, 0, 312, 311, 1, 0, 0, 0, 313, 92, 1, 0, 0, 0, 314, 318, 3, 87, 43, 0, 315, 317, 3, 91, 45, 0, 316, 315, 1, 0, 0, 0, 317, 320, 1, 0, 0, 0, 318, 316, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 94, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 321, 322, 7, 5, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 6, 47, 0, 0, 324, 96, 1, 0, 0, 0, 11, 0, 106, 184, 188, 196, 200, 291, 297, 301, 312, 318, 1, 6, 0, 0] \ No newline at end of file diff --git a/src/main/java/gen/DecafLexer.java b/src/main/java/gen/DecafLexer.java index 56bba9e..1251680 100644 --- a/src/main/java/gen/DecafLexer.java +++ b/src/main/java/gen/DecafLexer.java @@ -50,7 +50,7 @@ public class DecafLexer extends Lexer { private static String[] makeLiteralNames() { return new String[] { null, null, "'null'", "'public'", "'public static void main(String[] args)'", - "'void'", "'int'", "'bool'", "'char'", null, null, null, null, "'='", + "'void'", "'int'", "'boolean'", "'char'", null, null, null, null, "'='", "'-'", "'+'", "'*'", "'/'", "'%'", "'>'", "'<'", "'>='", "'<='", "'=='", "'!='", "'!'", "'&&'", "'||'", "'.'", "'('", "')'", "'{'", "'}'", "';'", "','", "'class'", "'this'", "'while'", "'if'", "'else'", "'return'", @@ -129,7 +129,7 @@ public class DecafLexer extends Lexer { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\u0004\u0000-\u0142\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0004\u0000-\u0145\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ "\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\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ @@ -155,178 +155,180 @@ public class DecafLexer extends Lexer { "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ "\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006"+ - "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007"+ - "\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0003\b\u00b6\b\b\u0001"+ - "\t\u0001\t\u0003\t\u00ba\b\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ - "\n\u0003\n\u00c2\b\n\u0001\u000b\u0001\u000b\u0003\u000b\u00c6\b\u000b"+ - "\u0001\f\u0001\f\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001"+ - "\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0012\u0001"+ - "\u0012\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ - "\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+ - "\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0019\u0001"+ - "\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001"+ - "\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001e\u0001"+ - "\u001e\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)\u0005)\u011f\b)\n"+ - ")\f)\u0122\t)\u0001)\u0004)\u0125\b)\u000b)\f)\u0126\u0001*\u0001*\u0003"+ - "*\u012b\b*\u0001*\u0001*\u0001+\u0001+\u0001,\u0001,\u0001-\u0001-\u0001"+ - "-\u0003-\u0136\b-\u0001.\u0001.\u0005.\u013a\b.\n.\f.\u013d\t.\u0001/"+ - "\u0001/\u0001/\u0001/\u0000\u00000\u0001\u0001\u0003\u0002\u0005\u0003"+ - "\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015"+ - "\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012"+ - "%\u0013\'\u0014)\u0015+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c"+ - "9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O(Q)S*U+W\u0000Y\u0000[\u0000]"+ - ",_-\u0001\u0000\u0006\u0002\u0000++--\u0001\u000009\u0002\u0000\n\n\r"+ - "\r\u0002\u0000AZaz\u0002\u0000$$__\u0003\u0000\t\n\r\r \u014e\u0000\u0001"+ - "\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005"+ - "\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001"+ - "\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000"+ - "\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000"+ - "\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000"+ - "\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000"+ - "\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000\u001d\u0001\u0000"+ - "\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000!\u0001\u0000\u0000"+ - "\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001\u0000\u0000\u0000\u0000"+ - "\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000\u0000\u0000\u0000+\u0001"+ - "\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000\u0000/\u0001\u0000\u0000"+ - "\u0000\u00001\u0001\u0000\u0000\u0000\u00003\u0001\u0000\u0000\u0000\u0000"+ - "5\u0001\u0000\u0000\u0000\u00007\u0001\u0000\u0000\u0000\u00009\u0001"+ - "\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000\u0000=\u0001\u0000\u0000"+ - "\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A\u0001\u0000\u0000\u0000\u0000"+ - "C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000\u0000\u0000\u0000G\u0001"+ - "\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000\u0000K\u0001\u0000\u0000"+ - "\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O\u0001\u0000\u0000\u0000\u0000"+ - "Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000\u0000\u0000\u0000U\u0001"+ - "\u0000\u0000\u0000\u0000]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000"+ - "\u0000\u0001j\u0001\u0000\u0000\u0000\u0003l\u0001\u0000\u0000\u0000\u0005"+ - "q\u0001\u0000\u0000\u0000\u0007x\u0001\u0000\u0000\u0000\t\u009f\u0001"+ - "\u0000\u0000\u0000\u000b\u00a4\u0001\u0000\u0000\u0000\r\u00a8\u0001\u0000"+ - "\u0000\u0000\u000f\u00ad\u0001\u0000\u0000\u0000\u0011\u00b5\u0001\u0000"+ - "\u0000\u0000\u0013\u00b9\u0001\u0000\u0000\u0000\u0015\u00c1\u0001\u0000"+ - "\u0000\u0000\u0017\u00c5\u0001\u0000\u0000\u0000\u0019\u00c7\u0001\u0000"+ - "\u0000\u0000\u001b\u00c9\u0001\u0000\u0000\u0000\u001d\u00cb\u0001\u0000"+ - "\u0000\u0000\u001f\u00cd\u0001\u0000\u0000\u0000!\u00cf\u0001\u0000\u0000"+ - "\u0000#\u00d1\u0001\u0000\u0000\u0000%\u00d3\u0001\u0000\u0000\u0000\'"+ - "\u00d5\u0001\u0000\u0000\u0000)\u00d7\u0001\u0000\u0000\u0000+\u00da\u0001"+ - "\u0000\u0000\u0000-\u00dd\u0001\u0000\u0000\u0000/\u00e0\u0001\u0000\u0000"+ - "\u00001\u00e3\u0001\u0000\u0000\u00003\u00e5\u0001\u0000\u0000\u00005"+ - "\u00e8\u0001\u0000\u0000\u00007\u00eb\u0001\u0000\u0000\u00009\u00ed\u0001"+ - "\u0000\u0000\u0000;\u00ef\u0001\u0000\u0000\u0000=\u00f1\u0001\u0000\u0000"+ - "\u0000?\u00f3\u0001\u0000\u0000\u0000A\u00f5\u0001\u0000\u0000\u0000C"+ - "\u00f7\u0001\u0000\u0000\u0000E\u00f9\u0001\u0000\u0000\u0000G\u00ff\u0001"+ - "\u0000\u0000\u0000I\u0104\u0001\u0000\u0000\u0000K\u010a\u0001\u0000\u0000"+ - "\u0000M\u010d\u0001\u0000\u0000\u0000O\u0112\u0001\u0000\u0000\u0000Q"+ - "\u0119\u0001\u0000\u0000\u0000S\u0120\u0001\u0000\u0000\u0000U\u0128\u0001"+ - "\u0000\u0000\u0000W\u012e\u0001\u0000\u0000\u0000Y\u0130\u0001\u0000\u0000"+ - "\u0000[\u0135\u0001\u0000\u0000\u0000]\u0137\u0001\u0000\u0000\u0000_"+ - "\u013e\u0001\u0000\u0000\u0000ab\u0005t\u0000\u0000bc\u0005r\u0000\u0000"+ - "cd\u0005u\u0000\u0000dk\u0005e\u0000\u0000ef\u0005f\u0000\u0000fg\u0005"+ - "a\u0000\u0000gh\u0005l\u0000\u0000hi\u0005s\u0000\u0000ik\u0005e\u0000"+ - "\u0000ja\u0001\u0000\u0000\u0000je\u0001\u0000\u0000\u0000k\u0002\u0001"+ - "\u0000\u0000\u0000lm\u0005n\u0000\u0000mn\u0005u\u0000\u0000no\u0005l"+ - "\u0000\u0000op\u0005l\u0000\u0000p\u0004\u0001\u0000\u0000\u0000qr\u0005"+ - "p\u0000\u0000rs\u0005u\u0000\u0000st\u0005b\u0000\u0000tu\u0005l\u0000"+ - "\u0000uv\u0005i\u0000\u0000vw\u0005c\u0000\u0000w\u0006\u0001\u0000\u0000"+ - "\u0000xy\u0005p\u0000\u0000yz\u0005u\u0000\u0000z{\u0005b\u0000\u0000"+ - "{|\u0005l\u0000\u0000|}\u0005i\u0000\u0000}~\u0005c\u0000\u0000~\u007f"+ - "\u0005 \u0000\u0000\u007f\u0080\u0005s\u0000\u0000\u0080\u0081\u0005t"+ - "\u0000\u0000\u0081\u0082\u0005a\u0000\u0000\u0082\u0083\u0005t\u0000\u0000"+ - "\u0083\u0084\u0005i\u0000\u0000\u0084\u0085\u0005c\u0000\u0000\u0085\u0086"+ - "\u0005 \u0000\u0000\u0086\u0087\u0005v\u0000\u0000\u0087\u0088\u0005o"+ - "\u0000\u0000\u0088\u0089\u0005i\u0000\u0000\u0089\u008a\u0005d\u0000\u0000"+ - "\u008a\u008b\u0005 \u0000\u0000\u008b\u008c\u0005m\u0000\u0000\u008c\u008d"+ - "\u0005a\u0000\u0000\u008d\u008e\u0005i\u0000\u0000\u008e\u008f\u0005n"+ - "\u0000\u0000\u008f\u0090\u0005(\u0000\u0000\u0090\u0091\u0005S\u0000\u0000"+ - "\u0091\u0092\u0005t\u0000\u0000\u0092\u0093\u0005r\u0000\u0000\u0093\u0094"+ - "\u0005i\u0000\u0000\u0094\u0095\u0005n\u0000\u0000\u0095\u0096\u0005g"+ - "\u0000\u0000\u0096\u0097\u0005[\u0000\u0000\u0097\u0098\u0005]\u0000\u0000"+ - "\u0098\u0099\u0005 \u0000\u0000\u0099\u009a\u0005a\u0000\u0000\u009a\u009b"+ - "\u0005r\u0000\u0000\u009b\u009c\u0005g\u0000\u0000\u009c\u009d\u0005s"+ - "\u0000\u0000\u009d\u009e\u0005)\u0000\u0000\u009e\b\u0001\u0000\u0000"+ - "\u0000\u009f\u00a0\u0005v\u0000\u0000\u00a0\u00a1\u0005o\u0000\u0000\u00a1"+ - "\u00a2\u0005i\u0000\u0000\u00a2\u00a3\u0005d\u0000\u0000\u00a3\n\u0001"+ - "\u0000\u0000\u0000\u00a4\u00a5\u0005i\u0000\u0000\u00a5\u00a6\u0005n\u0000"+ - "\u0000\u00a6\u00a7\u0005t\u0000\u0000\u00a7\f\u0001\u0000\u0000\u0000"+ - "\u00a8\u00a9\u0005b\u0000\u0000\u00a9\u00aa\u0005o\u0000\u0000\u00aa\u00ab"+ - "\u0005o\u0000\u0000\u00ab\u00ac\u0005l\u0000\u0000\u00ac\u000e\u0001\u0000"+ - "\u0000\u0000\u00ad\u00ae\u0005c\u0000\u0000\u00ae\u00af\u0005h\u0000\u0000"+ - "\u00af\u00b0\u0005a\u0000\u0000\u00b0\u00b1\u0005r\u0000\u0000\u00b1\u0010"+ - "\u0001\u0000\u0000\u0000\u00b2\u00b6\u0003\u001f\u000f\u0000\u00b3\u00b6"+ - "\u0003!\u0010\u0000\u00b4\u00b6\u0003#\u0011\u0000\u00b5\u00b2\u0001\u0000"+ - "\u0000\u0000\u00b5\u00b3\u0001\u0000\u0000\u0000\u00b5\u00b4\u0001\u0000"+ - "\u0000\u0000\u00b6\u0012\u0001\u0000\u0000\u0000\u00b7\u00ba\u0003\u001d"+ - "\u000e\u0000\u00b8\u00ba\u0003\u001b\r\u0000\u00b9\u00b7\u0001\u0000\u0000"+ - "\u0000\u00b9\u00b8\u0001\u0000\u0000\u0000\u00ba\u0014\u0001\u0000\u0000"+ - "\u0000\u00bb\u00c2\u0003%\u0012\u0000\u00bc\u00c2\u0003\'\u0013\u0000"+ - "\u00bd\u00c2\u0003)\u0014\u0000\u00be\u00c2\u0003+\u0015\u0000\u00bf\u00c2"+ - "\u0003-\u0016\u0000\u00c0\u00c2\u0003/\u0017\u0000\u00c1\u00bb\u0001\u0000"+ - "\u0000\u0000\u00c1\u00bc\u0001\u0000\u0000\u0000\u00c1\u00bd\u0001\u0000"+ - "\u0000\u0000\u00c1\u00be\u0001\u0000\u0000\u0000\u00c1\u00bf\u0001\u0000"+ - "\u0000\u0000\u00c1\u00c0\u0001\u0000\u0000\u0000\u00c2\u0016\u0001\u0000"+ - "\u0000\u0000\u00c3\u00c6\u00033\u0019\u0000\u00c4\u00c6\u00035\u001a\u0000"+ - "\u00c5\u00c3\u0001\u0000\u0000\u0000\u00c5\u00c4\u0001\u0000\u0000\u0000"+ - "\u00c6\u0018\u0001\u0000\u0000\u0000\u00c7\u00c8\u0005=\u0000\u0000\u00c8"+ - "\u001a\u0001\u0000\u0000\u0000\u00c9\u00ca\u0005-\u0000\u0000\u00ca\u001c"+ - "\u0001\u0000\u0000\u0000\u00cb\u00cc\u0005+\u0000\u0000\u00cc\u001e\u0001"+ - "\u0000\u0000\u0000\u00cd\u00ce\u0005*\u0000\u0000\u00ce \u0001\u0000\u0000"+ - "\u0000\u00cf\u00d0\u0005/\u0000\u0000\u00d0\"\u0001\u0000\u0000\u0000"+ - "\u00d1\u00d2\u0005%\u0000\u0000\u00d2$\u0001\u0000\u0000\u0000\u00d3\u00d4"+ - "\u0005>\u0000\u0000\u00d4&\u0001\u0000\u0000\u0000\u00d5\u00d6\u0005<"+ - "\u0000\u0000\u00d6(\u0001\u0000\u0000\u0000\u00d7\u00d8\u0005>\u0000\u0000"+ - "\u00d8\u00d9\u0005=\u0000\u0000\u00d9*\u0001\u0000\u0000\u0000\u00da\u00db"+ - "\u0005<\u0000\u0000\u00db\u00dc\u0005=\u0000\u0000\u00dc,\u0001\u0000"+ - "\u0000\u0000\u00dd\u00de\u0005=\u0000\u0000\u00de\u00df\u0005=\u0000\u0000"+ - "\u00df.\u0001\u0000\u0000\u0000\u00e0\u00e1\u0005!\u0000\u0000\u00e1\u00e2"+ - "\u0005=\u0000\u0000\u00e20\u0001\u0000\u0000\u0000\u00e3\u00e4\u0005!"+ - "\u0000\u0000\u00e42\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005&\u0000\u0000"+ - "\u00e6\u00e7\u0005&\u0000\u0000\u00e74\u0001\u0000\u0000\u0000\u00e8\u00e9"+ - "\u0005|\u0000\u0000\u00e9\u00ea\u0005|\u0000\u0000\u00ea6\u0001\u0000"+ - "\u0000\u0000\u00eb\u00ec\u0005.\u0000\u0000\u00ec8\u0001\u0000\u0000\u0000"+ - "\u00ed\u00ee\u0005(\u0000\u0000\u00ee:\u0001\u0000\u0000\u0000\u00ef\u00f0"+ - "\u0005)\u0000\u0000\u00f0<\u0001\u0000\u0000\u0000\u00f1\u00f2\u0005{"+ - "\u0000\u0000\u00f2>\u0001\u0000\u0000\u0000\u00f3\u00f4\u0005}\u0000\u0000"+ - "\u00f4@\u0001\u0000\u0000\u0000\u00f5\u00f6\u0005;\u0000\u0000\u00f6B"+ - "\u0001\u0000\u0000\u0000\u00f7\u00f8\u0005,\u0000\u0000\u00f8D\u0001\u0000"+ - "\u0000\u0000\u00f9\u00fa\u0005c\u0000\u0000\u00fa\u00fb\u0005l\u0000\u0000"+ - "\u00fb\u00fc\u0005a\u0000\u0000\u00fc\u00fd\u0005s\u0000\u0000\u00fd\u00fe"+ - "\u0005s\u0000\u0000\u00feF\u0001\u0000\u0000\u0000\u00ff\u0100\u0005t"+ - "\u0000\u0000\u0100\u0101\u0005h\u0000\u0000\u0101\u0102\u0005i\u0000\u0000"+ - "\u0102\u0103\u0005s\u0000\u0000\u0103H\u0001\u0000\u0000\u0000\u0104\u0105"+ - "\u0005w\u0000\u0000\u0105\u0106\u0005h\u0000\u0000\u0106\u0107\u0005i"+ - "\u0000\u0000\u0107\u0108\u0005l\u0000\u0000\u0108\u0109\u0005e\u0000\u0000"+ - "\u0109J\u0001\u0000\u0000\u0000\u010a\u010b\u0005i\u0000\u0000\u010b\u010c"+ - "\u0005f\u0000\u0000\u010cL\u0001\u0000\u0000\u0000\u010d\u010e\u0005e"+ - "\u0000\u0000\u010e\u010f\u0005l\u0000\u0000\u010f\u0110\u0005s\u0000\u0000"+ - "\u0110\u0111\u0005e\u0000\u0000\u0111N\u0001\u0000\u0000\u0000\u0112\u0113"+ - "\u0005r\u0000\u0000\u0113\u0114\u0005e\u0000\u0000\u0114\u0115\u0005t"+ - "\u0000\u0000\u0115\u0116\u0005u\u0000\u0000\u0116\u0117\u0005r\u0000\u0000"+ - "\u0117\u0118\u0005n\u0000\u0000\u0118P\u0001\u0000\u0000\u0000\u0119\u011a"+ - "\u0005n\u0000\u0000\u011a\u011b\u0005e\u0000\u0000\u011b\u011c\u0005w"+ - "\u0000\u0000\u011cR\u0001\u0000\u0000\u0000\u011d\u011f\u0007\u0000\u0000"+ - "\u0000\u011e\u011d\u0001\u0000\u0000\u0000\u011f\u0122\u0001\u0000\u0000"+ - "\u0000\u0120\u011e\u0001\u0000\u0000\u0000\u0120\u0121\u0001\u0000\u0000"+ - "\u0000\u0121\u0124\u0001\u0000\u0000\u0000\u0122\u0120\u0001\u0000\u0000"+ - "\u0000\u0123\u0125\u0007\u0001\u0000\u0000\u0124\u0123\u0001\u0000\u0000"+ - "\u0000\u0125\u0126\u0001\u0000\u0000\u0000\u0126\u0124\u0001\u0000\u0000"+ - "\u0000\u0126\u0127\u0001\u0000\u0000\u0000\u0127T\u0001\u0000\u0000\u0000"+ - "\u0128\u012a\u0005\'\u0000\u0000\u0129\u012b\b\u0002\u0000\u0000\u012a"+ - "\u0129\u0001\u0000\u0000\u0000\u012a\u012b\u0001\u0000\u0000\u0000\u012b"+ - "\u012c\u0001\u0000\u0000\u0000\u012c\u012d\u0005\'\u0000\u0000\u012dV"+ - "\u0001\u0000\u0000\u0000\u012e\u012f\u0007\u0003\u0000\u0000\u012fX\u0001"+ - "\u0000\u0000\u0000\u0130\u0131\u0007\u0001\u0000\u0000\u0131Z\u0001\u0000"+ - "\u0000\u0000\u0132\u0136\u0003W+\u0000\u0133\u0136\u0003Y,\u0000\u0134"+ - "\u0136\u0007\u0004\u0000\u0000\u0135\u0132\u0001\u0000\u0000\u0000\u0135"+ - "\u0133\u0001\u0000\u0000\u0000\u0135\u0134\u0001\u0000\u0000\u0000\u0136"+ - "\\\u0001\u0000\u0000\u0000\u0137\u013b\u0003W+\u0000\u0138\u013a\u0003"+ - "[-\u0000\u0139\u0138\u0001\u0000\u0000\u0000\u013a\u013d\u0001\u0000\u0000"+ - "\u0000\u013b\u0139\u0001\u0000\u0000\u0000\u013b\u013c\u0001\u0000\u0000"+ - "\u0000\u013c^\u0001\u0000\u0000\u0000\u013d\u013b\u0001\u0000\u0000\u0000"+ - "\u013e\u013f\u0007\u0005\u0000\u0000\u013f\u0140\u0001\u0000\u0000\u0000"+ - "\u0140\u0141\u0006/\u0000\u0000\u0141`\u0001\u0000\u0000\u0000\u000b\u0000"+ - "j\u00b5\u00b9\u00c1\u00c5\u0120\u0126\u012a\u0135\u013b\u0001\u0006\u0000"+ + "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001"+ + "\b\u0001\b\u0003\b\u00b9\b\b\u0001\t\u0001\t\u0003\t\u00bd\b\t\u0001\n"+ + "\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0003\n\u00c5\b\n\u0001\u000b"+ + "\u0001\u000b\u0003\u000b\u00c9\b\u000b\u0001\f\u0001\f\u0001\r\u0001\r"+ + "\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010"+ + "\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015"+ + "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017"+ + "\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a"+ + "\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c"+ + "\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\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)\u0005)\u0122\b)\n)\f)\u0125\t)\u0001)\u0004)\u0128\b)"+ + "\u000b)\f)\u0129\u0001*\u0001*\u0003*\u012e\b*\u0001*\u0001*\u0001+\u0001"+ + "+\u0001,\u0001,\u0001-\u0001-\u0001-\u0003-\u0139\b-\u0001.\u0001.\u0005"+ + ".\u013d\b.\n.\f.\u0140\t.\u0001/\u0001/\u0001/\u0001/\u0000\u00000\u0001"+ + "\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007"+ + "\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e\u001d"+ + "\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017/"+ + "\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K"+ + "&M\'O(Q)S*U+W\u0000Y\u0000[\u0000],_-\u0001\u0000\u0006\u0002\u0000++"+ + "--\u0001\u000009\u0002\u0000\n\n\r\r\u0002\u0000AZaz\u0002\u0000$$__\u0003"+ + "\u0000\t\n\r\r \u0151\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003"+ + "\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007"+ + "\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001"+ + "\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000"+ + "\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000"+ + "\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000"+ + "\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000"+ + "\u0000\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000"+ + "\u0000\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000"+ + "\u0000%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000"+ + ")\u0001\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001"+ + "\u0000\u0000\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000"+ + "\u0000\u00003\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u0000"+ + "7\u0001\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001"+ + "\u0000\u0000\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000"+ + "\u0000\u0000A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000"+ + "E\u0001\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001"+ + "\u0000\u0000\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000"+ + "\u0000\u0000O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000"+ + "S\u0001\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000]\u0001"+ + "\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0001j\u0001\u0000\u0000"+ + "\u0000\u0003l\u0001\u0000\u0000\u0000\u0005q\u0001\u0000\u0000\u0000\u0007"+ + "x\u0001\u0000\u0000\u0000\t\u009f\u0001\u0000\u0000\u0000\u000b\u00a4"+ + "\u0001\u0000\u0000\u0000\r\u00a8\u0001\u0000\u0000\u0000\u000f\u00b0\u0001"+ + "\u0000\u0000\u0000\u0011\u00b8\u0001\u0000\u0000\u0000\u0013\u00bc\u0001"+ + "\u0000\u0000\u0000\u0015\u00c4\u0001\u0000\u0000\u0000\u0017\u00c8\u0001"+ + "\u0000\u0000\u0000\u0019\u00ca\u0001\u0000\u0000\u0000\u001b\u00cc\u0001"+ + "\u0000\u0000\u0000\u001d\u00ce\u0001\u0000\u0000\u0000\u001f\u00d0\u0001"+ + "\u0000\u0000\u0000!\u00d2\u0001\u0000\u0000\u0000#\u00d4\u0001\u0000\u0000"+ + "\u0000%\u00d6\u0001\u0000\u0000\u0000\'\u00d8\u0001\u0000\u0000\u0000"+ + ")\u00da\u0001\u0000\u0000\u0000+\u00dd\u0001\u0000\u0000\u0000-\u00e0"+ + "\u0001\u0000\u0000\u0000/\u00e3\u0001\u0000\u0000\u00001\u00e6\u0001\u0000"+ + "\u0000\u00003\u00e8\u0001\u0000\u0000\u00005\u00eb\u0001\u0000\u0000\u0000"+ + "7\u00ee\u0001\u0000\u0000\u00009\u00f0\u0001\u0000\u0000\u0000;\u00f2"+ + "\u0001\u0000\u0000\u0000=\u00f4\u0001\u0000\u0000\u0000?\u00f6\u0001\u0000"+ + "\u0000\u0000A\u00f8\u0001\u0000\u0000\u0000C\u00fa\u0001\u0000\u0000\u0000"+ + "E\u00fc\u0001\u0000\u0000\u0000G\u0102\u0001\u0000\u0000\u0000I\u0107"+ + "\u0001\u0000\u0000\u0000K\u010d\u0001\u0000\u0000\u0000M\u0110\u0001\u0000"+ + "\u0000\u0000O\u0115\u0001\u0000\u0000\u0000Q\u011c\u0001\u0000\u0000\u0000"+ + "S\u0123\u0001\u0000\u0000\u0000U\u012b\u0001\u0000\u0000\u0000W\u0131"+ + "\u0001\u0000\u0000\u0000Y\u0133\u0001\u0000\u0000\u0000[\u0138\u0001\u0000"+ + "\u0000\u0000]\u013a\u0001\u0000\u0000\u0000_\u0141\u0001\u0000\u0000\u0000"+ + "ab\u0005t\u0000\u0000bc\u0005r\u0000\u0000cd\u0005u\u0000\u0000dk\u0005"+ + "e\u0000\u0000ef\u0005f\u0000\u0000fg\u0005a\u0000\u0000gh\u0005l\u0000"+ + "\u0000hi\u0005s\u0000\u0000ik\u0005e\u0000\u0000ja\u0001\u0000\u0000\u0000"+ + "je\u0001\u0000\u0000\u0000k\u0002\u0001\u0000\u0000\u0000lm\u0005n\u0000"+ + "\u0000mn\u0005u\u0000\u0000no\u0005l\u0000\u0000op\u0005l\u0000\u0000"+ + "p\u0004\u0001\u0000\u0000\u0000qr\u0005p\u0000\u0000rs\u0005u\u0000\u0000"+ + "st\u0005b\u0000\u0000tu\u0005l\u0000\u0000uv\u0005i\u0000\u0000vw\u0005"+ + "c\u0000\u0000w\u0006\u0001\u0000\u0000\u0000xy\u0005p\u0000\u0000yz\u0005"+ + "u\u0000\u0000z{\u0005b\u0000\u0000{|\u0005l\u0000\u0000|}\u0005i\u0000"+ + "\u0000}~\u0005c\u0000\u0000~\u007f\u0005 \u0000\u0000\u007f\u0080\u0005"+ + "s\u0000\u0000\u0080\u0081\u0005t\u0000\u0000\u0081\u0082\u0005a\u0000"+ + "\u0000\u0082\u0083\u0005t\u0000\u0000\u0083\u0084\u0005i\u0000\u0000\u0084"+ + "\u0085\u0005c\u0000\u0000\u0085\u0086\u0005 \u0000\u0000\u0086\u0087\u0005"+ + "v\u0000\u0000\u0087\u0088\u0005o\u0000\u0000\u0088\u0089\u0005i\u0000"+ + "\u0000\u0089\u008a\u0005d\u0000\u0000\u008a\u008b\u0005 \u0000\u0000\u008b"+ + "\u008c\u0005m\u0000\u0000\u008c\u008d\u0005a\u0000\u0000\u008d\u008e\u0005"+ + "i\u0000\u0000\u008e\u008f\u0005n\u0000\u0000\u008f\u0090\u0005(\u0000"+ + "\u0000\u0090\u0091\u0005S\u0000\u0000\u0091\u0092\u0005t\u0000\u0000\u0092"+ + "\u0093\u0005r\u0000\u0000\u0093\u0094\u0005i\u0000\u0000\u0094\u0095\u0005"+ + "n\u0000\u0000\u0095\u0096\u0005g\u0000\u0000\u0096\u0097\u0005[\u0000"+ + "\u0000\u0097\u0098\u0005]\u0000\u0000\u0098\u0099\u0005 \u0000\u0000\u0099"+ + "\u009a\u0005a\u0000\u0000\u009a\u009b\u0005r\u0000\u0000\u009b\u009c\u0005"+ + "g\u0000\u0000\u009c\u009d\u0005s\u0000\u0000\u009d\u009e\u0005)\u0000"+ + "\u0000\u009e\b\u0001\u0000\u0000\u0000\u009f\u00a0\u0005v\u0000\u0000"+ + "\u00a0\u00a1\u0005o\u0000\u0000\u00a1\u00a2\u0005i\u0000\u0000\u00a2\u00a3"+ + "\u0005d\u0000\u0000\u00a3\n\u0001\u0000\u0000\u0000\u00a4\u00a5\u0005"+ + "i\u0000\u0000\u00a5\u00a6\u0005n\u0000\u0000\u00a6\u00a7\u0005t\u0000"+ + "\u0000\u00a7\f\u0001\u0000\u0000\u0000\u00a8\u00a9\u0005b\u0000\u0000"+ + "\u00a9\u00aa\u0005o\u0000\u0000\u00aa\u00ab\u0005o\u0000\u0000\u00ab\u00ac"+ + "\u0005l\u0000\u0000\u00ac\u00ad\u0005e\u0000\u0000\u00ad\u00ae\u0005a"+ + "\u0000\u0000\u00ae\u00af\u0005n\u0000\u0000\u00af\u000e\u0001\u0000\u0000"+ + "\u0000\u00b0\u00b1\u0005c\u0000\u0000\u00b1\u00b2\u0005h\u0000\u0000\u00b2"+ + "\u00b3\u0005a\u0000\u0000\u00b3\u00b4\u0005r\u0000\u0000\u00b4\u0010\u0001"+ + "\u0000\u0000\u0000\u00b5\u00b9\u0003\u001f\u000f\u0000\u00b6\u00b9\u0003"+ + "!\u0010\u0000\u00b7\u00b9\u0003#\u0011\u0000\u00b8\u00b5\u0001\u0000\u0000"+ + "\u0000\u00b8\u00b6\u0001\u0000\u0000\u0000\u00b8\u00b7\u0001\u0000\u0000"+ + "\u0000\u00b9\u0012\u0001\u0000\u0000\u0000\u00ba\u00bd\u0003\u001d\u000e"+ + "\u0000\u00bb\u00bd\u0003\u001b\r\u0000\u00bc\u00ba\u0001\u0000\u0000\u0000"+ + "\u00bc\u00bb\u0001\u0000\u0000\u0000\u00bd\u0014\u0001\u0000\u0000\u0000"+ + "\u00be\u00c5\u0003%\u0012\u0000\u00bf\u00c5\u0003\'\u0013\u0000\u00c0"+ + "\u00c5\u0003)\u0014\u0000\u00c1\u00c5\u0003+\u0015\u0000\u00c2\u00c5\u0003"+ + "-\u0016\u0000\u00c3\u00c5\u0003/\u0017\u0000\u00c4\u00be\u0001\u0000\u0000"+ + "\u0000\u00c4\u00bf\u0001\u0000\u0000\u0000\u00c4\u00c0\u0001\u0000\u0000"+ + "\u0000\u00c4\u00c1\u0001\u0000\u0000\u0000\u00c4\u00c2\u0001\u0000\u0000"+ + "\u0000\u00c4\u00c3\u0001\u0000\u0000\u0000\u00c5\u0016\u0001\u0000\u0000"+ + "\u0000\u00c6\u00c9\u00033\u0019\u0000\u00c7\u00c9\u00035\u001a\u0000\u00c8"+ + "\u00c6\u0001\u0000\u0000\u0000\u00c8\u00c7\u0001\u0000\u0000\u0000\u00c9"+ + "\u0018\u0001\u0000\u0000\u0000\u00ca\u00cb\u0005=\u0000\u0000\u00cb\u001a"+ + "\u0001\u0000\u0000\u0000\u00cc\u00cd\u0005-\u0000\u0000\u00cd\u001c\u0001"+ + "\u0000\u0000\u0000\u00ce\u00cf\u0005+\u0000\u0000\u00cf\u001e\u0001\u0000"+ + "\u0000\u0000\u00d0\u00d1\u0005*\u0000\u0000\u00d1 \u0001\u0000\u0000\u0000"+ + "\u00d2\u00d3\u0005/\u0000\u0000\u00d3\"\u0001\u0000\u0000\u0000\u00d4"+ + "\u00d5\u0005%\u0000\u0000\u00d5$\u0001\u0000\u0000\u0000\u00d6\u00d7\u0005"+ + ">\u0000\u0000\u00d7&\u0001\u0000\u0000\u0000\u00d8\u00d9\u0005<\u0000"+ + "\u0000\u00d9(\u0001\u0000\u0000\u0000\u00da\u00db\u0005>\u0000\u0000\u00db"+ + "\u00dc\u0005=\u0000\u0000\u00dc*\u0001\u0000\u0000\u0000\u00dd\u00de\u0005"+ + "<\u0000\u0000\u00de\u00df\u0005=\u0000\u0000\u00df,\u0001\u0000\u0000"+ + "\u0000\u00e0\u00e1\u0005=\u0000\u0000\u00e1\u00e2\u0005=\u0000\u0000\u00e2"+ + ".\u0001\u0000\u0000\u0000\u00e3\u00e4\u0005!\u0000\u0000\u00e4\u00e5\u0005"+ + "=\u0000\u0000\u00e50\u0001\u0000\u0000\u0000\u00e6\u00e7\u0005!\u0000"+ + "\u0000\u00e72\u0001\u0000\u0000\u0000\u00e8\u00e9\u0005&\u0000\u0000\u00e9"+ + "\u00ea\u0005&\u0000\u0000\u00ea4\u0001\u0000\u0000\u0000\u00eb\u00ec\u0005"+ + "|\u0000\u0000\u00ec\u00ed\u0005|\u0000\u0000\u00ed6\u0001\u0000\u0000"+ + "\u0000\u00ee\u00ef\u0005.\u0000\u0000\u00ef8\u0001\u0000\u0000\u0000\u00f0"+ + "\u00f1\u0005(\u0000\u0000\u00f1:\u0001\u0000\u0000\u0000\u00f2\u00f3\u0005"+ + ")\u0000\u0000\u00f3<\u0001\u0000\u0000\u0000\u00f4\u00f5\u0005{\u0000"+ + "\u0000\u00f5>\u0001\u0000\u0000\u0000\u00f6\u00f7\u0005}\u0000\u0000\u00f7"+ + "@\u0001\u0000\u0000\u0000\u00f8\u00f9\u0005;\u0000\u0000\u00f9B\u0001"+ + "\u0000\u0000\u0000\u00fa\u00fb\u0005,\u0000\u0000\u00fbD\u0001\u0000\u0000"+ + "\u0000\u00fc\u00fd\u0005c\u0000\u0000\u00fd\u00fe\u0005l\u0000\u0000\u00fe"+ + "\u00ff\u0005a\u0000\u0000\u00ff\u0100\u0005s\u0000\u0000\u0100\u0101\u0005"+ + "s\u0000\u0000\u0101F\u0001\u0000\u0000\u0000\u0102\u0103\u0005t\u0000"+ + "\u0000\u0103\u0104\u0005h\u0000\u0000\u0104\u0105\u0005i\u0000\u0000\u0105"+ + "\u0106\u0005s\u0000\u0000\u0106H\u0001\u0000\u0000\u0000\u0107\u0108\u0005"+ + "w\u0000\u0000\u0108\u0109\u0005h\u0000\u0000\u0109\u010a\u0005i\u0000"+ + "\u0000\u010a\u010b\u0005l\u0000\u0000\u010b\u010c\u0005e\u0000\u0000\u010c"+ + "J\u0001\u0000\u0000\u0000\u010d\u010e\u0005i\u0000\u0000\u010e\u010f\u0005"+ + "f\u0000\u0000\u010fL\u0001\u0000\u0000\u0000\u0110\u0111\u0005e\u0000"+ + "\u0000\u0111\u0112\u0005l\u0000\u0000\u0112\u0113\u0005s\u0000\u0000\u0113"+ + "\u0114\u0005e\u0000\u0000\u0114N\u0001\u0000\u0000\u0000\u0115\u0116\u0005"+ + "r\u0000\u0000\u0116\u0117\u0005e\u0000\u0000\u0117\u0118\u0005t\u0000"+ + "\u0000\u0118\u0119\u0005u\u0000\u0000\u0119\u011a\u0005r\u0000\u0000\u011a"+ + "\u011b\u0005n\u0000\u0000\u011bP\u0001\u0000\u0000\u0000\u011c\u011d\u0005"+ + "n\u0000\u0000\u011d\u011e\u0005e\u0000\u0000\u011e\u011f\u0005w\u0000"+ + "\u0000\u011fR\u0001\u0000\u0000\u0000\u0120\u0122\u0007\u0000\u0000\u0000"+ + "\u0121\u0120\u0001\u0000\u0000\u0000\u0122\u0125\u0001\u0000\u0000\u0000"+ + "\u0123\u0121\u0001\u0000\u0000\u0000\u0123\u0124\u0001\u0000\u0000\u0000"+ + "\u0124\u0127\u0001\u0000\u0000\u0000\u0125\u0123\u0001\u0000\u0000\u0000"+ + "\u0126\u0128\u0007\u0001\u0000\u0000\u0127\u0126\u0001\u0000\u0000\u0000"+ + "\u0128\u0129\u0001\u0000\u0000\u0000\u0129\u0127\u0001\u0000\u0000\u0000"+ + "\u0129\u012a\u0001\u0000\u0000\u0000\u012aT\u0001\u0000\u0000\u0000\u012b"+ + "\u012d\u0005\'\u0000\u0000\u012c\u012e\b\u0002\u0000\u0000\u012d\u012c"+ + "\u0001\u0000\u0000\u0000\u012d\u012e\u0001\u0000\u0000\u0000\u012e\u012f"+ + "\u0001\u0000\u0000\u0000\u012f\u0130\u0005\'\u0000\u0000\u0130V\u0001"+ + "\u0000\u0000\u0000\u0131\u0132\u0007\u0003\u0000\u0000\u0132X\u0001\u0000"+ + "\u0000\u0000\u0133\u0134\u0007\u0001\u0000\u0000\u0134Z\u0001\u0000\u0000"+ + "\u0000\u0135\u0139\u0003W+\u0000\u0136\u0139\u0003Y,\u0000\u0137\u0139"+ + "\u0007\u0004\u0000\u0000\u0138\u0135\u0001\u0000\u0000\u0000\u0138\u0136"+ + "\u0001\u0000\u0000\u0000\u0138\u0137\u0001\u0000\u0000\u0000\u0139\\\u0001"+ + "\u0000\u0000\u0000\u013a\u013e\u0003W+\u0000\u013b\u013d\u0003[-\u0000"+ + "\u013c\u013b\u0001\u0000\u0000\u0000\u013d\u0140\u0001\u0000\u0000\u0000"+ + "\u013e\u013c\u0001\u0000\u0000\u0000\u013e\u013f\u0001\u0000\u0000\u0000"+ + "\u013f^\u0001\u0000\u0000\u0000\u0140\u013e\u0001\u0000\u0000\u0000\u0141"+ + "\u0142\u0007\u0005\u0000\u0000\u0142\u0143\u0001\u0000\u0000\u0000\u0143"+ + "\u0144\u0006/\u0000\u0000\u0144`\u0001\u0000\u0000\u0000\u000b\u0000j"+ + "\u00b8\u00bc\u00c4\u00c8\u0123\u0129\u012d\u0138\u013e\u0001\u0006\u0000"+ "\u0000"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); diff --git a/src/main/java/gen/DecafLexer.tokens b/src/main/java/gen/DecafLexer.tokens index bd7816d..501cbd7 100644 --- a/src/main/java/gen/DecafLexer.tokens +++ b/src/main/java/gen/DecafLexer.tokens @@ -48,7 +48,7 @@ WS=45 'public static void main(String[] args)'=4 'void'=5 'int'=6 -'bool'=7 +'boolean'=7 'char'=8 '='=13 '-'=14 diff --git a/src/main/java/gen/DecafParser.java b/src/main/java/gen/DecafParser.java index e95bd8f..2eca0af 100644 --- a/src/main/java/gen/DecafParser.java +++ b/src/main/java/gen/DecafParser.java @@ -51,7 +51,7 @@ public class DecafParser extends Parser { private static String[] makeLiteralNames() { return new String[] { null, null, "'null'", "'public'", "'public static void main(String[] args)'", - "'void'", "'int'", "'bool'", "'char'", null, null, null, null, "'='", + "'void'", "'int'", "'boolean'", "'char'", null, null, null, null, "'='", "'-'", "'+'", "'*'", "'/'", "'%'", "'>'", "'<'", "'>='", "'<='", "'=='", "'!='", "'!'", "'&&'", "'||'", "'.'", "'('", "')'", "'{'", "'}'", "';'", "','", "'class'", "'this'", "'while'", "'if'", "'else'", "'return'",