Merge remote-tracking branch 'origin/master'

This commit is contained in:
David Mueller 2024-06-30 15:02:06 +02:00
commit 99d23e89fa
13 changed files with 951 additions and 793 deletions

View File

@ -21,7 +21,7 @@ subExpression: This | assignableExpr | stmtExpr | OpenRoundBracket subExpression
//.trim().toLength().toLowerCase().count ... //.trim().toLength().toLowerCase().count ...
methodCall: receiver? receivingMethod* Identifier OpenRoundBracket argumentList ClosedRoundBracket; methodCall: receiver? receivingMethod* Identifier OpenRoundBracket argumentList ClosedRoundBracket;
statement: returnStmt Semicolon | localVarDecl | block | whileStmt | ifElseStmt | stmtExpr Semicolon | emptyStatement | print; statement: returnStmt Semicolon | localVarDecl | block | whileStmt | ifElseStmt | print | stmtExpr Semicolon | emptyStatement;
stmtExpr: assign | newDecl | methodCall; stmtExpr: assign | newDecl | methodCall;

View File

@ -0,0 +1,28 @@
package abstractSyntaxTree.Statement;
import TypeCheck.AbstractType;
import TypeCheck.TypeCheckException;
import TypeCheck.TypeCheckResult;
import abstractSyntaxTree.Parameter.ParameterList;
import org.objectweb.asm.MethodVisitor;
import java.util.HashMap;
import java.util.LinkedHashMap;
public class PrintStatement extends AbstractType implements IStatement {
String variableName;
public PrintStatement(String variableName) {
this.variableName = variableName;
}
@Override
public TypeCheckResult typeCheck(HashMap<String, HashMap<String, HashMap<String, ParameterList>>> methodContext, HashMap<String, HashMap<String, String>> typeContext, HashMap<String, String> localVars) throws TypeCheckException {
return null;
}
@Override
public void codeGen(MethodVisitor mv, LinkedHashMap<String, String> localVars, HashMap<String, HashMap<String, String>> typeContext, HashMap<String, HashMap<String, HashMap<String, ParameterList>>> methodContext) throws Exception {
}
}

View File

