Parser doesn't accept code after a return statement (unreachable)

This commit is contained in:
laurenz 2024-05-16 18:09:29 +02:00
parent 9aedcd646d
commit 31290c7c2c
13 changed files with 710 additions and 728 deletions

View File

@ -15,14 +15,16 @@ constructor: PUBLIC id '(' params? ')' block;
params : param (',' param)*;
param : type id;
block : '{' (localVar | stmt)* '}';
block : '{' (localVar | stmt)* return? '}';
return: 'return' expr ';'
| 'return' ';'
;
stmt : 'if' '(' expr ')' block ('else' block)? #If
| 'for' '(' assign ';' expr ';' assign ')' block #For
| 'while' '(' expr ')' block #While
| 'do' block 'while' '(' expr ')' ';'? #DoWhile
| 'return' expr ';' #Return
| 'return' ';' #ReturnVoid
| 'break' ';' #Break
| assign ';' #Assignment
| stmtexpr ';' #StatementExpressionstmt

View File

@ -3,16 +3,22 @@ package de.maishai;
import de.maishai.antlr.DecafBaseVisitor;
import de.maishai.antlr.DecafParser;
import de.maishai.ast.records.Declaration;
import de.maishai.ast.records.Return;
import de.maishai.ast.records.Statement;
import de.maishai.ast.records.Block;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class BlockGenerator extends DecafBaseVisitor<Block> {
@Override
public Block visitBlock(DecafParser.BlockContext ctx) {
List<Declaration> vars = ctx.localVar().stream().map(var -> new VariableGenerator().visit(var)).toList();
List<Statement> statements = ctx.stmt().stream().map(stmt -> new StatementGenerator().visit(stmt)).toList();
List<Statement> statements = ctx.stmt().stream().map(stmt -> new StatementGenerator().visit(stmt)).collect(Collectors.toCollection(ArrayList<Statement> :: new));
if (ctx.return_() != null){
statements.add(ctx.return_().isEmpty() ? new Return(null) : new Return(new ExpressionGenerator().visit(ctx.return_())));
}
return new Block(vars, statements);
}
}

View File

@ -46,16 +46,6 @@ public class StatementGenerator extends DecafBaseVisitor<Statement> {
return new DoWhile(block, expr);
}
@Override
public Statement visitReturn(DecafParser.ReturnContext ctx) {
return new Return(new ExpressionGenerator().visit(ctx.expr()));
}
@Override
public Statement visitReturnVoid(DecafParser.ReturnVoidContext ctx) {
return new Return(null);
}
@Override
public Statement visitBreak(DecafParser.BreakContext ctx) {
return new Break();

File diff suppressed because one or more lines are too long

View File

@ -57,12 +57,12 @@ LINE_COMMENT=49
'main'=8
'String[] args'=9
','=10
'if'=11
'else'=12
'for'=13
'while'=14
'do'=15
'return'=16
'return'=11
'if'=12
'else'=13
'for'=14
'while'=15
'do'=16
'break'=17
'.'=18
'public'=19

View File

@ -156,6 +156,18 @@ public class DecafBaseListener implements DecafListener {
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBlock(DecafParser.BlockContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterReturn(DecafParser.ReturnContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitReturn(DecafParser.ReturnContext ctx) { }
/**
* {@inheritDoc}
*
@ -204,30 +216,6 @@ public class DecafBaseListener implements DecafListener {
* <p>The default implementation does nothing.</p>
*/
@Override public void exitDoWhile(DecafParser.DoWhileContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterReturn(DecafParser.ReturnContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitReturn(DecafParser.ReturnContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterReturnVoid(DecafParser.ReturnVoidContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitReturnVoid(DecafParser.ReturnVoidContext ctx) { }
/**
* {@inheritDoc}
*

View File

@ -96,6 +96,13 @@ public class DecafBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitBlock(DecafParser.BlockContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitReturn(DecafParser.ReturnContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@ -124,20 +131,6 @@ public class DecafBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitDoWhile(DecafParser.DoWhileContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitReturn(DecafParser.ReturnContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitReturnVoid(DecafParser.ReturnVoidContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*

File diff suppressed because one or more lines are too long

View File

@ -47,10 +47,10 @@ public class DecafLexer extends Lexer {
private static String[] makeLiteralNames() {
return new String[] {
null, "'class'", "'{'", "'}'", "';'", "'('", "')'", "'static'", "'main'",
"'String[] args'", "','", "'if'", "'else'", "'for'", "'while'", "'do'",
"'return'", "'break'", "'.'", "'public'", "'new'", "'null'", "'this'",
"'-'", "'+'", "'*'", "'>'", "'<'", "'>='", "'<='", "'=='", "'!='", "'&&'",
"'||'", "'='", "'+='", "'-='", "'*='", "'!'", "'int'", "'boolean'", "'void'",
"'String[] args'", "','", "'return'", "'if'", "'else'", "'for'", "'while'",
"'do'", "'break'", "'.'", "'public'", "'new'", "'null'", "'this'", "'-'",
"'+'", "'*'", "'>'", "'<'", "'>='", "'<='", "'=='", "'!='", "'&&'", "'||'",
"'='", "'+='", "'-='", "'*='", "'!'", "'int'", "'boolean'", "'void'",
"'char'"
};
}
@ -144,182 +144,182 @@ public class DecafLexer extends Lexer {
"\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\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+
"\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\u000b"+
"\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001"+
"\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e"+
"\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+
"\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010"+
"\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0012"+
"\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+
"\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014"+
"\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015"+
"\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017"+
"\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a"+
"\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c"+
"\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e"+
"\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001!\u0001"+
"!\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001"+
"%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+
"\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001"+
")\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001"+
"*\u0001*\u0001*\u0003*\u0111\b*\u0001+\u0001+\u0001+\u0001+\u0001,\u0004"+
",\u0118\b,\u000b,\f,\u0119\u0001,\u0005,\u011d\b,\n,\f,\u0120\t,\u0004"+
",\u0122\b,\u000b,\f,\u0123\u0001-\u0004-\u0127\b-\u000b-\f-\u0128\u0001"+
".\u0001.\u0001.\u0001.\u0001/\u0001/\u0001/\u0001/\u0005/\u0133\b/\n/"+
"\f/\u0136\t/\u0001/\u0001/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u0001"+
"0\u00050\u0141\b0\n0\f0\u0144\t0\u00010\u00010\u0001\u0134\u00001\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,Y-[.]/_0a1\u0001\u0000\u0005\u0001\u0000\'\'\u0002\u0000"+
"AZaz\u0001\u000009\u0003\u0000\t\n\r\r \u0002\u0000\n\n\r\r\u014d\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\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\u0000C\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\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000\u0000\u0000"+
"\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000\u0000Y"+
"\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]\u0001\u0000"+
"\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000\u0000\u0000"+
"\u0001c\u0001\u0000\u0000\u0000\u0003i\u0001\u0000\u0000\u0000\u0005k"+
"\u0001\u0000\u0000\u0000\u0007m\u0001\u0000\u0000\u0000\to\u0001\u0000"+
"\u0000\u0000\u000bq\u0001\u0000\u0000\u0000\rs\u0001\u0000\u0000\u0000"+
"\u000fz\u0001\u0000\u0000\u0000\u0011\u007f\u0001\u0000\u0000\u0000\u0013"+
"\u008d\u0001\u0000\u0000\u0000\u0015\u008f\u0001\u0000\u0000\u0000\u0017"+
"\u0092\u0001\u0000\u0000\u0000\u0019\u0097\u0001\u0000\u0000\u0000\u001b"+
"\u009b\u0001\u0000\u0000\u0000\u001d\u00a1\u0001\u0000\u0000\u0000\u001f"+
"\u00a4\u0001\u0000\u0000\u0000!\u00ab\u0001\u0000\u0000\u0000#\u00b1\u0001"+
"\u0000\u0000\u0000%\u00b3\u0001\u0000\u0000\u0000\'\u00ba\u0001\u0000"+
"\u0000\u0000)\u00be\u0001\u0000\u0000\u0000+\u00c3\u0001\u0000\u0000\u0000"+
"-\u00c8\u0001\u0000\u0000\u0000/\u00ca\u0001\u0000\u0000\u00001\u00cc"+
"\u0001\u0000\u0000\u00003\u00ce\u0001\u0000\u0000\u00005\u00d0\u0001\u0000"+
"\u0000\u00007\u00d2\u0001\u0000\u0000\u00009\u00d5\u0001\u0000\u0000\u0000"+
";\u00d8\u0001\u0000\u0000\u0000=\u00db\u0001\u0000\u0000\u0000?\u00de"+
"\u0001\u0000\u0000\u0000A\u00e1\u0001\u0000\u0000\u0000C\u00e4\u0001\u0000"+
"\u0000\u0000E\u00e6\u0001\u0000\u0000\u0000G\u00e9\u0001\u0000\u0000\u0000"+
"I\u00ec\u0001\u0000\u0000\u0000K\u00ef\u0001\u0000\u0000\u0000M\u00f1"+
"\u0001\u0000\u0000\u0000O\u00f5\u0001\u0000\u0000\u0000Q\u00fd\u0001\u0000"+
"\u0000\u0000S\u0102\u0001\u0000\u0000\u0000U\u0110\u0001\u0000\u0000\u0000"+
"W\u0112\u0001\u0000\u0000\u0000Y\u0121\u0001\u0000\u0000\u0000[\u0126"+
"\u0001\u0000\u0000\u0000]\u012a\u0001\u0000\u0000\u0000_\u012e\u0001\u0000"+
"\u0000\u0000a\u013c\u0001\u0000\u0000\u0000cd\u0005c\u0000\u0000de\u0005"+
"l\u0000\u0000ef\u0005a\u0000\u0000fg\u0005s\u0000\u0000gh\u0005s\u0000"+
"\u0000h\u0002\u0001\u0000\u0000\u0000ij\u0005{\u0000\u0000j\u0004\u0001"+
"\u0000\u0000\u0000kl\u0005}\u0000\u0000l\u0006\u0001\u0000\u0000\u0000"+
"mn\u0005;\u0000\u0000n\b\u0001\u0000\u0000\u0000op\u0005(\u0000\u0000"+
"p\n\u0001\u0000\u0000\u0000qr\u0005)\u0000\u0000r\f\u0001\u0000\u0000"+
"\u0000st\u0005s\u0000\u0000tu\u0005t\u0000\u0000uv\u0005a\u0000\u0000"+
"vw\u0005t\u0000\u0000wx\u0005i\u0000\u0000xy\u0005c\u0000\u0000y\u000e"+
"\u0001\u0000\u0000\u0000z{\u0005m\u0000\u0000{|\u0005a\u0000\u0000|}\u0005"+
"i\u0000\u0000}~\u0005n\u0000\u0000~\u0010\u0001\u0000\u0000\u0000\u007f"+
"\u0080\u0005S\u0000\u0000\u0080\u0081\u0005t\u0000\u0000\u0081\u0082\u0005"+
"r\u0000\u0000\u0082\u0083\u0005i\u0000\u0000\u0083\u0084\u0005n\u0000"+
"\u0000\u0084\u0085\u0005g\u0000\u0000\u0085\u0086\u0005[\u0000\u0000\u0086"+
"\u0087\u0005]\u0000\u0000\u0087\u0088\u0005 \u0000\u0000\u0088\u0089\u0005"+
"a\u0000\u0000\u0089\u008a\u0005r\u0000\u0000\u008a\u008b\u0005g\u0000"+
"\u0000\u008b\u008c\u0005s\u0000\u0000\u008c\u0012\u0001\u0000\u0000\u0000"+
"\u008d\u008e\u0005,\u0000\u0000\u008e\u0014\u0001\u0000\u0000\u0000\u008f"+
"\u0090\u0005i\u0000\u0000\u0090\u0091\u0005f\u0000\u0000\u0091\u0016\u0001"+
"\u0000\u0000\u0000\u0092\u0093\u0005e\u0000\u0000\u0093\u0094\u0005l\u0000"+
"\u0000\u0094\u0095\u0005s\u0000\u0000\u0095\u0096\u0005e\u0000\u0000\u0096"+
"\u0018\u0001\u0000\u0000\u0000\u0097\u0098\u0005f\u0000\u0000\u0098\u0099"+
"\u0005o\u0000\u0000\u0099\u009a\u0005r\u0000\u0000\u009a\u001a\u0001\u0000"+
"\u0000\u0000\u009b\u009c\u0005w\u0000\u0000\u009c\u009d\u0005h\u0000\u0000"+
"\u009d\u009e\u0005i\u0000\u0000\u009e\u009f\u0005l\u0000\u0000\u009f\u00a0"+
"\u0005e\u0000\u0000\u00a0\u001c\u0001\u0000\u0000\u0000\u00a1\u00a2\u0005"+
"d\u0000\u0000\u00a2\u00a3\u0005o\u0000\u0000\u00a3\u001e\u0001\u0000\u0000"+
"\u0000\u00a4\u00a5\u0005r\u0000\u0000\u00a5\u00a6\u0005e\u0000\u0000\u00a6"+
"\u00a7\u0005t\u0000\u0000\u00a7\u00a8\u0005u\u0000\u0000\u00a8\u00a9\u0005"+
"r\u0000\u0000\u00a9\u00aa\u0005n\u0000\u0000\u00aa \u0001\u0000\u0000"+
"\u0000\u00ab\u00ac\u0005b\u0000\u0000\u00ac\u00ad\u0005r\u0000\u0000\u00ad"+
"\u00ae\u0005e\u0000\u0000\u00ae\u00af\u0005a\u0000\u0000\u00af\u00b0\u0005"+
"k\u0000\u0000\u00b0\"\u0001\u0000\u0000\u0000\u00b1\u00b2\u0005.\u0000"+
"\u0000\u00b2$\u0001\u0000\u0000\u0000\u00b3\u00b4\u0005p\u0000\u0000\u00b4"+
"\u00b5\u0005u\u0000\u0000\u00b5\u00b6\u0005b\u0000\u0000\u00b6\u00b7\u0005"+
"l\u0000\u0000\u00b7\u00b8\u0005i\u0000\u0000\u00b8\u00b9\u0005c\u0000"+
"\u0000\u00b9&\u0001\u0000\u0000\u0000\u00ba\u00bb\u0005n\u0000\u0000\u00bb"+
"\u00bc\u0005e\u0000\u0000\u00bc\u00bd\u0005w\u0000\u0000\u00bd(\u0001"+
"\u0000\u0000\u0000\u00be\u00bf\u0005n\u0000\u0000\u00bf\u00c0\u0005u\u0000"+
"\u0000\u00c0\u00c1\u0005l\u0000\u0000\u00c1\u00c2\u0005l\u0000\u0000\u00c2"+
"*\u0001\u0000\u0000\u0000\u00c3\u00c4\u0005t\u0000\u0000\u00c4\u00c5\u0005"+
"h\u0000\u0000\u00c5\u00c6\u0005i\u0000\u0000\u00c6\u00c7\u0005s\u0000"+
"\u0000\u00c7,\u0001\u0000\u0000\u0000\u00c8\u00c9\u0005-\u0000\u0000\u00c9"+
".\u0001\u0000\u0000\u0000\u00ca\u00cb\u0005+\u0000\u0000\u00cb0\u0001"+
"\u0000\u0000\u0000\u00cc\u00cd\u0005*\u0000\u0000\u00cd2\u0001\u0000\u0000"+
"\u0000\u00ce\u00cf\u0005>\u0000\u0000\u00cf4\u0001\u0000\u0000\u0000\u00d0"+
"\u00d1\u0005<\u0000\u0000\u00d16\u0001\u0000\u0000\u0000\u00d2\u00d3\u0005"+
">\u0000\u0000\u00d3\u00d4\u0005=\u0000\u0000\u00d48\u0001\u0000\u0000"+
"\u0000\u00d5\u00d6\u0005<\u0000\u0000\u00d6\u00d7\u0005=\u0000\u0000\u00d7"+
":\u0001\u0000\u0000\u0000\u00d8\u00d9\u0005=\u0000\u0000\u00d9\u00da\u0005"+
"=\u0000\u0000\u00da<\u0001\u0000\u0000\u0000\u00db\u00dc\u0005!\u0000"+
"\u0000\u00dc\u00dd\u0005=\u0000\u0000\u00dd>\u0001\u0000\u0000\u0000\u00de"+
"\u00df\u0005&\u0000\u0000\u00df\u00e0\u0005&\u0000\u0000\u00e0@\u0001"+
"\u0000\u0000\u0000\u00e1\u00e2\u0005|\u0000\u0000\u00e2\u00e3\u0005|\u0000"+
"\u0000\u00e3B\u0001\u0000\u0000\u0000\u00e4\u00e5\u0005=\u0000\u0000\u00e5"+
"D\u0001\u0000\u0000\u0000\u00e6\u00e7\u0005+\u0000\u0000\u00e7\u00e8\u0005"+
"=\u0000\u0000\u00e8F\u0001\u0000\u0000\u0000\u00e9\u00ea\u0005-\u0000"+
"\u0000\u00ea\u00eb\u0005=\u0000\u0000\u00ebH\u0001\u0000\u0000\u0000\u00ec"+
"\u00ed\u0005*\u0000\u0000\u00ed\u00ee\u0005=\u0000\u0000\u00eeJ\u0001"+
"\u0000\u0000\u0000\u00ef\u00f0\u0005!\u0000\u0000\u00f0L\u0001\u0000\u0000"+
"\u0000\u00f1\u00f2\u0005i\u0000\u0000\u00f2\u00f3\u0005n\u0000\u0000\u00f3"+
"\u00f4\u0005t\u0000\u0000\u00f4N\u0001\u0000\u0000\u0000\u00f5\u00f6\u0005"+
"b\u0000\u0000\u00f6\u00f7\u0005o\u0000\u0000\u00f7\u00f8\u0005o\u0000"+
"\u0000\u00f8\u00f9\u0005l\u0000\u0000\u00f9\u00fa\u0005e\u0000\u0000\u00fa"+
"\u00fb\u0005a\u0000\u0000\u00fb\u00fc\u0005n\u0000\u0000\u00fcP\u0001"+
"\u0000\u0000\u0000\u00fd\u00fe\u0005v\u0000\u0000\u00fe\u00ff\u0005o\u0000"+
"\u0000\u00ff\u0100\u0005i\u0000\u0000\u0100\u0101\u0005d\u0000\u0000\u0101"+
"R\u0001\u0000\u0000\u0000\u0102\u0103\u0005c\u0000\u0000\u0103\u0104\u0005"+
"h\u0000\u0000\u0104\u0105\u0005a\u0000\u0000\u0105\u0106\u0005r\u0000"+
"\u0000\u0106T\u0001\u0000\u0000\u0000\u0107\u0108\u0005t\u0000\u0000\u0108"+
"\u0109\u0005r\u0000\u0000\u0109\u010a\u0005u\u0000\u0000\u010a\u0111\u0005"+
"e\u0000\u0000\u010b\u010c\u0005f\u0000\u0000\u010c\u010d\u0005a\u0000"+
"\u0000\u010d\u010e\u0005l\u0000\u0000\u010e\u010f\u0005s\u0000\u0000\u010f"+
"\u0111\u0005e\u0000\u0000\u0110\u0107\u0001\u0000\u0000\u0000\u0110\u010b"+
"\u0001\u0000\u0000\u0000\u0111V\u0001\u0000\u0000\u0000\u0112\u0113\u0007"+
"\u0000\u0000\u0000\u0113\u0114\u0007\u0001\u0000\u0000\u0114\u0115\u0007"+
"\u0000\u0000\u0000\u0115X\u0001\u0000\u0000\u0000\u0116\u0118\u0007\u0001"+
"\u0000\u0000\u0117\u0116\u0001\u0000\u0000\u0000\u0118\u0119\u0001\u0000"+
"\u0000\u0000\u0119\u0117\u0001\u0000\u0000\u0000\u0119\u011a\u0001\u0000"+
"\u0000\u0000\u011a\u011e\u0001\u0000\u0000\u0000\u011b\u011d\u0007\u0002"+
"\u0000\u0000\u011c\u011b\u0001\u0000\u0000\u0000\u011d\u0120\u0001\u0000"+
"\u0000\u0000\u011e\u011c\u0001\u0000\u0000\u0000\u011e\u011f\u0001\u0000"+
"\u0000\u0000\u011f\u0122\u0001\u0000\u0000\u0000\u0120\u011e\u0001\u0000"+
"\u0000\u0000\u0121\u0117\u0001\u0000\u0000\u0000\u0122\u0123\u0001\u0000"+
"\u0000\u0000\u0123\u0121\u0001\u0000\u0000\u0000\u0123\u0124\u0001\u0000"+
"\u0000\u0000\u0124Z\u0001\u0000\u0000\u0000\u0125\u0127\u0007\u0002\u0000"+
"\u0000\u0126\u0125\u0001\u0000\u0000\u0000\u0127\u0128\u0001\u0000\u0000"+
"\u0000\u0128\u0126\u0001\u0000\u0000\u0000\u0128\u0129\u0001\u0000\u0000"+
"\u0000\u0129\\\u0001\u0000\u0000\u0000\u012a\u012b\u0007\u0003\u0000\u0000"+
"\u012b\u012c\u0001\u0000\u0000\u0000\u012c\u012d\u0006.\u0000\u0000\u012d"+
"^\u0001\u0000\u0000\u0000\u012e\u012f\u0005/\u0000\u0000\u012f\u0130\u0005"+
"*\u0000\u0000\u0130\u0134\u0001\u0000\u0000\u0000\u0131\u0133\t\u0000"+
"\u0000\u0000\u0132\u0131\u0001\u0000\u0000\u0000\u0133\u0136\u0001\u0000"+
"\u0000\u0000\u0134\u0135\u0001\u0000\u0000\u0000\u0134\u0132\u0001\u0000"+
"\u0000\u0000\u0135\u0137\u0001\u0000\u0000\u0000\u0136\u0134\u0001\u0000"+
"\u0000\u0000\u0137\u0138\u0005*\u0000\u0000\u0138\u0139\u0005/\u0000\u0000"+
"\u0139\u013a\u0001\u0000\u0000\u0000\u013a\u013b\u0006/\u0000\u0000\u013b"+
"`\u0001\u0000\u0000\u0000\u013c\u013d\u0005/\u0000\u0000\u013d\u013e\u0005"+
"/\u0000\u0000\u013e\u0142\u0001\u0000\u0000\u0000\u013f\u0141\b\u0004"+
"\u0000\u0000\u0140\u013f\u0001\u0000\u0000\u0000\u0141\u0144\u0001\u0000"+
"\u0000\u0000\u0142\u0140\u0001\u0000\u0000\u0000\u0142\u0143\u0001\u0000"+
"\u0000\u0000\u0143\u0145\u0001\u0000\u0000\u0000\u0144\u0142\u0001\u0000"+
"\u0000\u0000\u0145\u0146\u00060\u0000\u0000\u0146b\u0001\u0000\u0000\u0000"+
"\b\u0000\u0110\u0119\u011e\u0123\u0128\u0134\u0142\u0001\u0006\u0000\u0000";
"\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+
"\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f"+
"\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001"+
"\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001"+
"\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+
"\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001"+
"\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001"+
"\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+
"\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+
"\u0015\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001"+
"\u0018\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001b\u0001"+
"\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001"+
"\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001"+
"\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001!\u0001!\u0001\"\u0001\""+
"\u0001\"\u0001#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001%\u0001%\u0001"+
"&\u0001&\u0001&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'"+
"\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001)\u0001"+
")\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001"+
"*\u0001*\u0003*\u0111\b*\u0001+\u0001+\u0001+\u0001+\u0001,\u0004,\u0118"+
"\b,\u000b,\f,\u0119\u0001,\u0005,\u011d\b,\n,\f,\u0120\t,\u0004,\u0122"+
"\b,\u000b,\f,\u0123\u0001-\u0004-\u0127\b-\u000b-\f-\u0128\u0001.\u0001"+
".\u0001.\u0001.\u0001/\u0001/\u0001/\u0001/\u0005/\u0133\b/\n/\f/\u0136"+
"\t/\u0001/\u0001/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u0005"+
"0\u0141\b0\n0\f0\u0144\t0\u00010\u00010\u0001\u0134\u00001\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/\u0018"+
"1\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O("+
"Q)S*U+W,Y-[.]/_0a1\u0001\u0000\u0005\u0001\u0000\'\'\u0002\u0000AZaz\u0001"+
"\u000009\u0003\u0000\t\n\r\r \u0002\u0000\n\n\r\r\u014d\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\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\u0000C"+
"\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\u0000Q"+
"\u0001\u0000\u0000\u0000\u0000S\u0001\u0000\u0000\u0000\u0000U\u0001\u0000"+
"\u0000\u0000\u0000W\u0001\u0000\u0000\u0000\u0000Y\u0001\u0000\u0000\u0000"+
"\u0000[\u0001\u0000\u0000\u0000\u0000]\u0001\u0000\u0000\u0000\u0000_"+
"\u0001\u0000\u0000\u0000\u0000a\u0001\u0000\u0000\u0000\u0001c\u0001\u0000"+
"\u0000\u0000\u0003i\u0001\u0000\u0000\u0000\u0005k\u0001\u0000\u0000\u0000"+
"\u0007m\u0001\u0000\u0000\u0000\to\u0001\u0000\u0000\u0000\u000bq\u0001"+
"\u0000\u0000\u0000\rs\u0001\u0000\u0000\u0000\u000fz\u0001\u0000\u0000"+
"\u0000\u0011\u007f\u0001\u0000\u0000\u0000\u0013\u008d\u0001\u0000\u0000"+
"\u0000\u0015\u008f\u0001\u0000\u0000\u0000\u0017\u0096\u0001\u0000\u0000"+
"\u0000\u0019\u0099\u0001\u0000\u0000\u0000\u001b\u009e\u0001\u0000\u0000"+
"\u0000\u001d\u00a2\u0001\u0000\u0000\u0000\u001f\u00a8\u0001\u0000\u0000"+
"\u0000!\u00ab\u0001\u0000\u0000\u0000#\u00b1\u0001\u0000\u0000\u0000%"+
"\u00b3\u0001\u0000\u0000\u0000\'\u00ba\u0001\u0000\u0000\u0000)\u00be"+
"\u0001\u0000\u0000\u0000+\u00c3\u0001\u0000\u0000\u0000-\u00c8\u0001\u0000"+
"\u0000\u0000/\u00ca\u0001\u0000\u0000\u00001\u00cc\u0001\u0000\u0000\u0000"+
"3\u00ce\u0001\u0000\u0000\u00005\u00d0\u0001\u0000\u0000\u00007\u00d2"+
"\u0001\u0000\u0000\u00009\u00d5\u0001\u0000\u0000\u0000;\u00d8\u0001\u0000"+
"\u0000\u0000=\u00db\u0001\u0000\u0000\u0000?\u00de\u0001\u0000\u0000\u0000"+
"A\u00e1\u0001\u0000\u0000\u0000C\u00e4\u0001\u0000\u0000\u0000E\u00e6"+
"\u0001\u0000\u0000\u0000G\u00e9\u0001\u0000\u0000\u0000I\u00ec\u0001\u0000"+
"\u0000\u0000K\u00ef\u0001\u0000\u0000\u0000M\u00f1\u0001\u0000\u0000\u0000"+
"O\u00f5\u0001\u0000\u0000\u0000Q\u00fd\u0001\u0000\u0000\u0000S\u0102"+
"\u0001\u0000\u0000\u0000U\u0110\u0001\u0000\u0000\u0000W\u0112\u0001\u0000"+
"\u0000\u0000Y\u0121\u0001\u0000\u0000\u0000[\u0126\u0001\u0000\u0000\u0000"+
"]\u012a\u0001\u0000\u0000\u0000_\u012e\u0001\u0000\u0000\u0000a\u013c"+
"\u0001\u0000\u0000\u0000cd\u0005c\u0000\u0000de\u0005l\u0000\u0000ef\u0005"+
"a\u0000\u0000fg\u0005s\u0000\u0000gh\u0005s\u0000\u0000h\u0002\u0001\u0000"+
"\u0000\u0000ij\u0005{\u0000\u0000j\u0004\u0001\u0000\u0000\u0000kl\u0005"+
"}\u0000\u0000l\u0006\u0001\u0000\u0000\u0000mn\u0005;\u0000\u0000n\b\u0001"+
"\u0000\u0000\u0000op\u0005(\u0000\u0000p\n\u0001\u0000\u0000\u0000qr\u0005"+
")\u0000\u0000r\f\u0001\u0000\u0000\u0000st\u0005s\u0000\u0000tu\u0005"+
"t\u0000\u0000uv\u0005a\u0000\u0000vw\u0005t\u0000\u0000wx\u0005i\u0000"+
"\u0000xy\u0005c\u0000\u0000y\u000e\u0001\u0000\u0000\u0000z{\u0005m\u0000"+
"\u0000{|\u0005a\u0000\u0000|}\u0005i\u0000\u0000}~\u0005n\u0000\u0000"+
"~\u0010\u0001\u0000\u0000\u0000\u007f\u0080\u0005S\u0000\u0000\u0080\u0081"+
"\u0005t\u0000\u0000\u0081\u0082\u0005r\u0000\u0000\u0082\u0083\u0005i"+
"\u0000\u0000\u0083\u0084\u0005n\u0000\u0000\u0084\u0085\u0005g\u0000\u0000"+
"\u0085\u0086\u0005[\u0000\u0000\u0086\u0087\u0005]\u0000\u0000\u0087\u0088"+
"\u0005 \u0000\u0000\u0088\u0089\u0005a\u0000\u0000\u0089\u008a\u0005r"+
"\u0000\u0000\u008a\u008b\u0005g\u0000\u0000\u008b\u008c\u0005s\u0000\u0000"+
"\u008c\u0012\u0001\u0000\u0000\u0000\u008d\u008e\u0005,\u0000\u0000\u008e"+
"\u0014\u0001\u0000\u0000\u0000\u008f\u0090\u0005r\u0000\u0000\u0090\u0091"+
"\u0005e\u0000\u0000\u0091\u0092\u0005t\u0000\u0000\u0092\u0093\u0005u"+
"\u0000\u0000\u0093\u0094\u0005r\u0000\u0000\u0094\u0095\u0005n\u0000\u0000"+
"\u0095\u0016\u0001\u0000\u0000\u0000\u0096\u0097\u0005i\u0000\u0000\u0097"+
"\u0098\u0005f\u0000\u0000\u0098\u0018\u0001\u0000\u0000\u0000\u0099\u009a"+
"\u0005e\u0000\u0000\u009a\u009b\u0005l\u0000\u0000\u009b\u009c\u0005s"+
"\u0000\u0000\u009c\u009d\u0005e\u0000\u0000\u009d\u001a\u0001\u0000\u0000"+
"\u0000\u009e\u009f\u0005f\u0000\u0000\u009f\u00a0\u0005o\u0000\u0000\u00a0"+
"\u00a1\u0005r\u0000\u0000\u00a1\u001c\u0001\u0000\u0000\u0000\u00a2\u00a3"+
"\u0005w\u0000\u0000\u00a3\u00a4\u0005h\u0000\u0000\u00a4\u00a5\u0005i"+
"\u0000\u0000\u00a5\u00a6\u0005l\u0000\u0000\u00a6\u00a7\u0005e\u0000\u0000"+
"\u00a7\u001e\u0001\u0000\u0000\u0000\u00a8\u00a9\u0005d\u0000\u0000\u00a9"+
"\u00aa\u0005o\u0000\u0000\u00aa \u0001\u0000\u0000\u0000\u00ab\u00ac\u0005"+
"b\u0000\u0000\u00ac\u00ad\u0005r\u0000\u0000\u00ad\u00ae\u0005e\u0000"+
"\u0000\u00ae\u00af\u0005a\u0000\u0000\u00af\u00b0\u0005k\u0000\u0000\u00b0"+
"\"\u0001\u0000\u0000\u0000\u00b1\u00b2\u0005.\u0000\u0000\u00b2$\u0001"+
"\u0000\u0000\u0000\u00b3\u00b4\u0005p\u0000\u0000\u00b4\u00b5\u0005u\u0000"+
"\u0000\u00b5\u00b6\u0005b\u0000\u0000\u00b6\u00b7\u0005l\u0000\u0000\u00b7"+
"\u00b8\u0005i\u0000\u0000\u00b8\u00b9\u0005c\u0000\u0000\u00b9&\u0001"+
"\u0000\u0000\u0000\u00ba\u00bb\u0005n\u0000\u0000\u00bb\u00bc\u0005e\u0000"+
"\u0000\u00bc\u00bd\u0005w\u0000\u0000\u00bd(\u0001\u0000\u0000\u0000\u00be"+
"\u00bf\u0005n\u0000\u0000\u00bf\u00c0\u0005u\u0000\u0000\u00c0\u00c1\u0005"+
"l\u0000\u0000\u00c1\u00c2\u0005l\u0000\u0000\u00c2*\u0001\u0000\u0000"+
"\u0000\u00c3\u00c4\u0005t\u0000\u0000\u00c4\u00c5\u0005h\u0000\u0000\u00c5"+
"\u00c6\u0005i\u0000\u0000\u00c6\u00c7\u0005s\u0000\u0000\u00c7,\u0001"+
"\u0000\u0000\u0000\u00c8\u00c9\u0005-\u0000\u0000\u00c9.\u0001\u0000\u0000"+
"\u0000\u00ca\u00cb\u0005+\u0000\u0000\u00cb0\u0001\u0000\u0000\u0000\u00cc"+
"\u00cd\u0005*\u0000\u0000\u00cd2\u0001\u0000\u0000\u0000\u00ce\u00cf\u0005"+
">\u0000\u0000\u00cf4\u0001\u0000\u0000\u0000\u00d0\u00d1\u0005<\u0000"+
"\u0000\u00d16\u0001\u0000\u0000\u0000\u00d2\u00d3\u0005>\u0000\u0000\u00d3"+
"\u00d4\u0005=\u0000\u0000\u00d48\u0001\u0000\u0000\u0000\u00d5\u00d6\u0005"+
"<\u0000\u0000\u00d6\u00d7\u0005=\u0000\u0000\u00d7:\u0001\u0000\u0000"+
"\u0000\u00d8\u00d9\u0005=\u0000\u0000\u00d9\u00da\u0005=\u0000\u0000\u00da"+
"<\u0001\u0000\u0000\u0000\u00db\u00dc\u0005!\u0000\u0000\u00dc\u00dd\u0005"+
"=\u0000\u0000\u00dd>\u0001\u0000\u0000\u0000\u00de\u00df\u0005&\u0000"+
"\u0000\u00df\u00e0\u0005&\u0000\u0000\u00e0@\u0001\u0000\u0000\u0000\u00e1"+
"\u00e2\u0005|\u0000\u0000\u00e2\u00e3\u0005|\u0000\u0000\u00e3B\u0001"+
"\u0000\u0000\u0000\u00e4\u00e5\u0005=\u0000\u0000\u00e5D\u0001\u0000\u0000"+
"\u0000\u00e6\u00e7\u0005+\u0000\u0000\u00e7\u00e8\u0005=\u0000\u0000\u00e8"+
"F\u0001\u0000\u0000\u0000\u00e9\u00ea\u0005-\u0000\u0000\u00ea\u00eb\u0005"+
"=\u0000\u0000\u00ebH\u0001\u0000\u0000\u0000\u00ec\u00ed\u0005*\u0000"+
"\u0000\u00ed\u00ee\u0005=\u0000\u0000\u00eeJ\u0001\u0000\u0000\u0000\u00ef"+
"\u00f0\u0005!\u0000\u0000\u00f0L\u0001\u0000\u0000\u0000\u00f1\u00f2\u0005"+
"i\u0000\u0000\u00f2\u00f3\u0005n\u0000\u0000\u00f3\u00f4\u0005t\u0000"+
"\u0000\u00f4N\u0001\u0000\u0000\u0000\u00f5\u00f6\u0005b\u0000\u0000\u00f6"+
"\u00f7\u0005o\u0000\u0000\u00f7\u00f8\u0005o\u0000\u0000\u00f8\u00f9\u0005"+
"l\u0000\u0000\u00f9\u00fa\u0005e\u0000\u0000\u00fa\u00fb\u0005a\u0000"+
"\u0000\u00fb\u00fc\u0005n\u0000\u0000\u00fcP\u0001\u0000\u0000\u0000\u00fd"+
"\u00fe\u0005v\u0000\u0000\u00fe\u00ff\u0005o\u0000\u0000\u00ff\u0100\u0005"+
"i\u0000\u0000\u0100\u0101\u0005d\u0000\u0000\u0101R\u0001\u0000\u0000"+
"\u0000\u0102\u0103\u0005c\u0000\u0000\u0103\u0104\u0005h\u0000\u0000\u0104"+
"\u0105\u0005a\u0000\u0000\u0105\u0106\u0005r\u0000\u0000\u0106T\u0001"+
"\u0000\u0000\u0000\u0107\u0108\u0005t\u0000\u0000\u0108\u0109\u0005r\u0000"+
"\u0000\u0109\u010a\u0005u\u0000\u0000\u010a\u0111\u0005e\u0000\u0000\u010b"+
"\u010c\u0005f\u0000\u0000\u010c\u010d\u0005a\u0000\u0000\u010d\u010e\u0005"+
"l\u0000\u0000\u010e\u010f\u0005s\u0000\u0000\u010f\u0111\u0005e\u0000"+
"\u0000\u0110\u0107\u0001\u0000\u0000\u0000\u0110\u010b\u0001\u0000\u0000"+
"\u0000\u0111V\u0001\u0000\u0000\u0000\u0112\u0113\u0007\u0000\u0000\u0000"+
"\u0113\u0114\u0007\u0001\u0000\u0000\u0114\u0115\u0007\u0000\u0000\u0000"+
"\u0115X\u0001\u0000\u0000\u0000\u0116\u0118\u0007\u0001\u0000\u0000\u0117"+
"\u0116\u0001\u0000\u0000\u0000\u0118\u0119\u0001\u0000\u0000\u0000\u0119"+
"\u0117\u0001\u0000\u0000\u0000\u0119\u011a\u0001\u0000\u0000\u0000\u011a"+
"\u011e\u0001\u0000\u0000\u0000\u011b\u011d\u0007\u0002\u0000\u0000\u011c"+
"\u011b\u0001\u0000\u0000\u0000\u011d\u0120\u0001\u0000\u0000\u0000\u011e"+
"\u011c\u0001\u0000\u0000\u0000\u011e\u011f\u0001\u0000\u0000\u0000\u011f"+
"\u0122\u0001\u0000\u0000\u0000\u0120\u011e\u0001\u0000\u0000\u0000\u0121"+
"\u0117\u0001\u0000\u0000\u0000\u0122\u0123\u0001\u0000\u0000\u0000\u0123"+
"\u0121\u0001\u0000\u0000\u0000\u0123\u0124\u0001\u0000\u0000\u0000\u0124"+
"Z\u0001\u0000\u0000\u0000\u0125\u0127\u0007\u0002\u0000\u0000\u0126\u0125"+
"\u0001\u0000\u0000\u0000\u0127\u0128\u0001\u0000\u0000\u0000\u0128\u0126"+
"\u0001\u0000\u0000\u0000\u0128\u0129\u0001\u0000\u0000\u0000\u0129\\\u0001"+
"\u0000\u0000\u0000\u012a\u012b\u0007\u0003\u0000\u0000\u012b\u012c\u0001"+
"\u0000\u0000\u0000\u012c\u012d\u0006.\u0000\u0000\u012d^\u0001\u0000\u0000"+
"\u0000\u012e\u012f\u0005/\u0000\u0000\u012f\u0130\u0005*\u0000\u0000\u0130"+
"\u0134\u0001\u0000\u0000\u0000\u0131\u0133\t\u0000\u0000\u0000\u0132\u0131"+
"\u0001\u0000\u0000\u0000\u0133\u0136\u0001\u0000\u0000\u0000\u0134\u0135"+
"\u0001\u0000\u0000\u0000\u0134\u0132\u0001\u0000\u0000\u0000\u0135\u0137"+
"\u0001\u0000\u0000\u0000\u0136\u0134\u0001\u0000\u0000\u0000\u0137\u0138"+
"\u0005*\u0000\u0000\u0138\u0139\u0005/\u0000\u0000\u0139\u013a\u0001\u0000"+
"\u0000\u0000\u013a\u013b\u0006/\u0000\u0000\u013b`\u0001\u0000\u0000\u0000"+
"\u013c\u013d\u0005/\u0000\u0000\u013d\u013e\u0005/\u0000\u0000\u013e\u0142"+
"\u0001\u0000\u0000\u0000\u013f\u0141\b\u0004\u0000\u0000\u0140\u013f\u0001"+
"\u0000\u0000\u0000\u0141\u0144\u0001\u0000\u0000\u0000\u0142\u0140\u0001"+
"\u0000\u0000\u0000\u0142\u0143\u0001\u0000\u0000\u0000\u0143\u0145\u0001"+
"\u0000\u0000\u0000\u0144\u0142\u0001\u0000\u0000\u0000\u0145\u0146\u0006"+
"0\u0000\u0000\u0146b\u0001\u0000\u0000\u0000\b\u0000\u0110\u0119\u011e"+
"\u0123\u0128\u0134\u0142\u0001\u0006\u0000\u0000";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {

View File

@ -57,12 +57,12 @@ LINE_COMMENT=49
'main'=8
'String[] args'=9
','=10
'if'=11
'else'=12
'for'=13
'while'=14
'do'=15
'return'=16
'return'=11
'if'=12
'else'=13
'for'=14
'while'=15
'do'=16
'break'=17
'.'=18
'public'=19

View File

@ -127,6 +127,16 @@ public interface DecafListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitBlock(DecafParser.BlockContext ctx);
/**
* Enter a parse tree produced by {@link DecafParser#return}.
* @param ctx the parse tree
*/
void enterReturn(DecafParser.ReturnContext ctx);
/**
* Exit a parse tree produced by {@link DecafParser#return}.
* @param ctx the parse tree
*/
void exitReturn(DecafParser.ReturnContext ctx);
/**
* Enter a parse tree produced by the {@code If}
* labeled alternative in {@link DecafParser#stmt}.
@ -175,30 +185,6 @@ public interface DecafListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitDoWhile(DecafParser.DoWhileContext ctx);
/**
* Enter a parse tree produced by the {@code Return}
* labeled alternative in {@link DecafParser#stmt}.
* @param ctx the parse tree
*/
void enterReturn(DecafParser.ReturnContext ctx);
/**
* Exit a parse tree produced by the {@code Return}
* labeled alternative in {@link DecafParser#stmt}.
* @param ctx the parse tree
*/
void exitReturn(DecafParser.ReturnContext ctx);
/**
* Enter a parse tree produced by the {@code ReturnVoid}
* labeled alternative in {@link DecafParser#stmt}.
* @param ctx the parse tree
*/
void enterReturnVoid(DecafParser.ReturnVoidContext ctx);
/**
* Exit a parse tree produced by the {@code ReturnVoid}
* labeled alternative in {@link DecafParser#stmt}.
* @param ctx the parse tree
*/
void exitReturnVoid(DecafParser.ReturnVoidContext ctx);
/**
* Enter a parse tree produced by the {@code Break}
* labeled alternative in {@link DecafParser#stmt}.

File diff suppressed because it is too large Load Diff

View File

@ -82,6 +82,12 @@ public interface DecafVisitor<T> extends ParseTreeVisitor<T> {
* @return the visitor result
*/
T visitBlock(DecafParser.BlockContext ctx);
/**
* Visit a parse tree produced by {@link DecafParser#return}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitReturn(DecafParser.ReturnContext ctx);
/**
* Visit a parse tree produced by the {@code If}
* labeled alternative in {@link DecafParser#stmt}.
@ -110,20 +116,6 @@ public interface DecafVisitor<T> extends ParseTreeVisitor<T> {
* @return the visitor result
*/
T visitDoWhile(DecafParser.DoWhileContext ctx);
/**
* Visit a parse tree produced by the {@code Return}
* labeled alternative in {@link DecafParser#stmt}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitReturn(DecafParser.ReturnContext ctx);
/**
* Visit a parse tree produced by the {@code ReturnVoid}
* labeled alternative in {@link DecafParser#stmt}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitReturnVoid(DecafParser.ReturnVoidContext ctx);
/**
* Visit a parse tree produced by the {@code Break}
* labeled alternative in {@link DecafParser#stmt}.