@ -132,6 +132,8 @@ public class ASTGenerator extends DecafBaseVisitor<Node> {
return visitEmptyStatement(ctx.emptyStatement()); return visitEmptyStatement(ctx.emptyStatement());
} else if (ctx.localVarDecl() != null) { } else if (ctx.localVarDecl() != null) {
return visitLocalVarDecl(ctx.localVarDecl()); return visitLocalVarDecl(ctx.localVarDecl());
} else if (ctx.print() != null) {
return visitPrint(ctx.print());
} }
return null; return null;
} }
@ -196,6 +198,11 @@ public class ASTGenerator extends DecafBaseVisitor<Node> {
return null; return null;
} }
@Override
public Node visitPrint(DecafParser.PrintContext ctx) {
return new PrintStatement(ctx.Identifier().getText());
}
@Override @Override
public Node visitAssign(DecafParser.AssignContext ctx) { public Node visitAssign(DecafParser.AssignContext ctx) {
Node right = visitExpression(ctx.expression()); Node right = visitExpression(ctx.expression());

File diff suppressed because one or more lines are too long

View File

@ -1,81 +1,85 @@
BooleanValue=1 T__0=1
NullValue=2 T__1=2
AccessModifierPublic=3 BooleanValue=3
MainMethodDecl=4 NullValue=4
Void=5 AccessModifierPublic=5
Int=6 MainMethodDecl=6
Boolean=7 Void=7
Char=8 Int=8
DotOperator=9 Boolean=9
LineOperator=10 Char=10
ComparisonOperator=11 DotOperator=11
LogicalOpertor=12 LineOperator=12
Assign=13 ComparisonOperator=13
Minus=14 LogicalOpertor=14
Plus=15 Assign=15
Multipilkation=16 Minus=16
Division=17 Plus=17
Modulo=18 Multipilkation=18
Greater=19 Division=19
Less=20 Modulo=20
GreaterEqual=21 Greater=21
LessEqual=22 Less=22
Equal=23 GreaterEqual=23
NotEqual=24 LessEqual=24
Not=25 Equal=25
And=26 NotEqual=26
Or=27 Not=27
Dot=28 And=28
OpenRoundBracket=29 Or=29
ClosedRoundBracket=30 Dot=30
OpenCurlyBracket=31 OpenRoundBracket=31
ClosedCurlyBracket=32 ClosedRoundBracket=32
Semicolon=33 OpenCurlyBracket=33
Comma=34 ClosedCurlyBracket=34
Class=35 Semicolon=35
This=36 Comma=36
While=37 Class=37
If=38 This=38
Else=39 While=39
Return=40 If=40
New=41 Else=41
IntValue=42 Return=42
CharValue=43 New=43
Identifier=44 IntValue=44
WS=45 CharValue=45
'null'=2 Identifier=46
'public'=3 WS=47
'public static void main(String[] args)'=4 'print('=1
'void'=5 ');'=2
'int'=6 'null'=4
'boolean'=7 'public'=5
'char'=8 'public static void main(String[] args)'=6
'='=13 'void'=7
'-'=14 'int'=8
'+'=15 'boolean'=9
'*'=16 'char'=10
'/'=17 '='=15
'%'=18 '-'=16
'>'=19 '+'=17
'<'=20 '*'=18
'>='=21 '/'=19
'<='=22 '%'=20
'=='=23 '>'=21
'!='=24 '<'=22
'!'=25 '>='=23
'&&'=26 '<='=24
'||'=27 '=='=25
'.'=28 '!='=26
'('=29 '!'=27
')'=30 '&&'=28
'{'=31 '||'=29
'}'=32 '.'=30
';'=33 '('=31
','=34 ')'=32
'class'=35 '{'=33
'this'=36 '}'=34
'while'=37 ';'=35
'if'=38 ','=36
'else'=39 'class'=37
'return'=40 'this'=38
'new'=41 'while'=39
'if'=40
'else'=41
'return'=42
'new'=43

View File

@ -432,6 +432,18 @@ public class DecafBaseListener implements DecafListener {
* <p>The default implementation does nothing.</p> * <p>The default implementation does nothing.</p>
*/ */
@Override public void exitValue(DecafParser.ValueContext ctx) { } @Override public void exitValue(DecafParser.ValueContext 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

@ -257,4 +257,11 @@ public class DecafBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
* {@link #visitChildren} on {@code ctx}.</p> * {@link #visitChildren} on {@code ctx}.</p>
*/ */
@Override public T visitValue(DecafParser.ValueContext ctx) { return visitChildren(ctx); } @Override public T visitValue(DecafParser.ValueContext 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); }
} }

File diff suppressed because one or more lines are too long

View File

@ -17,14 +17,14 @@ public class DecafLexer extends Lexer {
protected static final PredictionContextCache _sharedContextCache = protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache(); new PredictionContextCache();
public static final int public static final int
BooleanValue=1, NullValue=2, AccessModifierPublic=3, MainMethodDecl=4, T__0=1, T__1=2, BooleanValue=3, NullValue=4, AccessModifierPublic=5, MainMethodDecl=6,
Void=5, Int=6, Boolean=7, Char=8, DotOperator=9, LineOperator=10, ComparisonOperator=11, Void=7, Int=8, Boolean=9, Char=10, DotOperator=11, LineOperator=12, ComparisonOperator=13,
LogicalOpertor=12, Assign=13, Minus=14, Plus=15, Multipilkation=16, Division=17, LogicalOpertor=14, Assign=15, Minus=16, Plus=17, Multipilkation=18, Division=19,
Modulo=18, Greater=19, Less=20, GreaterEqual=21, LessEqual=22, Equal=23, Modulo=20, Greater=21, Less=22, GreaterEqual=23, LessEqual=24, Equal=25,
NotEqual=24, Not=25, And=26, Or=27, Dot=28, OpenRoundBracket=29, ClosedRoundBracket=30, NotEqual=26, Not=27, And=28, Or=29, Dot=30, OpenRoundBracket=31, ClosedRoundBracket=32,
OpenCurlyBracket=31, ClosedCurlyBracket=32, Semicolon=33, Comma=34, Class=35, OpenCurlyBracket=33, ClosedCurlyBracket=34, Semicolon=35, Comma=36, Class=37,
This=36, While=37, If=38, Else=39, Return=40, New=41, IntValue=42, CharValue=43, This=38, While=39, If=40, Else=41, Return=42, New=43, IntValue=44, CharValue=45,
Identifier=44, WS=45; Identifier=46, WS=47;
public static String[] channelNames = { public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN" "DEFAULT_TOKEN_CHANNEL", "HIDDEN"
}; };
@ -35,11 +35,11 @@ public class DecafLexer extends Lexer {
private static String[] makeRuleNames() { private static String[] makeRuleNames() {
return new String[] { return new String[] {
"BooleanValue", "NullValue", "AccessModifierPublic", "MainMethodDecl", "T__0", "T__1", "BooleanValue", "NullValue", "AccessModifierPublic",
"Void", "Int", "Boolean", "Char", "DotOperator", "LineOperator", "ComparisonOperator", "MainMethodDecl", "Void", "Int", "Boolean", "Char", "DotOperator", "LineOperator",
"LogicalOpertor", "Assign", "Minus", "Plus", "Multipilkation", "Division", "ComparisonOperator", "LogicalOpertor", "Assign", "Minus", "Plus", "Multipilkation",
"Modulo", "Greater", "Less", "GreaterEqual", "LessEqual", "Equal", "NotEqual", "Division", "Modulo", "Greater", "Less", "GreaterEqual", "LessEqual",
"Not", "And", "Or", "Dot", "OpenRoundBracket", "ClosedRoundBracket", "Equal", "NotEqual", "Not", "And", "Or", "Dot", "OpenRoundBracket", "ClosedRoundBracket",
"OpenCurlyBracket", "ClosedCurlyBracket", "Semicolon", "Comma", "Class", "OpenCurlyBracket", "ClosedCurlyBracket", "Semicolon", "Comma", "Class",
"This", "While", "If", "Else", "Return", "New", "IntValue", "CharValue", "This", "While", "If", "Else", "Return", "New", "IntValue", "CharValue",
"Alpabetic", "Numeric", "ValidIdentSymbols", "Identifier", "WS" "Alpabetic", "Numeric", "ValidIdentSymbols", "Identifier", "WS"
@ -49,7 +49,7 @@ public class DecafLexer extends Lexer {
private static String[] makeLiteralNames() { private static String[] makeLiteralNames() {
return new String[] { return new String[] {
null, null, "'null'", "'public'", "'public static void main(String[] args)'", null, "'print('", "');'", null, "'null'", "'public'", "'public static void main(String[] args)'",
"'void'", "'int'", "'boolean'", "'char'", null, null, null, null, "'='", "'void'", "'int'", "'boolean'", "'char'", null, null, null, null, "'='",
"'-'", "'+'", "'*'", "'/'", "'%'", "'>'", "'<'", "'>='", "'<='", "'=='", "'-'", "'+'", "'*'", "'/'", "'%'", "'>'", "'<'", "'>='", "'<='", "'=='",
"'!='", "'!'", "'&&'", "'||'", "'.'", "'('", "')'", "'{'", "'}'", "';'", "'!='", "'!'", "'&&'", "'||'", "'.'", "'('", "')'", "'{'", "'}'", "';'",
@ -60,11 +60,11 @@ public class DecafLexer extends Lexer {
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, "BooleanValue", "NullValue", "AccessModifierPublic", "MainMethodDecl", null, null, null, "BooleanValue", "NullValue", "AccessModifierPublic",
"Void", "Int", "Boolean", "Char", "DotOperator", "LineOperator", "ComparisonOperator", "MainMethodDecl", "Void", "Int", "Boolean", "Char", "DotOperator", "LineOperator",
"LogicalOpertor", "Assign", "Minus", "Plus", "Multipilkation", "Division", "ComparisonOperator", "LogicalOpertor", "Assign", "Minus", "Plus", "Multipilkation",
"Modulo", "Greater", "Less", "GreaterEqual", "LessEqual", "Equal", "NotEqual", "Division", "Modulo", "Greater", "Less", "GreaterEqual", "LessEqual",
"Not", "And", "Or", "Dot", "OpenRoundBracket", "ClosedRoundBracket", "Equal", "NotEqual", "Not", "And", "Or", "Dot", "OpenRoundBracket", "ClosedRoundBracket",
"OpenCurlyBracket", "ClosedCurlyBracket", "Semicolon", "Comma", "Class", "OpenCurlyBracket", "ClosedCurlyBracket", "Semicolon", "Comma", "Class",
"This", "While", "If", "Else", "Return", "New", "IntValue", "CharValue", "This", "While", "If", "Else", "Return", "New", "IntValue", "CharValue",
"Identifier", "WS" "Identifier", "WS"
@ -129,7 +129,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\u0000-\u0145\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ "\u0004\u0000/\u0153\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"+
@ -142,194 +142,201 @@ public class DecafLexer extends Lexer {
"\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+ "\u001e\u0007\u001e\u0002\u001f\u0007\u001f\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(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+ "&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+
"+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u0001\u0000"+ "+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+
"\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+ "0\u00021\u00071\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+
"\u0001\u0000\u0001\u0000\u0003\u0000k\b\u0000\u0001\u0001\u0001\u0001"+ "\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002"+ "\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001"+
"\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003"+ "\u0002\u0001\u0002\u0001\u0002\u0003\u0002y\b\u0002\u0001\u0003\u0001"+
"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001"+
"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ "\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001"+
"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ "\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+
"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ "\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+
"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ "\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+
"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ "\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+
"\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ "\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+
"\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006"+ "\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+
"\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ "\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+
"\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001"+ "\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b"+
"\b\u0001\b\u0003\b\u00b9\b\b\u0001\t\u0001\t\u0003\t\u00bd\b\t\u0001\n"+ "\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001"+
"\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0003\n\u00c5\b\n\u0001\u000b"+ "\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0003\n\u00c7\b\n\u0001\u000b"+
"\u0001\u000b\u0003\u000b\u00c9\b\u000b\u0001\f\u0001\f\u0001\r\u0001\r"+ "\u0001\u000b\u0003\u000b\u00cb\b\u000b\u0001\f\u0001\f\u0001\f\u0001\f"+
"\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010"+ "\u0001\f\u0001\f\u0003\f\u00d3\b\f\u0001\r\u0001\r\u0003\r\u00d7\b\r\u0001"+
"\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ "\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001"+
"\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015"+ "\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001"+
"\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017"+ "\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001"+
"\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a"+ "\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001"+
"\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c"+ "\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001"+
"\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f"+ "\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+
"\u0001 \u0001 \u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\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"+
"\'\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)"+ "(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001"+
"\u000b)\f)\u0129\u0001*\u0001*\u0003*\u012e\b*\u0001*\u0001*\u0001+\u0001"+ "*\u0001*\u0001*\u0001*\u0001+\u0005+\u0130\b+\n+\f+\u0133\t+\u0001+\u0004"+
"+\u0001,\u0001,\u0001-\u0001-\u0001-\u0003-\u0139\b-\u0001.\u0001.\u0005"+ "+\u0136\b+\u000b+\f+\u0137\u0001,\u0001,\u0003,\u013c\b,\u0001,\u0001"+
".\u013d\b.\n.\f.\u0140\t.\u0001/\u0001/\u0001/\u0001/\u0000\u00000\u0001"+ ",\u0001-\u0001-\u0001.\u0001.\u0001/\u0001/\u0001/\u0003/\u0147\b/\u0001"+
"\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007"+ "0\u00010\u00050\u014b\b0\n0\f0\u014e\t0\u00011\u00011\u00011\u00011\u0000"+
"\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e\u001d"+ "\u00002\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b"+
"\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017/"+ "\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b"+
"\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K"+ "\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016"+
"&M\'O(Q)S*U+W\u0000Y\u0000[\u0000],_-\u0001\u0000\u0006\u0002\u0000++"+ "-\u0017/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\""+
"--\u0001\u000009\u0002\u0000\n\n\r\r\u0002\u0000AZaz\u0002\u0000$$__\u0003"+ "E#G$I%K&M\'O(Q)S*U+W,Y-[\u0000]\u0000_\u0000a.c/\u0001\u0000\u0006\u0002"+
"\u0000\t\n\r\r \u0151\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003"+ "\u0000++--\u0001\u000009\u0002\u0000\n\n\r\r\u0002\u0000AZaz\u0002\u0000"+
"\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007"+ "$$__\u0003\u0000\t\n\r\r \u015f\u0000\u0001\u0001\u0000\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001"+ "\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000"+ "\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b"+
"\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000"+ "\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001"+
"\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000"+ "\u0000\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001"+
"\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000"+ "\u0000\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001"+
"\u0000\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000"+ "\u0000\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001"+
"\u0000\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001"+
"\u0000%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000"+
")\u0001\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001"+ "\u0000\u0000%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000"+ "\u0000)\u0001\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-"+
"\u0000\u00003\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u0000"+ "\u0001\u0000\u0000\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000"+
"7\u0001\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001"+ "\u0000\u0000\u00003\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000"+ "\u00007\u0001\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;"+
"\u0000\u0000A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000"+ "\u0001\u0000\u0000\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000"+
"E\u0001\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001"+ "\u0000\u0000\u0000A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000"+ "\u0000E\u0001\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I"+
"\u0000\u0000O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000"+ "\u0001\u0000\u0000\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000"+
"S\u0001\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000]\u0001"+ "\u0000\u0000\u0000O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000"+
"\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0001j\u0001\u0000\u0000"+ "\u0000S\u0001\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W"+
"\u0000\u0003l\u0001\u0000\u0000\u0000\u0005q\u0001\u0000\u0000\u0000\u0007"+ "\u0001\u0000\u0000\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000a\u0001\u0000"+
"x\u0001\u0000\u0000\u0000\t\u009f\u0001\u0000\u0000\u0000\u000b\u00a4"+ "\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0001e\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000\r\u00a8\u0001\u0000\u0000\u0000\u000f\u00b0\u0001"+ "\u0003l\u0001\u0000\u0000\u0000\u0005x\u0001\u0000\u0000\u0000\u0007z"+
"\u0000\u0000\u0000\u0011\u00b8\u0001\u0000\u0000\u0000\u0013\u00bc\u0001"+ "\u0001\u0000\u0000\u0000\t\u007f\u0001\u0000\u0000\u0000\u000b\u0086\u0001"+
"\u0000\u0000\u0000\u0015\u00c4\u0001\u0000\u0000\u0000\u0017\u00c8\u0001"+ "\u0000\u0000\u0000\r\u00ad\u0001\u0000\u0000\u0000\u000f\u00b2\u0001\u0000"+
"\u0000\u0000\u0000\u0019\u00ca\u0001\u0000\u0000\u0000\u001b\u00cc\u0001"+ "\u0000\u0000\u0011\u00b6\u0001\u0000\u0000\u0000\u0013\u00be\u0001\u0000"+
"\u0000\u0000\u0000\u001d\u00ce\u0001\u0000\u0000\u0000\u001f\u00d0\u0001"+ "\u0000\u0000\u0015\u00c6\u0001\u0000\u0000\u0000\u0017\u00ca\u0001\u0000"+
"\u0000\u0000\u0000!\u00d2\u0001\u0000\u0000\u0000#\u00d4\u0001\u0000\u0000"+ "\u0000\u0000\u0019\u00d2\u0001\u0000\u0000\u0000\u001b\u00d6\u0001\u0000"+
"\u0000%\u00d6\u0001\u0000\u0000\u0000\'\u00d8\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u001d\u00d8\u0001\u0000\u0000\u0000\u001f\u00da\u0001\u0000"+
")\u00da\u0001\u0000\u0000\u0000+\u00dd\u0001\u0000\u0000\u0000-\u00e0"+ "\u0000\u0000!\u00dc\u0001\u0000\u0000\u0000#\u00de\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000/\u00e3\u0001\u0000\u0000\u00001\u00e6\u0001\u0000"+ "%\u00e0\u0001\u0000\u0000\u0000\'\u00e2\u0001\u0000\u0000\u0000)\u00e4"+
"\u0000\u00003\u00e8\u0001\u0000\u0000\u00005\u00eb\u0001\u0000\u0000\u0000"+ "\u0001\u0000\u0000\u0000+\u00e6\u0001\u0000\u0000\u0000-\u00e8\u0001\u0000"+
"7\u00ee\u0001\u0000\u0000\u00009\u00f0\u0001\u0000\u0000\u0000;\u00f2"+ "\u0000\u0000/\u00eb\u0001\u0000\u0000\u00001\u00ee\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000=\u00f4\u0001\u0000\u0000\u0000?\u00f6\u0001\u0000"+ "3\u00f1\u0001\u0000\u0000\u00005\u00f4\u0001\u0000\u0000\u00007\u00f6"+
"\u0000\u0000A\u00f8\u0001\u0000\u0000\u0000C\u00fa\u0001\u0000\u0000\u0000"+ "\u0001\u0000\u0000\u00009\u00f9\u0001\u0000\u0000\u0000;\u00fc\u0001\u0000"+
"E\u00fc\u0001\u0000\u0000\u0000G\u0102\u0001\u0000\u0000\u0000I\u0107"+ "\u0000\u0000=\u00fe\u0001\u0000\u0000\u0000?\u0100\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000K\u010d\u0001\u0000\u0000\u0000M\u0110\u0001\u0000"+ "A\u0102\u0001\u0000\u0000\u0000C\u0104\u0001\u0000\u0000\u0000E\u0106"+
"\u0000\u0000O\u0115\u0001\u0000\u0000\u0000Q\u011c\u0001\u0000\u0000\u0000"+ "\u0001\u0000\u0000\u0000G\u0108\u0001\u0000\u0000\u0000I\u010a\u0001\u0000"+
"S\u0123\u0001\u0000\u0000\u0000U\u012b\u0001\u0000\u0000\u0000W\u0131"+ "\u0000\u0000K\u0110\u0001\u0000\u0000\u0000M\u0115\u0001\u0000\u0000\u0000"+
"\u0001\u0000\u0000\u0000Y\u0133\u0001\u0000\u0000\u0000[\u0138\u0001\u0000"+ "O\u011b\u0001\u0000\u0000\u0000Q\u011e\u0001\u0000\u0000\u0000S\u0123"+
"\u0000\u0000]\u013a\u0001\u0000\u0000\u0000_\u0141\u0001\u0000\u0000\u0000"+ "\u0001\u0000\u0000\u0000U\u012a\u0001\u0000\u0000\u0000W\u0131\u0001\u0000"+
"ab\u0005t\u0000\u0000bc\u0005r\u0000\u0000cd\u0005u\u0000\u0000dk\u0005"+ "\u0000\u0000Y\u0139\u0001\u0000\u0000\u0000[\u013f\u0001\u0000\u0000\u0000"+
"e\u0000\u0000ef\u0005f\u0000\u0000fg\u0005a\u0000\u0000gh\u0005l\u0000"+ "]\u0141\u0001\u0000\u0000\u0000_\u0146\u0001\u0000\u0000\u0000a\u0148"+
"\u0000hi\u0005s\u0000\u0000ik\u0005e\u0000\u0000ja\u0001\u0000\u0000\u0000"+ "\u0001\u0000\u0000\u0000c\u014f\u0001\u0000\u0000\u0000ef\u0005p\u0000"+
"je\u0001\u0000\u0000\u0000k\u0002\u0001\u0000\u0000\u0000lm\u0005n\u0000"+ "\u0000fg\u0005r\u0000\u0000gh\u0005i\u0000\u0000hi\u0005n\u0000\u0000"+
"\u0000mn\u0005u\u0000\u0000no\u0005l\u0000\u0000op\u0005l\u0000\u0000"+ "ij\u0005t\u0000\u0000jk\u0005(\u0000\u0000k\u0002\u0001\u0000\u0000\u0000"+
"p\u0004\u0001\u0000\u0000\u0000qr\u0005p\u0000\u0000rs\u0005u\u0000\u0000"+ "lm\u0005)\u0000\u0000mn\u0005;\u0000\u0000n\u0004\u0001\u0000\u0000\u0000"+
"st\u0005b\u0000\u0000tu\u0005l\u0000\u0000uv\u0005i\u0000\u0000vw\u0005"+ "op\u0005t\u0000\u0000pq\u0005r\u0000\u0000qr\u0005u\u0000\u0000ry\u0005"+
"c\u0000\u0000w\u0006\u0001\u0000\u0000\u0000xy\u0005p\u0000\u0000yz\u0005"+ "e\u0000\u0000st\u0005f\u0000\u0000tu\u0005a\u0000\u0000uv\u0005l\u0000"+
"u\u0000\u0000z{\u0005b\u0000\u0000{|\u0005l\u0000\u0000|}\u0005i\u0000"+ "\u0000vw\u0005s\u0000\u0000wy\u0005e\u0000\u0000xo\u0001\u0000\u0000\u0000"+
"\u0000}~\u0005c\u0000\u0000~\u007f\u0005 \u0000\u0000\u007f\u0080\u0005"+ "xs\u0001\u0000\u0000\u0000y\u0006\u0001\u0000\u0000\u0000z{\u0005n\u0000"+
"s\u0000\u0000\u0080\u0081\u0005t\u0000\u0000\u0081\u0082\u0005a\u0000"+ "\u0000{|\u0005u\u0000\u0000|}\u0005l\u0000\u0000}~\u0005l\u0000\u0000"+
"\u0000\u0082\u0083\u0005t\u0000\u0000\u0083\u0084\u0005i\u0000\u0000\u0084"+ "~\b\u0001\u0000\u0000\u0000\u007f\u0080\u0005p\u0000\u0000\u0080\u0081"+
"\u0085\u0005c\u0000\u0000\u0085\u0086\u0005 \u0000\u0000\u0086\u0087\u0005"+ "\u0005u\u0000\u0000\u0081\u0082\u0005b\u0000\u0000\u0082\u0083\u0005l"+
"v\u0000\u0000\u0087\u0088\u0005o\u0000\u0000\u0088\u0089\u0005i\u0000"+ "\u0000\u0000\u0083\u0084\u0005i\u0000\u0000\u0084\u0085\u0005c\u0000\u0000"+
"\u0000\u0089\u008a\u0005d\u0000\u0000\u008a\u008b\u0005 \u0000\u0000\u008b"+ "\u0085\n\u0001\u0000\u0000\u0000\u0086\u0087\u0005p\u0000\u0000\u0087"+
"\u008c\u0005m\u0000\u0000\u008c\u008d\u0005a\u0000\u0000\u008d\u008e\u0005"+ "\u0088\u0005u\u0000\u0000\u0088\u0089\u0005b\u0000\u0000\u0089\u008a\u0005"+
"i\u0000\u0000\u008e\u008f\u0005n\u0000\u0000\u008f\u0090\u0005(\u0000"+ "l\u0000\u0000\u008a\u008b\u0005i\u0000\u0000\u008b\u008c\u0005c\u0000"+
"\u0000\u0090\u0091\u0005S\u0000\u0000\u0091\u0092\u0005t\u0000\u0000\u0092"+ "\u0000\u008c\u008d\u0005 \u0000\u0000\u008d\u008e\u0005s\u0000\u0000\u008e"+
"\u0093\u0005r\u0000\u0000\u0093\u0094\u0005i\u0000\u0000\u0094\u0095\u0005"+ "\u008f\u0005t\u0000\u0000\u008f\u0090\u0005a\u0000\u0000\u0090\u0091\u0005"+
"n\u0000\u0000\u0095\u0096\u0005g\u0000\u0000\u0096\u0097\u0005[\u0000"+ "t\u0000\u0000\u0091\u0092\u0005i\u0000\u0000\u0092\u0093\u0005c\u0000"+
"\u0000\u0097\u0098\u0005]\u0000\u0000\u0098\u0099\u0005 \u0000\u0000\u0099"+ "\u0000\u0093\u0094\u0005 \u0000\u0000\u0094\u0095\u0005v\u0000\u0000\u0095"+
"\u009a\u0005a\u0000\u0000\u009a\u009b\u0005r\u0000\u0000\u009b\u009c\u0005"+ "\u0096\u0005o\u0000\u0000\u0096\u0097\u0005i\u0000\u0000\u0097\u0098\u0005"+
"g\u0000\u0000\u009c\u009d\u0005s\u0000\u0000\u009d\u009e\u0005)\u0000"+ "d\u0000\u0000\u0098\u0099\u0005 \u0000\u0000\u0099\u009a\u0005m\u0000"+
"\u0000\u009e\b\u0001\u0000\u0000\u0000\u009f\u00a0\u0005v\u0000\u0000"+ "\u0000\u009a\u009b\u0005a\u0000\u0000\u009b\u009c\u0005i\u0000\u0000\u009c"+
"\u00a0\u00a1\u0005o\u0000\u0000\u00a1\u00a2\u0005i\u0000\u0000\u00a2\u00a3"+ "\u009d\u0005n\u0000\u0000\u009d\u009e\u0005(\u0000\u0000\u009e\u009f\u0005"+
"\u0005d\u0000\u0000\u00a3\n\u0001\u0000\u0000\u0000\u00a4\u00a5\u0005"+ "S\u0000\u0000\u009f\u00a0\u0005t\u0000\u0000\u00a0\u00a1\u0005r\u0000"+
"i\u0000\u0000\u00a5\u00a6\u0005n\u0000\u0000\u00a6\u00a7\u0005t\u0000"+ "\u0000\u00a1\u00a2\u0005i\u0000\u0000\u00a2\u00a3\u0005n\u0000\u0000\u00a3"+
"\u0000\u00a7\f\u0001\u0000\u0000\u0000\u00a8\u00a9\u0005b\u0000\u0000"+ "\u00a4\u0005g\u0000\u0000\u00a4\u00a5\u0005[\u0000\u0000\u00a5\u00a6\u0005"+
"\u00a9\u00aa\u0005o\u0000\u0000\u00aa\u00ab\u0005o\u0000\u0000\u00ab\u00ac"+ "]\u0000\u0000\u00a6\u00a7\u0005 \u0000\u0000\u00a7\u00a8\u0005a\u0000"+
"\u0005l\u0000\u0000\u00ac\u00ad\u0005e\u0000\u0000\u00ad\u00ae\u0005a"+ "\u0000\u00a8\u00a9\u0005r\u0000\u0000\u00a9\u00aa\u0005g\u0000\u0000\u00aa"+
"\u0000\u0000\u00ae\u00af\u0005n\u0000\u0000\u00af\u000e\u0001\u0000\u0000"+ "\u00ab\u0005s\u0000\u0000\u00ab\u00ac\u0005)\u0000\u0000\u00ac\f\u0001"+
"\u0000\u00b0\u00b1\u0005c\u0000\u0000\u00b1\u00b2\u0005h\u0000\u0000\u00b2"+ "\u0000\u0000\u0000\u00ad\u00ae\u0005v\u0000\u0000\u00ae\u00af\u0005o\u0000"+
"\u00b3\u0005a\u0000\u0000\u00b3\u00b4\u0005r\u0000\u0000\u00b4\u0010\u0001"+ "\u0000\u00af\u00b0\u0005i\u0000\u0000\u00b0\u00b1\u0005d\u0000\u0000\u00b1"+
"\u0000\u0000\u0000\u00b5\u00b9\u0003\u001f\u000f\u0000\u00b6\u00b9\u0003"+ "\u000e\u0001\u0000\u0000\u0000\u00b2\u00b3\u0005i\u0000\u0000\u00b3\u00b4"+
"!\u0010\u0000\u00b7\u00b9\u0003#\u0011\u0000\u00b8\u00b5\u0001\u0000\u0000"+ "\u0005n\u0000\u0000\u00b4\u00b5\u0005t\u0000\u0000\u00b5\u0010\u0001\u0000"+
"\u0000\u00b8\u00b6\u0001\u0000\u0000\u0000\u00b8\u00b7\u0001\u0000\u0000"+ "\u0000\u0000\u00b6\u00b7\u0005b\u0000\u0000\u00b7\u00b8\u0005o\u0000\u0000"+
"\u0000\u00b9\u0012\u0001\u0000\u0000\u0000\u00ba\u00bd\u0003\u001d\u000e"+ "\u00b8\u00b9\u0005o\u0000\u0000\u00b9\u00ba\u0005l\u0000\u0000\u00ba\u00bb"+
"\u0000\u00bb\u00bd\u0003\u001b\r\u0000\u00bc\u00ba\u0001\u0000\u0000\u0000"+ "\u0005e\u0000\u0000\u00bb\u00bc\u0005a\u0000\u0000\u00bc\u00bd\u0005n"+
"\u00bc\u00bb\u0001\u0000\u0000\u0000\u00bd\u0014\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u00bd\u0012\u0001\u0000\u0000\u0000\u00be\u00bf\u0005c\u0000"+
"\u00be\u00c5\u0003%\u0012\u0000\u00bf\u00c5\u0003\'\u0013\u0000\u00c0"+ "\u0000\u00bf\u00c0\u0005h\u0000\u0000\u00c0\u00c1\u0005a\u0000\u0000\u00c1"+
"\u00c5\u0003)\u0014\u0000\u00c1\u00c5\u0003+\u0015\u0000\u00c2\u00c5\u0003"+ "\u00c2\u0005r\u0000\u0000\u00c2\u0014\u0001\u0000\u0000\u0000\u00c3\u00c7"+
"-\u0016\u0000\u00c3\u00c5\u0003/\u0017\u0000\u00c4\u00be\u0001\u0000\u0000"+ "\u0003#\u0011\u0000\u00c4\u00c7\u0003%\u0012\u0000\u00c5\u00c7\u0003\'"+
"\u0000\u00c4\u00bf\u0001\u0000\u0000\u0000\u00c4\u00c0\u0001\u0000\u0000"+ "\u0013\u0000\u00c6\u00c3\u0001\u0000\u0000\u0000\u00c6\u00c4\u0001\u0000"+
"\u0000\u00c4\u00c1\u0001\u0000\u0000\u0000\u00c4\u00c2\u0001\u0000\u0000"+ "\u0000\u0000\u00c6\u00c5\u0001\u0000\u0000\u0000\u00c7\u0016\u0001\u0000"+
"\u0000\u00c4\u00c3\u0001\u0000\u0000\u0000\u00c5\u0016\u0001\u0000\u0000"+ "\u0000\u0000\u00c8\u00cb\u0003!\u0010\u0000\u00c9\u00cb\u0003\u001f\u000f"+
"\u0000\u00c6\u00c9\u00033\u0019\u0000\u00c7\u00c9\u00035\u001a\u0000\u00c8"+ "\u0000\u00ca\u00c8\u0001\u0000\u0000\u0000\u00ca\u00c9\u0001\u0000\u0000"+
"\u00c6\u0001\u0000\u0000\u0000\u00c8\u00c7\u0001\u0000\u0000\u0000\u00c9"+ "\u0000\u00cb\u0018\u0001\u0000\u0000\u0000\u00cc\u00d3\u0003)\u0014\u0000"+
"\u0018\u0001\u0000\u0000\u0000\u00ca\u00cb\u0005=\u0000\u0000\u00cb\u001a"+ "\u00cd\u00d3\u0003+\u0015\u0000\u00ce\u00d3\u0003-\u0016\u0000\u00cf\u00d3"+
"\u0001\u0000\u0000\u0000\u00cc\u00cd\u0005-\u0000\u0000\u00cd\u001c\u0001"+ "\u0003/\u0017\u0000\u00d0\u00d3\u00031\u0018\u0000\u00d1\u00d3\u00033"+
"\u0000\u0000\u0000\u00ce\u00cf\u0005+\u0000\u0000\u00cf\u001e\u0001\u0000"+ "\u0019\u0000\u00d2\u00cc\u0001\u0000\u0000\u0000\u00d2\u00cd\u0001\u0000"+
"\u0000\u0000\u00d0\u00d1\u0005*\u0000\u0000\u00d1 \u0001\u0000\u0000\u0000"+ "\u0000\u0000\u00d2\u00ce\u0001\u0000\u0000\u0000\u00d2\u00cf\u0001\u0000"+
"\u00d2\u00d3\u0005/\u0000\u0000\u00d3\"\u0001\u0000\u0000\u0000\u00d4"+ "\u0000\u0000\u00d2\u00d0\u0001\u0000\u0000\u0000\u00d2\u00d1\u0001\u0000"+
"\u00d5\u0005%\u0000\u0000\u00d5$\u0001\u0000\u0000\u0000\u00d6\u00d7\u0005"+ "\u0000\u0000\u00d3\u001a\u0001\u0000\u0000\u0000\u00d4\u00d7\u00037\u001b"+
">\u0000\u0000\u00d7&\u0001\u0000\u0000\u0000\u00d8\u00d9\u0005<\u0000"+ "\u0000\u00d5\u00d7\u00039\u001c\u0000\u00d6\u00d4\u0001\u0000\u0000\u0000"+
"\u0000\u00d9(\u0001\u0000\u0000\u0000\u00da\u00db\u0005>\u0000\u0000\u00db"+ "\u00d6\u00d5\u0001\u0000\u0000\u0000\u00d7\u001c\u0001\u0000\u0000\u0000"+
"\u00dc\u0005=\u0000\u0000\u00dc*\u0001\u0000\u0000\u0000\u00dd\u00de\u0005"+ "\u00d8\u00d9\u0005=\u0000\u0000\u00d9\u001e\u0001\u0000\u0000\u0000\u00da"+
"<\u0000\u0000\u00de\u00df\u0005=\u0000\u0000\u00df,\u0001\u0000\u0000"+ "\u00db\u0005-\u0000\u0000\u00db \u0001\u0000\u0000\u0000\u00dc\u00dd\u0005"+
"\u0000\u00e0\u00e1\u0005=\u0000\u0000\u00e1\u00e2\u0005=\u0000\u0000\u00e2"+ "+\u0000\u0000\u00dd\"\u0001\u0000\u0000\u0000\u00de\u00df\u0005*\u0000"+
".\u0001\u0000\u0000\u0000\u00e3\u00e4\u0005!\u0000\u0000\u00e4\u00e5\u0005"+ "\u0000\u00df$\u0001\u0000\u0000\u0000\u00e0\u00e1\u0005/\u0000\u0000\u00e1"+
"=\u0000\u0000\u00e50\u0001\u0000\u0000\u0000\u00e6\u00e7\u0005!\u0000"+ "&\u0001\u0000\u0000\u0000\u00e2\u00e3\u0005%\u0000\u0000\u00e3(\u0001"+
"\u0000\u00e72\u0001\u0000\u0000\u0000\u00e8\u00e9\u0005&\u0000\u0000\u00e9"+ "\u0000\u0000\u0000\u00e4\u00e5\u0005>\u0000\u0000\u00e5*\u0001\u0000\u0000"+
"\u00ea\u0005&\u0000\u0000\u00ea4\u0001\u0000\u0000\u0000\u00eb\u00ec\u0005"+ "\u0000\u00e6\u00e7\u0005<\u0000\u0000\u00e7,\u0001\u0000\u0000\u0000\u00e8"+
"|\u0000\u0000\u00ec\u00ed\u0005|\u0000\u0000\u00ed6\u0001\u0000\u0000"+ "\u00e9\u0005>\u0000\u0000\u00e9\u00ea\u0005=\u0000\u0000\u00ea.\u0001"+
"\u0000\u00ee\u00ef\u0005.\u0000\u0000\u00ef8\u0001\u0000\u0000\u0000\u00f0"+ "\u0000\u0000\u0000\u00eb\u00ec\u0005<\u0000\u0000\u00ec\u00ed\u0005=\u0000"+
"\u00f1\u0005(\u0000\u0000\u00f1:\u0001\u0000\u0000\u0000\u00f2\u00f3\u0005"+ "\u0000\u00ed0\u0001\u0000\u0000\u0000\u00ee\u00ef\u0005=\u0000\u0000\u00ef"+
")\u0000\u0000\u00f3<\u0001\u0000\u0000\u0000\u00f4\u00f5\u0005{\u0000"+ "\u00f0\u0005=\u0000\u0000\u00f02\u0001\u0000\u0000\u0000\u00f1\u00f2\u0005"+
"\u0000\u00f5>\u0001\u0000\u0000\u0000\u00f6\u00f7\u0005}\u0000\u0000\u00f7"+ "!\u0000\u0000\u00f2\u00f3\u0005=\u0000\u0000\u00f34\u0001\u0000\u0000"+
"@\u0001\u0000\u0000\u0000\u00f8\u00f9\u0005;\u0000\u0000\u00f9B\u0001"+ "\u0000\u00f4\u00f5\u0005!\u0000\u0000\u00f56\u0001\u0000\u0000\u0000\u00f6"+
"\u0000\u0000\u0000\u00fa\u00fb\u0005,\u0000\u0000\u00fbD\u0001\u0000\u0000"+ "\u00f7\u0005&\u0000\u0000\u00f7\u00f8\u0005&\u0000\u0000\u00f88\u0001"+
"\u0000\u00fc\u00fd\u0005c\u0000\u0000\u00fd\u00fe\u0005l\u0000\u0000\u00fe"+ "\u0000\u0000\u0000\u00f9\u00fa\u0005|\u0000\u0000\u00fa\u00fb\u0005|\u0000"+
"\u00ff\u0005a\u0000\u0000\u00ff\u0100\u0005s\u0000\u0000\u0100\u0101\u0005"+ "\u0000\u00fb:\u0001\u0000\u0000\u0000\u00fc\u00fd\u0005.\u0000\u0000\u00fd"+
"s\u0000\u0000\u0101F\u0001\u0000\u0000\u0000\u0102\u0103\u0005t\u0000"+ "<\u0001\u0000\u0000\u0000\u00fe\u00ff\u0005(\u0000\u0000\u00ff>\u0001"+
"\u0000\u0103\u0104\u0005h\u0000\u0000\u0104\u0105\u0005i\u0000\u0000\u0105"+ "\u0000\u0000\u0000\u0100\u0101\u0005)\u0000\u0000\u0101@\u0001\u0000\u0000"+
"\u0106\u0005s\u0000\u0000\u0106H\u0001\u0000\u0000\u0000\u0107\u0108\u0005"+ "\u0000\u0102\u0103\u0005{\u0000\u0000\u0103B\u0001\u0000\u0000\u0000\u0104"+
"w\u0000\u0000\u0108\u0109\u0005h\u0000\u0000\u0109\u010a\u0005i\u0000"+ "\u0105\u0005}\u0000\u0000\u0105D\u0001\u0000\u0000\u0000\u0106\u0107\u0005"+
"\u0000\u010a\u010b\u0005l\u0000\u0000\u010b\u010c\u0005e\u0000\u0000\u010c"+ ";\u0000\u0000\u0107F\u0001\u0000\u0000\u0000\u0108\u0109\u0005,\u0000"+
"J\u0001\u0000\u0000\u0000\u010d\u010e\u0005i\u0000\u0000\u010e\u010f\u0005"+ "\u0000\u0109H\u0001\u0000\u0000\u0000\u010a\u010b\u0005c\u0000\u0000\u010b"+
"f\u0000\u0000\u010fL\u0001\u0000\u0000\u0000\u0110\u0111\u0005e\u0000"+ "\u010c\u0005l\u0000\u0000\u010c\u010d\u0005a\u0000\u0000\u010d\u010e\u0005"+
"\u0000\u0111\u0112\u0005l\u0000\u0000\u0112\u0113\u0005s\u0000\u0000\u0113"+ "s\u0000\u0000\u010e\u010f\u0005s\u0000\u0000\u010fJ\u0001\u0000\u0000"+
"\u0114\u0005e\u0000\u0000\u0114N\u0001\u0000\u0000\u0000\u0115\u0116\u0005"+ "\u0000\u0110\u0111\u0005t\u0000\u0000\u0111\u0112\u0005h\u0000\u0000\u0112"+
"r\u0000\u0000\u0116\u0117\u0005e\u0000\u0000\u0117\u0118\u0005t\u0000"+ "\u0113\u0005i\u0000\u0000\u0113\u0114\u0005s\u0000\u0000\u0114L\u0001"+
"\u0000\u0118\u0119\u0005u\u0000\u0000\u0119\u011a\u0005r\u0000\u0000\u011a"+ "\u0000\u0000\u0000\u0115\u0116\u0005w\u0000\u0000\u0116\u0117\u0005h\u0000"+
"\u011b\u0005n\u0000\u0000\u011bP\u0001\u0000\u0000\u0000\u011c\u011d\u0005"+ "\u0000\u0117\u0118\u0005i\u0000\u0000\u0118\u0119\u0005l\u0000\u0000\u0119"+
"n\u0000\u0000\u011d\u011e\u0005e\u0000\u0000\u011e\u011f\u0005w\u0000"+ "\u011a\u0005e\u0000\u0000\u011aN\u0001\u0000\u0000\u0000\u011b\u011c\u0005"+
"\u0000\u011fR\u0001\u0000\u0000\u0000\u0120\u0122\u0007\u0000\u0000\u0000"+ "i\u0000\u0000\u011c\u011d\u0005f\u0000\u0000\u011dP\u0001\u0000\u0000"+
"\u0121\u0120\u0001\u0000\u0000\u0000\u0122\u0125\u0001\u0000\u0000\u0000"+ "\u0000\u011e\u011f\u0005e\u0000\u0000\u011f\u0120\u0005l\u0000\u0000\u0120"+
"\u0123\u0121\u0001\u0000\u0000\u0000\u0123\u0124\u0001\u0000\u0000\u0000"+ "\u0121\u0005s\u0000\u0000\u0121\u0122\u0005e\u0000\u0000\u0122R\u0001"+
"\u0124\u0127\u0001\u0000\u0000\u0000\u0125\u0123\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u0123\u0124\u0005r\u0000\u0000\u0124\u0125\u0005e\u0000"+
"\u0126\u0128\u0007\u0001\u0000\u0000\u0127\u0126\u0001\u0000\u0000\u0000"+ "\u0000\u0125\u0126\u0005t\u0000\u0000\u0126\u0127\u0005u\u0000\u0000\u0127"+
"\u0128\u0129\u0001\u0000\u0000\u0000\u0129\u0127\u0001\u0000\u0000\u0000"+ "\u0128\u0005r\u0000\u0000\u0128\u0129\u0005n\u0000\u0000\u0129T\u0001"+
"\u0129\u012a\u0001\u0000\u0000\u0000\u012aT\u0001\u0000\u0000\u0000\u012b"+ "\u0000\u0000\u0000\u012a\u012b\u0005n\u0000\u0000\u012b\u012c\u0005e\u0000"+
"\u012d\u0005\'\u0000\u0000\u012c\u012e\b\u0002\u0000\u0000\u012d\u012c"+ "\u0000\u012c\u012d\u0005w\u0000\u0000\u012dV\u0001\u0000\u0000\u0000\u012e"+
"\u0001\u0000\u0000\u0000\u012d\u012e\u0001\u0000\u0000\u0000\u012e\u012f"+ "\u0130\u0007\u0000\u0000\u0000\u012f\u012e\u0001\u0000\u0000\u0000\u0130"+
"\u0001\u0000\u0000\u0000\u012f\u0130\u0005\'\u0000\u0000\u0130V\u0001"+ "\u0133\u0001\u0000\u0000\u0000\u0131\u012f\u0001\u0000\u0000\u0000\u0131"+
"\u0000\u0000\u0000\u0131\u0132\u0007\u0003\u0000\u0000\u0132X\u0001\u0000"+ "\u0132\u0001\u0000\u0000\u0000\u0132\u0135\u0001\u0000\u0000\u0000\u0133"+
"\u0000\u0000\u0133\u0134\u0007\u0001\u0000\u0000\u0134Z\u0001\u0000\u0000"+ "\u0131\u0001\u0000\u0000\u0000\u0134\u0136\u0007\u0001\u0000\u0000\u0135"+
"\u0000\u0135\u0139\u0003W+\u0000\u0136\u0139\u0003Y,\u0000\u0137\u0139"+ "\u0134\u0001\u0000\u0000\u0000\u0136\u0137\u0001\u0000\u0000\u0000\u0137"+
"\u0007\u0004\u0000\u0000\u0138\u0135\u0001\u0000\u0000\u0000\u0138\u0136"+ "\u0135\u0001\u0000\u0000\u0000\u0137\u0138\u0001\u0000\u0000\u0000\u0138"+
"\u0001\u0000\u0000\u0000\u0138\u0137\u0001\u0000\u0000\u0000\u0139\\\u0001"+ "X\u0001\u0000\u0000\u0000\u0139\u013b\u0005\'\u0000\u0000\u013a\u013c"+
"\u0000\u0000\u0000\u013a\u013e\u0003W+\u0000\u013b\u013d\u0003[-\u0000"+ "\b\u0002\u0000\u0000\u013b\u013a\u0001\u0000\u0000\u0000\u013b\u013c\u0001"+
"\u013c\u013b\u0001\u0000\u0000\u0000\u013d\u0140\u0001\u0000\u0000\u0000"+ "\u0000\u0000\u0000\u013c\u013d\u0001\u0000\u0000\u0000\u013d\u013e\u0005"+
"\u013e\u013c\u0001\u0000\u0000\u0000\u013e\u013f\u0001\u0000\u0000\u0000"+ "\'\u0000\u0000\u013eZ\u0001\u0000\u0000\u0000\u013f\u0140\u0007\u0003"+
"\u013f^\u0001\u0000\u0000\u0000\u0140\u013e\u0001\u0000\u0000\u0000\u0141"+ "\u0000\u0000\u0140\\\u0001\u0000\u0000\u0000\u0141\u0142\u0007\u0001\u0000"+
"\u0142\u0007\u0005\u0000\u0000\u0142\u0143\u0001\u0000\u0000\u0000\u0143"+ "\u0000\u0142^\u0001\u0000\u0000\u0000\u0143\u0147\u0003[-\u0000\u0144"+
"\u0144\u0006/\u0000\u0000\u0144`\u0001\u0000\u0000\u0000\u000b\u0000j"+ "\u0147\u0003].\u0000\u0145\u0147\u0007\u0004\u0000\u0000\u0146\u0143\u0001"+
"\u00b8\u00bc\u00c4\u00c8\u0123\u0129\u012d\u0138\u013e\u0001\u0006\u0000"+ "\u0000\u0000\u0000\u0146\u0144\u0001\u0000\u0000\u0000\u0146\u0145\u0001"+
"\u0000"; "\u0000\u0000\u0000\u0147`\u0001\u0000\u0000\u0000\u0148\u014c\u0003[-"+
"\u0000\u0149\u014b\u0003_/\u0000\u014a\u0149\u0001\u0000\u0000\u0000\u014b"+
"\u014e\u0001\u0000\u0000\u0000\u014c\u014a\u0001\u0000\u0000\u0000\u014c"+
"\u014d\u0001\u0000\u0000\u0000\u014db\u0001\u0000\u0000\u0000\u014e\u014c"+
"\u0001\u0000\u0000\u0000\u014f\u0150\u0007\u0005\u0000\u0000\u0150\u0151"+
"\u0001\u0000\u0000\u0000\u0151\u0152\u00061\u0000\u0000\u0152d\u0001\u0000"+
"\u0000\u0000\u000b\u0000x\u00c6\u00ca\u00d2\u00d6\u0131\u0137\u013b\u0146"+
"\u014c\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

@ -1,81 +1,85 @@
BooleanValue=1 T__0=1
NullValue=2 T__1=2
AccessModifierPublic=3 BooleanValue=3
MainMethodDecl=4 NullValue=4
Void=5 AccessModifierPublic=5
Int=6 MainMethodDecl=6
Boolean=7 Void=7
Char=8 Int=8
DotOperator=9 Boolean=9
LineOperator=10 Char=10
ComparisonOperator=11 DotOperator=11
LogicalOpertor=12 LineOperator=12
Assign=13 ComparisonOperator=13
Minus=14 LogicalOpertor=14
Plus=15 Assign=15
Multipilkation=16 Minus=16
Division=17 Plus=17
Modulo=18 Multipilkation=18
Greater=19 Division=19
Less=20 Modulo=20
GreaterEqual=21 Greater=21
LessEqual=22 Less=22
Equal=23 GreaterEqual=23
NotEqual=24 LessEqual=24
Not=25 Equal=25
And=26 NotEqual=26
Or=27 Not=27
Dot=28 And=28
OpenRoundBracket=29 Or=29
ClosedRoundBracket=30 Dot=30
OpenCurlyBracket=31 OpenRoundBracket=31
ClosedCurlyBracket=32 ClosedRoundBracket=32
Semicolon=33 OpenCurlyBracket=33
Comma=34 ClosedCurlyBracket=34
Class=35 Semicolon=35
This=36 Comma=36
While=37 Class=37
If=38 This=38
Else=39 While=39
Return=40 If=40
New=41 Else=41
IntValue=42 Return=42
CharValue=43 New=43
Identifier=44 IntValue=44
WS=45 CharValue=45
'null'=2 Identifier=46
'public'=3 WS=47
'public static void main(String[] args)'=4 'print('=1
'void'=5 ');'=2
'int'=6 'null'=4
'boolean'=7 'public'=5
'char'=8 'public static void main(String[] args)'=6
'='=13 'void'=7
'-'=14 'int'=8
'+'=15 'boolean'=9
'*'=16 'char'=10
'/'=17 '='=15
'%'=18 '-'=16
'>'=19 '+'=17
'<'=20 '*'=18
'>='=21 '/'=19
'<='=22 '%'=20
'=='=23 '>'=21
'!='=24 '<'=22
'!'=25 '>='=23
'&&'=26 '<='=24
'||'=27 '=='=25
'.'=28 '!='=26
'('=29 '!'=27
')'=30 '&&'=28
'{'=31 '||'=29
'}'=32 '.'=30
';'=33 '('=31
','=34 ')'=32
'class'=35 '{'=33
'this'=36 '}'=34
'while'=37 ';'=35
'if'=38 ','=36
'else'=39 'class'=37
'return'=40 'this'=38
'new'=41 'while'=39
'if'=40
'else'=41
'return'=42
'new'=43

View File

@ -357,4 +357,14 @@ public interface DecafListener extends ParseTreeListener {
* @param ctx the parse tree * @param ctx the parse tree
*/ */
void exitValue(DecafParser.ValueContext ctx); void exitValue(DecafParser.ValueContext ctx);
/**
* Enter a parse tree produced by {@link DecafParser#print}.
* @param ctx the parse tree
*/
void enterPrint(DecafParser.PrintContext ctx);
/**
* Exit a parse tree produced by {@link DecafParser#print}.
* @param ctx the parse tree
*/
void exitPrint(DecafParser.PrintContext ctx);
} }

File diff suppressed because it is too large Load Diff

View File

@ -220,4 +220,10 @@ public interface DecafVisitor<T> extends ParseTreeVisitor<T> {
* @return the visitor result * @return the visitor result
*/ */
T visitValue(DecafParser.ValueContext ctx); T visitValue(DecafParser.ValueContext ctx);
/**
* Visit a parse tree produced by {@link DecafParser#print}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitPrint(DecafParser.PrintContext ctx);
} }