diff --git a/modules/lang-painless/src/main/antlr/PainlessParser.g4 b/modules/lang-painless/src/main/antlr/PainlessParser.g4
index bfa4ee28dcc..5292b4d1950 100644
--- a/modules/lang-painless/src/main/antlr/PainlessParser.g4
+++ b/modules/lang-painless/src/main/antlr/PainlessParser.g4
@@ -22,7 +22,7 @@ parser grammar PainlessParser;
options { tokenVocab=PainlessLexer; }
source
- : function* statement* EOF
+ : function* statement* dstatement? EOF
;
function
@@ -33,23 +33,31 @@ parameters
: LP ( decltype ID ( COMMA decltype ID )* )? RP
;
+statement
+ : rstatement
+ | dstatement SEMICOLON
+ ;
+
// Note we use a predicate on the if/else case here to prevent the
// "dangling-else" ambiguity by forcing the 'else' token to be consumed
// as soon as one is found. See (https://en.wikipedia.org/wiki/Dangling_else).
-statement
+rstatement
: IF LP expression RP trailer ( ELSE trailer | { _input.LA(1) != ELSE }? ) # if
| WHILE LP expression RP ( trailer | empty ) # while
- | DO block WHILE LP expression RP delimiter # do
| FOR LP initializer? SEMICOLON expression? SEMICOLON afterthought? RP ( trailer | empty ) # for
| FOR LP decltype ID COLON expression RP trailer # each
| FOR LP ID IN expression RP trailer # ineach
- | declaration delimiter # decl
- | CONTINUE delimiter # continue
- | BREAK delimiter # break
- | RETURN expression delimiter # return
| TRY block trap+ # try
- | THROW expression delimiter # throw
- | expression delimiter # expr
+ ;
+
+dstatement
+ : DO block WHILE LP expression RP # do
+ | declaration # decl
+ | CONTINUE # continue
+ | BREAK # break
+ | RETURN expression # return
+ | THROW expression # throw
+ | expression # expr
;
trailer
@@ -58,7 +66,7 @@ trailer
;
block
- : LBRACK statement* RBRACK
+ : LBRACK statement* dstatement? RBRACK
;
empty
@@ -90,11 +98,6 @@ trap
: CATCH LP TYPE ID RP block
;
-delimiter
- : SEMICOLON
- | EOF
- ;
-
expression
: unary # single
| expression ( MUL | DIV | REM ) expression # binary
@@ -169,8 +172,8 @@ braceaccess
;
arrayinitializer
- : NEW TYPE ( LBRACE expression RBRACE )+ ( postdot postfix* )? # newstandardarray
- | NEW TYPE LBRACE RBRACE LBRACK ( expression ( COMMA expression )* )? SEMICOLON? RBRACK postfix* # newinitializedarray
+ : NEW TYPE ( LBRACE expression RBRACE )+ ( postdot postfix* )? # newstandardarray
+ | NEW TYPE LBRACE RBRACE LBRACK ( expression ( COMMA expression )* )? RBRACK postfix* # newinitializedarray
;
listinitializer
@@ -206,10 +209,8 @@ lamtype
;
funcref
- : TYPE REF ID # classfuncref // reference to a static or instance method,
- // e.g. ArrayList::size or Integer::compare
- | decltype REF NEW # constructorfuncref // reference to a constructor, e.g. ArrayList::new
- | ID REF ID # capturingfuncref // reference to an instance method, e.g. object::toString
- // currently limited to capture of a simple variable (id).
- | THIS REF ID # localfuncref // reference to a local function, e.g. this::myfunc
+ : TYPE REF ID # classfuncref
+ | decltype REF NEW # constructorfuncref
+ | ID REF ID # capturingfuncref
+ | THIS REF ID # localfuncref
;
diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/EnhancedPainlessLexer.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/EnhancedPainlessLexer.java
index 506ac8fcdec..adef4d36425 100644
--- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/EnhancedPainlessLexer.java
+++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/EnhancedPainlessLexer.java
@@ -44,8 +44,7 @@ final class EnhancedPainlessLexer extends PainlessLexer {
private final String sourceName;
private final Definition definition;
- private Token stashedNext = null;
- private Token previous = null;
+ private Token current = null;
EnhancedPainlessLexer(CharStream charStream, String sourceName, Definition definition) {
super(charStream);
@@ -53,27 +52,10 @@ final class EnhancedPainlessLexer extends PainlessLexer {
this.definition = definition;
}
- public Token getPreviousToken() {
- return previous;
- }
-
@Override
public Token nextToken() {
- if (stashedNext != null) {
- previous = stashedNext;
- stashedNext = null;
- return previous;
- }
- Token next = super.nextToken();
- if (insertSemicolon(previous, next)) {
- stashedNext = next;
- previous = _factory.create(new Pair(this, _input), PainlessLexer.SEMICOLON, ";",
- Lexer.DEFAULT_TOKEN_CHANNEL, next.getStartIndex(), next.getStopIndex(), next.getLine(), next.getCharPositionInLine());
- return previous;
- } else {
- previous = next;
- return next;
- }
+ current = super.nextToken();
+ return current;
}
@Override
@@ -101,7 +83,7 @@ final class EnhancedPainlessLexer extends PainlessLexer {
@Override
protected boolean slashIsRegex() {
- Token lastToken = getPreviousToken();
+ Token lastToken = current;
if (lastToken == null) {
return true;
}
@@ -120,18 +102,4 @@ final class EnhancedPainlessLexer extends PainlessLexer {
return true;
}
}
-
- private static boolean insertSemicolon(Token previous, Token next) {
- if (previous == null || next.getType() != PainlessLexer.RBRACK) {
- return false;
- }
- switch (previous.getType()) {
- case PainlessLexer.RBRACK: // };} would be weird!
- case PainlessLexer.SEMICOLON: // already have a semicolon, no need to add one
- case PainlessLexer.LBRACK: // empty blocks don't need a semicolon
- return false;
- default:
- return true;
- }
- }
}
diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParser.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParser.java
index 528a8a3d851..bba53d650ad 100644
--- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParser.java
+++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParser.java
@@ -30,21 +30,21 @@ class PainlessParser extends Parser {
ID=82, DOTINTEGER=83, DOTID=84;
public static final int
RULE_source = 0, RULE_function = 1, RULE_parameters = 2, RULE_statement = 3,
- RULE_trailer = 4, RULE_block = 5, RULE_empty = 6, RULE_initializer = 7,
- RULE_afterthought = 8, RULE_declaration = 9, RULE_decltype = 10, RULE_declvar = 11,
- RULE_trap = 12, RULE_delimiter = 13, RULE_expression = 14, RULE_unary = 15,
- RULE_chain = 16, RULE_primary = 17, RULE_postfix = 18, RULE_postdot = 19,
- RULE_callinvoke = 20, RULE_fieldaccess = 21, RULE_braceaccess = 22, RULE_arrayinitializer = 23,
- RULE_listinitializer = 24, RULE_mapinitializer = 25, RULE_maptoken = 26,
- RULE_arguments = 27, RULE_argument = 28, RULE_lambda = 29, RULE_lamtype = 30,
- RULE_funcref = 31;
+ RULE_rstatement = 4, RULE_dstatement = 5, RULE_trailer = 6, RULE_block = 7,
+ RULE_empty = 8, RULE_initializer = 9, RULE_afterthought = 10, RULE_declaration = 11,
+ RULE_decltype = 12, RULE_declvar = 13, RULE_trap = 14, RULE_expression = 15,
+ RULE_unary = 16, RULE_chain = 17, RULE_primary = 18, RULE_postfix = 19,
+ RULE_postdot = 20, RULE_callinvoke = 21, RULE_fieldaccess = 22, RULE_braceaccess = 23,
+ RULE_arrayinitializer = 24, RULE_listinitializer = 25, RULE_mapinitializer = 26,
+ RULE_maptoken = 27, RULE_arguments = 28, RULE_argument = 29, RULE_lambda = 30,
+ RULE_lamtype = 31, RULE_funcref = 32;
public static final String[] ruleNames = {
- "source", "function", "parameters", "statement", "trailer", "block", "empty",
- "initializer", "afterthought", "declaration", "decltype", "declvar", "trap",
- "delimiter", "expression", "unary", "chain", "primary", "postfix", "postdot",
- "callinvoke", "fieldaccess", "braceaccess", "arrayinitializer", "listinitializer",
- "mapinitializer", "maptoken", "arguments", "argument", "lambda", "lamtype",
- "funcref"
+ "source", "function", "parameters", "statement", "rstatement", "dstatement",
+ "trailer", "block", "empty", "initializer", "afterthought", "declaration",
+ "decltype", "declvar", "trap", "expression", "unary", "chain", "primary",
+ "postfix", "postdot", "callinvoke", "fieldaccess", "braceaccess", "arrayinitializer",
+ "listinitializer", "mapinitializer", "maptoken", "arguments", "argument",
+ "lambda", "lamtype", "funcref"
};
private static final String[] _LITERAL_NAMES = {
@@ -133,6 +133,9 @@ class PainlessParser extends Parser {
public StatementContext statement(int i) {
return getRuleContext(StatementContext.class,i);
}
+ public DstatementContext dstatement() {
+ return getRuleContext(DstatementContext.class,0);
+ }
public SourceContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -152,37 +155,48 @@ class PainlessParser extends Parser {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(67);
+ setState(69);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,0,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(64);
+ setState(66);
function();
}
}
}
- setState(69);
+ setState(71);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,0,_ctx);
}
- setState(73);
+ setState(75);
_errHandler.sync(this);
- _la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LBRACE) | (1L << LP) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << CONTINUE) | (1L << BREAK) | (1L << RETURN) | (1L << NEW) | (1L << TRY) | (1L << THROW) | (1L << BOOLNOT) | (1L << BWNOT) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (OCTAL - 72)) | (1L << (HEX - 72)) | (1L << (INTEGER - 72)) | (1L << (DECIMAL - 72)) | (1L << (STRING - 72)) | (1L << (REGEX - 72)) | (1L << (TRUE - 72)) | (1L << (FALSE - 72)) | (1L << (NULL - 72)) | (1L << (TYPE - 72)) | (1L << (ID - 72)))) != 0)) {
- {
- {
- setState(70);
- statement();
+ _alt = getInterpreter().adaptivePredict(_input,1,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(72);
+ statement();
+ }
+ }
}
- }
- setState(75);
+ setState(77);
_errHandler.sync(this);
- _la = _input.LA(1);
+ _alt = getInterpreter().adaptivePredict(_input,1,_ctx);
}
- setState(76);
+ setState(79);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LBRACE) | (1L << LP) | (1L << DO) | (1L << CONTINUE) | (1L << BREAK) | (1L << RETURN) | (1L << NEW) | (1L << THROW) | (1L << BOOLNOT) | (1L << BWNOT) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (OCTAL - 72)) | (1L << (HEX - 72)) | (1L << (INTEGER - 72)) | (1L << (DECIMAL - 72)) | (1L << (STRING - 72)) | (1L << (REGEX - 72)) | (1L << (TRUE - 72)) | (1L << (FALSE - 72)) | (1L << (NULL - 72)) | (1L << (TYPE - 72)) | (1L << (ID - 72)))) != 0)) {
+ {
+ setState(78);
+ dstatement();
+ }
+ }
+
+ setState(81);
match(EOF);
}
}
@@ -225,13 +239,13 @@ class PainlessParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(78);
+ setState(83);
decltype();
- setState(79);
+ setState(84);
match(ID);
- setState(80);
+ setState(85);
parameters();
- setState(81);
+ setState(86);
block();
}
}
@@ -281,38 +295,38 @@ class PainlessParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(83);
+ setState(88);
match(LP);
- setState(95);
+ setState(100);
_la = _input.LA(1);
if (_la==TYPE) {
{
- setState(84);
+ setState(89);
decltype();
- setState(85);
+ setState(90);
match(ID);
- setState(92);
+ setState(97);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(86);
+ setState(91);
match(COMMA);
- setState(87);
+ setState(92);
decltype();
- setState(88);
+ setState(93);
match(ID);
}
}
- setState(94);
+ setState(99);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(97);
+ setState(102);
match(RP);
}
}
@@ -328,43 +342,100 @@ class PainlessParser extends Parser {
}
public static class StatementContext extends ParserRuleContext {
+ public RstatementContext rstatement() {
+ return getRuleContext(RstatementContext.class,0);
+ }
+ public DstatementContext dstatement() {
+ return getRuleContext(DstatementContext.class,0);
+ }
+ public TerminalNode SEMICOLON() { return getToken(PainlessParser.SEMICOLON, 0); }
public StatementContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@Override public int getRuleIndex() { return RULE_statement; }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitStatement(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final StatementContext statement() throws RecognitionException {
+ StatementContext _localctx = new StatementContext(_ctx, getState());
+ enterRule(_localctx, 6, RULE_statement);
+ try {
+ setState(108);
+ switch (_input.LA(1)) {
+ case IF:
+ case WHILE:
+ case FOR:
+ case TRY:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(104);
+ rstatement();
+ }
+ break;
+ case LBRACE:
+ case LP:
+ case DO:
+ case CONTINUE:
+ case BREAK:
+ case RETURN:
+ case NEW:
+ case THROW:
+ case BOOLNOT:
+ case BWNOT:
+ case ADD:
+ case SUB:
+ case INCR:
+ case DECR:
+ case OCTAL:
+ case HEX:
+ case INTEGER:
+ case DECIMAL:
+ case STRING:
+ case REGEX:
+ case TRUE:
+ case FALSE:
+ case NULL:
+ case TYPE:
+ case ID:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(105);
+ dstatement();
+ setState(106);
+ match(SEMICOLON);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class RstatementContext extends ParserRuleContext {
+ public RstatementContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_rstatement; }
- public StatementContext() { }
- public void copyFrom(StatementContext ctx) {
+ public RstatementContext() { }
+ public void copyFrom(RstatementContext ctx) {
super.copyFrom(ctx);
}
}
- public static class DeclContext extends StatementContext {
- public DeclarationContext declaration() {
- return getRuleContext(DeclarationContext.class,0);
- }
- public DelimiterContext delimiter() {
- return getRuleContext(DelimiterContext.class,0);
- }
- public DeclContext(StatementContext ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitDecl(this);
- else return visitor.visitChildren(this);
- }
- }
- public static class BreakContext extends StatementContext {
- public TerminalNode BREAK() { return getToken(PainlessParser.BREAK, 0); }
- public DelimiterContext delimiter() {
- return getRuleContext(DelimiterContext.class,0);
- }
- public BreakContext(StatementContext ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitBreak(this);
- else return visitor.visitChildren(this);
- }
- }
- public static class ForContext extends StatementContext {
+ public static class ForContext extends RstatementContext {
public TerminalNode FOR() { return getToken(PainlessParser.FOR, 0); }
public TerminalNode LP() { return getToken(PainlessParser.LP, 0); }
public List SEMICOLON() { return getTokens(PainlessParser.SEMICOLON); }
@@ -387,35 +458,32 @@ class PainlessParser extends Parser {
public AfterthoughtContext afterthought() {
return getRuleContext(AfterthoughtContext.class,0);
}
- public ForContext(StatementContext ctx) { copyFrom(ctx); }
+ public ForContext(RstatementContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitFor(this);
else return visitor.visitChildren(this);
}
}
- public static class DoContext extends StatementContext {
- public TerminalNode DO() { return getToken(PainlessParser.DO, 0); }
+ public static class TryContext extends RstatementContext {
+ public TerminalNode TRY() { return getToken(PainlessParser.TRY, 0); }
public BlockContext block() {
return getRuleContext(BlockContext.class,0);
}
- public TerminalNode WHILE() { return getToken(PainlessParser.WHILE, 0); }
- public TerminalNode LP() { return getToken(PainlessParser.LP, 0); }
- public ExpressionContext expression() {
- return getRuleContext(ExpressionContext.class,0);
+ public List trap() {
+ return getRuleContexts(TrapContext.class);
}
- public TerminalNode RP() { return getToken(PainlessParser.RP, 0); }
- public DelimiterContext delimiter() {
- return getRuleContext(DelimiterContext.class,0);
+ public TrapContext trap(int i) {
+ return getRuleContext(TrapContext.class,i);
}
- public DoContext(StatementContext ctx) { copyFrom(ctx); }
+ public TryContext(RstatementContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitDo(this);
+ if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitTry(this);
else return visitor.visitChildren(this);
}
}
- public static class WhileContext extends StatementContext {
+ public static class WhileContext extends RstatementContext {
public TerminalNode WHILE() { return getToken(PainlessParser.WHILE, 0); }
public TerminalNode LP() { return getToken(PainlessParser.LP, 0); }
public ExpressionContext expression() {
@@ -428,14 +496,14 @@ class PainlessParser extends Parser {
public EmptyContext empty() {
return getRuleContext(EmptyContext.class,0);
}
- public WhileContext(StatementContext ctx) { copyFrom(ctx); }
+ public WhileContext(RstatementContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitWhile(this);
else return visitor.visitChildren(this);
}
}
- public static class IneachContext extends StatementContext {
+ public static class IneachContext extends RstatementContext {
public TerminalNode FOR() { return getToken(PainlessParser.FOR, 0); }
public TerminalNode LP() { return getToken(PainlessParser.LP, 0); }
public TerminalNode ID() { return getToken(PainlessParser.ID, 0); }
@@ -447,14 +515,35 @@ class PainlessParser extends Parser {
public TrailerContext trailer() {
return getRuleContext(TrailerContext.class,0);
}
- public IneachContext(StatementContext ctx) { copyFrom(ctx); }
+ public IneachContext(RstatementContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitIneach(this);
else return visitor.visitChildren(this);
}
}
- public static class EachContext extends StatementContext {
+ public static class IfContext extends RstatementContext {
+ public TerminalNode IF() { return getToken(PainlessParser.IF, 0); }
+ public TerminalNode LP() { return getToken(PainlessParser.LP, 0); }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public TerminalNode RP() { return getToken(PainlessParser.RP, 0); }
+ public List trailer() {
+ return getRuleContexts(TrailerContext.class);
+ }
+ public TrailerContext trailer(int i) {
+ return getRuleContext(TrailerContext.class,i);
+ }
+ public TerminalNode ELSE() { return getToken(PainlessParser.ELSE, 0); }
+ public IfContext(RstatementContext ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitIf(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class EachContext extends RstatementContext {
public TerminalNode FOR() { return getToken(PainlessParser.FOR, 0); }
public TerminalNode LP() { return getToken(PainlessParser.LP, 0); }
public DecltypeContext decltype() {
@@ -469,146 +558,51 @@ class PainlessParser extends Parser {
public TrailerContext trailer() {
return getRuleContext(TrailerContext.class,0);
}
- public EachContext(StatementContext ctx) { copyFrom(ctx); }
+ public EachContext(RstatementContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitEach(this);
else return visitor.visitChildren(this);
}
}
- public static class ThrowContext extends StatementContext {
- public TerminalNode THROW() { return getToken(PainlessParser.THROW, 0); }
- public ExpressionContext expression() {
- return getRuleContext(ExpressionContext.class,0);
- }
- public DelimiterContext delimiter() {
- return getRuleContext(DelimiterContext.class,0);
- }
- public ThrowContext(StatementContext ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitThrow(this);
- else return visitor.visitChildren(this);
- }
- }
- public static class ContinueContext extends StatementContext {
- public TerminalNode CONTINUE() { return getToken(PainlessParser.CONTINUE, 0); }
- public DelimiterContext delimiter() {
- return getRuleContext(DelimiterContext.class,0);
- }
- public ContinueContext(StatementContext ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitContinue(this);
- else return visitor.visitChildren(this);
- }
- }
- public static class TryContext extends StatementContext {
- public TerminalNode TRY() { return getToken(PainlessParser.TRY, 0); }
- public BlockContext block() {
- return getRuleContext(BlockContext.class,0);
- }
- public List trap() {
- return getRuleContexts(TrapContext.class);
- }
- public TrapContext trap(int i) {
- return getRuleContext(TrapContext.class,i);
- }
- public TryContext(StatementContext ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitTry(this);
- else return visitor.visitChildren(this);
- }
- }
- public static class ExprContext extends StatementContext {
- public ExpressionContext expression() {
- return getRuleContext(ExpressionContext.class,0);
- }
- public DelimiterContext delimiter() {
- return getRuleContext(DelimiterContext.class,0);
- }
- public ExprContext(StatementContext ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitExpr(this);
- else return visitor.visitChildren(this);
- }
- }
- public static class IfContext extends StatementContext {
- public TerminalNode IF() { return getToken(PainlessParser.IF, 0); }
- public TerminalNode LP() { return getToken(PainlessParser.LP, 0); }
- public ExpressionContext expression() {
- return getRuleContext(ExpressionContext.class,0);
- }
- public TerminalNode RP() { return getToken(PainlessParser.RP, 0); }
- public List trailer() {
- return getRuleContexts(TrailerContext.class);
- }
- public TrailerContext trailer(int i) {
- return getRuleContext(TrailerContext.class,i);
- }
- public TerminalNode ELSE() { return getToken(PainlessParser.ELSE, 0); }
- public IfContext(StatementContext ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitIf(this);
- else return visitor.visitChildren(this);
- }
- }
- public static class ReturnContext extends StatementContext {
- public TerminalNode RETURN() { return getToken(PainlessParser.RETURN, 0); }
- public ExpressionContext expression() {
- return getRuleContext(ExpressionContext.class,0);
- }
- public DelimiterContext delimiter() {
- return getRuleContext(DelimiterContext.class,0);
- }
- public ReturnContext(StatementContext ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitReturn(this);
- else return visitor.visitChildren(this);
- }
- }
- public final StatementContext statement() throws RecognitionException {
- StatementContext _localctx = new StatementContext(_ctx, getState());
- enterRule(_localctx, 6, RULE_statement);
+ public final RstatementContext rstatement() throws RecognitionException {
+ RstatementContext _localctx = new RstatementContext(_ctx, getState());
+ enterRule(_localctx, 8, RULE_rstatement);
int _la;
try {
int _alt;
- setState(185);
+ setState(170);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) {
case 1:
_localctx = new IfContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(99);
+ setState(110);
match(IF);
- setState(100);
+ setState(111);
match(LP);
- setState(101);
+ setState(112);
expression(0);
- setState(102);
+ setState(113);
match(RP);
- setState(103);
+ setState(114);
trailer();
- setState(107);
+ setState(118);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
case 1:
{
- setState(104);
+ setState(115);
match(ELSE);
- setState(105);
+ setState(116);
trailer();
}
break;
case 2:
{
- setState(106);
+ setState(117);
if (!( _input.LA(1) != ELSE )) throw new FailedPredicateException(this, " _input.LA(1) != ELSE ");
}
break;
@@ -619,15 +613,15 @@ class PainlessParser extends Parser {
_localctx = new WhileContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(109);
+ setState(120);
match(WHILE);
- setState(110);
+ setState(121);
match(LP);
- setState(111);
+ setState(122);
expression(0);
- setState(112);
+ setState(123);
match(RP);
- setState(115);
+ setState(126);
switch (_input.LA(1)) {
case LBRACK:
case LBRACE:
@@ -660,13 +654,13 @@ class PainlessParser extends Parser {
case TYPE:
case ID:
{
- setState(113);
+ setState(124);
trailer();
}
break;
case SEMICOLON:
{
- setState(114);
+ setState(125);
empty();
}
break;
@@ -676,67 +670,47 @@ class PainlessParser extends Parser {
}
break;
case 3:
- _localctx = new DoContext(_localctx);
+ _localctx = new ForContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(117);
- match(DO);
- setState(118);
- block();
- setState(119);
- match(WHILE);
- setState(120);
- match(LP);
- setState(121);
- expression(0);
- setState(122);
- match(RP);
- setState(123);
- delimiter();
- }
- break;
- case 4:
- _localctx = new ForContext(_localctx);
- enterOuterAlt(_localctx, 4);
- {
- setState(125);
- match(FOR);
- setState(126);
- match(LP);
setState(128);
+ match(FOR);
+ setState(129);
+ match(LP);
+ setState(131);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LBRACE) | (1L << LP) | (1L << NEW) | (1L << BOOLNOT) | (1L << BWNOT) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (OCTAL - 72)) | (1L << (HEX - 72)) | (1L << (INTEGER - 72)) | (1L << (DECIMAL - 72)) | (1L << (STRING - 72)) | (1L << (REGEX - 72)) | (1L << (TRUE - 72)) | (1L << (FALSE - 72)) | (1L << (NULL - 72)) | (1L << (TYPE - 72)) | (1L << (ID - 72)))) != 0)) {
{
- setState(127);
+ setState(130);
initializer();
}
}
- setState(130);
+ setState(133);
match(SEMICOLON);
- setState(132);
+ setState(135);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LBRACE) | (1L << LP) | (1L << NEW) | (1L << BOOLNOT) | (1L << BWNOT) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (OCTAL - 72)) | (1L << (HEX - 72)) | (1L << (INTEGER - 72)) | (1L << (DECIMAL - 72)) | (1L << (STRING - 72)) | (1L << (REGEX - 72)) | (1L << (TRUE - 72)) | (1L << (FALSE - 72)) | (1L << (NULL - 72)) | (1L << (TYPE - 72)) | (1L << (ID - 72)))) != 0)) {
{
- setState(131);
+ setState(134);
expression(0);
}
}
- setState(134);
+ setState(137);
match(SEMICOLON);
- setState(136);
+ setState(139);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LBRACE) | (1L << LP) | (1L << NEW) | (1L << BOOLNOT) | (1L << BWNOT) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (OCTAL - 72)) | (1L << (HEX - 72)) | (1L << (INTEGER - 72)) | (1L << (DECIMAL - 72)) | (1L << (STRING - 72)) | (1L << (REGEX - 72)) | (1L << (TRUE - 72)) | (1L << (FALSE - 72)) | (1L << (NULL - 72)) | (1L << (TYPE - 72)) | (1L << (ID - 72)))) != 0)) {
{
- setState(135);
+ setState(138);
afterthought();
}
}
- setState(138);
- match(RP);
setState(141);
+ match(RP);
+ setState(144);
switch (_input.LA(1)) {
case LBRACK:
case LBRACE:
@@ -769,13 +743,13 @@ class PainlessParser extends Parser {
case TYPE:
case ID:
{
- setState(139);
+ setState(142);
trailer();
}
break;
case SEMICOLON:
{
- setState(140);
+ setState(143);
empty();
}
break;
@@ -784,99 +758,57 @@ class PainlessParser extends Parser {
}
}
break;
- case 5:
+ case 4:
_localctx = new EachContext(_localctx);
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(146);
+ match(FOR);
+ setState(147);
+ match(LP);
+ setState(148);
+ decltype();
+ setState(149);
+ match(ID);
+ setState(150);
+ match(COLON);
+ setState(151);
+ expression(0);
+ setState(152);
+ match(RP);
+ setState(153);
+ trailer();
+ }
+ break;
+ case 5:
+ _localctx = new IneachContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(143);
+ setState(155);
match(FOR);
- setState(144);
+ setState(156);
match(LP);
- setState(145);
- decltype();
- setState(146);
+ setState(157);
match(ID);
- setState(147);
- match(COLON);
- setState(148);
+ setState(158);
+ match(IN);
+ setState(159);
expression(0);
- setState(149);
+ setState(160);
match(RP);
- setState(150);
+ setState(161);
trailer();
}
break;
case 6:
- _localctx = new IneachContext(_localctx);
+ _localctx = new TryContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(152);
- match(FOR);
- setState(153);
- match(LP);
- setState(154);
- match(ID);
- setState(155);
- match(IN);
- setState(156);
- expression(0);
- setState(157);
- match(RP);
- setState(158);
- trailer();
- }
- break;
- case 7:
- _localctx = new DeclContext(_localctx);
- enterOuterAlt(_localctx, 7);
- {
- setState(160);
- declaration();
- setState(161);
- delimiter();
- }
- break;
- case 8:
- _localctx = new ContinueContext(_localctx);
- enterOuterAlt(_localctx, 8);
- {
setState(163);
- match(CONTINUE);
- setState(164);
- delimiter();
- }
- break;
- case 9:
- _localctx = new BreakContext(_localctx);
- enterOuterAlt(_localctx, 9);
- {
- setState(165);
- match(BREAK);
- setState(166);
- delimiter();
- }
- break;
- case 10:
- _localctx = new ReturnContext(_localctx);
- enterOuterAlt(_localctx, 10);
- {
- setState(167);
- match(RETURN);
- setState(168);
- expression(0);
- setState(169);
- delimiter();
- }
- break;
- case 11:
- _localctx = new TryContext(_localctx);
- enterOuterAlt(_localctx, 11);
- {
- setState(171);
match(TRY);
- setState(172);
+ setState(164);
block();
- setState(174);
+ setState(166);
_errHandler.sync(this);
_alt = 1;
do {
@@ -884,7 +816,7 @@ class PainlessParser extends Parser {
case 1:
{
{
- setState(173);
+ setState(165);
trap();
}
}
@@ -892,32 +824,194 @@ class PainlessParser extends Parser {
default:
throw new NoViableAltException(this);
}
- setState(176);
+ setState(168);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,10,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,12,_ctx);
} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
}
break;
- case 12:
- _localctx = new ThrowContext(_localctx);
- enterOuterAlt(_localctx, 12);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class DstatementContext extends ParserRuleContext {
+ public DstatementContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_dstatement; }
+
+ public DstatementContext() { }
+ public void copyFrom(DstatementContext ctx) {
+ super.copyFrom(ctx);
+ }
+ }
+ public static class DeclContext extends DstatementContext {
+ public DeclarationContext declaration() {
+ return getRuleContext(DeclarationContext.class,0);
+ }
+ public DeclContext(DstatementContext ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitDecl(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class BreakContext extends DstatementContext {
+ public TerminalNode BREAK() { return getToken(PainlessParser.BREAK, 0); }
+ public BreakContext(DstatementContext ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitBreak(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class ThrowContext extends DstatementContext {
+ public TerminalNode THROW() { return getToken(PainlessParser.THROW, 0); }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public ThrowContext(DstatementContext ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitThrow(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class ContinueContext extends DstatementContext {
+ public TerminalNode CONTINUE() { return getToken(PainlessParser.CONTINUE, 0); }
+ public ContinueContext(DstatementContext ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitContinue(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class ExprContext extends DstatementContext {
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public ExprContext(DstatementContext ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitExpr(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class DoContext extends DstatementContext {
+ public TerminalNode DO() { return getToken(PainlessParser.DO, 0); }
+ public BlockContext block() {
+ return getRuleContext(BlockContext.class,0);
+ }
+ public TerminalNode WHILE() { return getToken(PainlessParser.WHILE, 0); }
+ public TerminalNode LP() { return getToken(PainlessParser.LP, 0); }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public TerminalNode RP() { return getToken(PainlessParser.RP, 0); }
+ public DoContext(DstatementContext ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitDo(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class ReturnContext extends DstatementContext {
+ public TerminalNode RETURN() { return getToken(PainlessParser.RETURN, 0); }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public ReturnContext(DstatementContext ctx) { copyFrom(ctx); }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitReturn(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final DstatementContext dstatement() throws RecognitionException {
+ DstatementContext _localctx = new DstatementContext(_ctx, getState());
+ enterRule(_localctx, 10, RULE_dstatement);
+ try {
+ setState(187);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
+ case 1:
+ _localctx = new DoContext(_localctx);
+ enterOuterAlt(_localctx, 1);
{
- setState(178);
- match(THROW);
- setState(179);
+ setState(172);
+ match(DO);
+ setState(173);
+ block();
+ setState(174);
+ match(WHILE);
+ setState(175);
+ match(LP);
+ setState(176);
expression(0);
- setState(180);
- delimiter();
+ setState(177);
+ match(RP);
}
break;
- case 13:
- _localctx = new ExprContext(_localctx);
- enterOuterAlt(_localctx, 13);
+ case 2:
+ _localctx = new DeclContext(_localctx);
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(179);
+ declaration();
+ }
+ break;
+ case 3:
+ _localctx = new ContinueContext(_localctx);
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(180);
+ match(CONTINUE);
+ }
+ break;
+ case 4:
+ _localctx = new BreakContext(_localctx);
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(181);
+ match(BREAK);
+ }
+ break;
+ case 5:
+ _localctx = new ReturnContext(_localctx);
+ enterOuterAlt(_localctx, 5);
{
setState(182);
- expression(0);
+ match(RETURN);
setState(183);
- delimiter();
+ expression(0);
+ }
+ break;
+ case 6:
+ _localctx = new ThrowContext(_localctx);
+ enterOuterAlt(_localctx, 6);
+ {
+ setState(184);
+ match(THROW);
+ setState(185);
+ expression(0);
+ }
+ break;
+ case 7:
+ _localctx = new ExprContext(_localctx);
+ enterOuterAlt(_localctx, 7);
+ {
+ setState(186);
+ expression(0);
}
break;
}
@@ -953,14 +1047,14 @@ class PainlessParser extends Parser {
public final TrailerContext trailer() throws RecognitionException {
TrailerContext _localctx = new TrailerContext(_ctx, getState());
- enterRule(_localctx, 8, RULE_trailer);
+ enterRule(_localctx, 12, RULE_trailer);
try {
- setState(189);
+ setState(191);
switch (_input.LA(1)) {
case LBRACK:
enterOuterAlt(_localctx, 1);
{
- setState(187);
+ setState(189);
block();
}
break;
@@ -995,7 +1089,7 @@ class PainlessParser extends Parser {
case ID:
enterOuterAlt(_localctx, 2);
{
- setState(188);
+ setState(190);
statement();
}
break;
@@ -1023,6 +1117,9 @@ class PainlessParser extends Parser {
public StatementContext statement(int i) {
return getRuleContext(StatementContext.class,i);
}
+ public DstatementContext dstatement() {
+ return getRuleContext(DstatementContext.class,0);
+ }
public BlockContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -1036,28 +1133,40 @@ class PainlessParser extends Parser {
public final BlockContext block() throws RecognitionException {
BlockContext _localctx = new BlockContext(_ctx, getState());
- enterRule(_localctx, 10, RULE_block);
+ enterRule(_localctx, 14, RULE_block);
int _la;
try {
+ int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(191);
+ setState(193);
match(LBRACK);
- setState(195);
+ setState(197);
_errHandler.sync(this);
- _la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LBRACE) | (1L << LP) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << CONTINUE) | (1L << BREAK) | (1L << RETURN) | (1L << NEW) | (1L << TRY) | (1L << THROW) | (1L << BOOLNOT) | (1L << BWNOT) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (OCTAL - 72)) | (1L << (HEX - 72)) | (1L << (INTEGER - 72)) | (1L << (DECIMAL - 72)) | (1L << (STRING - 72)) | (1L << (REGEX - 72)) | (1L << (TRUE - 72)) | (1L << (FALSE - 72)) | (1L << (NULL - 72)) | (1L << (TYPE - 72)) | (1L << (ID - 72)))) != 0)) {
- {
- {
- setState(192);
- statement();
+ _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(194);
+ statement();
+ }
+ }
}
- }
- setState(197);
+ setState(199);
_errHandler.sync(this);
- _la = _input.LA(1);
+ _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
}
- setState(198);
+ setState(201);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LBRACE) | (1L << LP) | (1L << DO) | (1L << CONTINUE) | (1L << BREAK) | (1L << RETURN) | (1L << NEW) | (1L << THROW) | (1L << BOOLNOT) | (1L << BWNOT) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (OCTAL - 72)) | (1L << (HEX - 72)) | (1L << (INTEGER - 72)) | (1L << (DECIMAL - 72)) | (1L << (STRING - 72)) | (1L << (REGEX - 72)) | (1L << (TRUE - 72)) | (1L << (FALSE - 72)) | (1L << (NULL - 72)) | (1L << (TYPE - 72)) | (1L << (ID - 72)))) != 0)) {
+ {
+ setState(200);
+ dstatement();
+ }
+ }
+
+ setState(203);
match(RBRACK);
}
}
@@ -1087,11 +1196,11 @@ class PainlessParser extends Parser {
public final EmptyContext empty() throws RecognitionException {
EmptyContext _localctx = new EmptyContext(_ctx, getState());
- enterRule(_localctx, 12, RULE_empty);
+ enterRule(_localctx, 16, RULE_empty);
try {
enterOuterAlt(_localctx, 1);
{
- setState(200);
+ setState(205);
match(SEMICOLON);
}
}
@@ -1126,22 +1235,22 @@ class PainlessParser extends Parser {
public final InitializerContext initializer() throws RecognitionException {
InitializerContext _localctx = new InitializerContext(_ctx, getState());
- enterRule(_localctx, 14, RULE_initializer);
+ enterRule(_localctx, 18, RULE_initializer);
try {
- setState(204);
+ setState(209);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(202);
+ setState(207);
declaration();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(203);
+ setState(208);
expression(0);
}
break;
@@ -1175,11 +1284,11 @@ class PainlessParser extends Parser {
public final AfterthoughtContext afterthought() throws RecognitionException {
AfterthoughtContext _localctx = new AfterthoughtContext(_ctx, getState());
- enterRule(_localctx, 16, RULE_afterthought);
+ enterRule(_localctx, 20, RULE_afterthought);
try {
enterOuterAlt(_localctx, 1);
{
- setState(206);
+ setState(211);
expression(0);
}
}
@@ -1221,28 +1330,28 @@ class PainlessParser extends Parser {
public final DeclarationContext declaration() throws RecognitionException {
DeclarationContext _localctx = new DeclarationContext(_ctx, getState());
- enterRule(_localctx, 18, RULE_declaration);
+ enterRule(_localctx, 22, RULE_declaration);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(208);
+ setState(213);
decltype();
- setState(209);
- declvar();
setState(214);
+ declvar();
+ setState(219);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(210);
+ setState(215);
match(COMMA);
- setState(211);
+ setState(216);
declvar();
}
}
- setState(216);
+ setState(221);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1282,30 +1391,30 @@ class PainlessParser extends Parser {
public final DecltypeContext decltype() throws RecognitionException {
DecltypeContext _localctx = new DecltypeContext(_ctx, getState());
- enterRule(_localctx, 20, RULE_decltype);
+ enterRule(_localctx, 24, RULE_decltype);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(217);
- match(TYPE);
setState(222);
+ match(TYPE);
+ setState(227);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,20,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(218);
+ setState(223);
match(LBRACE);
- setState(219);
+ setState(224);
match(RBRACE);
}
}
}
- setState(224);
+ setState(229);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,20,_ctx);
}
}
}
@@ -1339,20 +1448,20 @@ class PainlessParser extends Parser {
public final DeclvarContext declvar() throws RecognitionException {
DeclvarContext _localctx = new DeclvarContext(_ctx, getState());
- enterRule(_localctx, 22, RULE_declvar);
+ enterRule(_localctx, 26, RULE_declvar);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(225);
+ setState(230);
match(ID);
- setState(228);
+ setState(233);
_la = _input.LA(1);
if (_la==ASSIGN) {
{
- setState(226);
+ setState(231);
match(ASSIGN);
- setState(227);
+ setState(232);
expression(0);
}
}
@@ -1392,63 +1501,22 @@ class PainlessParser extends Parser {
public final TrapContext trap() throws RecognitionException {
TrapContext _localctx = new TrapContext(_ctx, getState());
- enterRule(_localctx, 24, RULE_trap);
+ enterRule(_localctx, 28, RULE_trap);
try {
enterOuterAlt(_localctx, 1);
{
- setState(230);
- match(CATCH);
- setState(231);
- match(LP);
- setState(232);
- match(TYPE);
- setState(233);
- match(ID);
- setState(234);
- match(RP);
setState(235);
- block();
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class DelimiterContext extends ParserRuleContext {
- public TerminalNode SEMICOLON() { return getToken(PainlessParser.SEMICOLON, 0); }
- public TerminalNode EOF() { return getToken(PainlessParser.EOF, 0); }
- public DelimiterContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_delimiter; }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PainlessParserVisitor ) return ((PainlessParserVisitor extends T>)visitor).visitDelimiter(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final DelimiterContext delimiter() throws RecognitionException {
- DelimiterContext _localctx = new DelimiterContext(_ctx, getState());
- enterRule(_localctx, 26, RULE_delimiter);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
+ match(CATCH);
+ setState(236);
+ match(LP);
setState(237);
- _la = _input.LA(1);
- if ( !(_la==EOF || _la==SEMICOLON) ) {
- _errHandler.recoverInline(this);
- } else {
- consume();
- }
+ match(TYPE);
+ setState(238);
+ match(ID);
+ setState(239);
+ match(RP);
+ setState(240);
+ block();
}
}
catch (RecognitionException re) {
@@ -1631,8 +1699,8 @@ class PainlessParser extends Parser {
int _parentState = getState();
ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
ExpressionContext _prevctx = _localctx;
- int _startState = 28;
- enterRecursionRule(_localctx, 28, RULE_expression, _p);
+ int _startState = 30;
+ enterRecursionRule(_localctx, 30, RULE_expression, _p);
int _la;
try {
int _alt;
@@ -1643,35 +1711,35 @@ class PainlessParser extends Parser {
_ctx = _localctx;
_prevctx = _localctx;
- setState(240);
+ setState(243);
unary();
}
_ctx.stop = _input.LT(-1);
- setState(292);
+ setState(295);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,19,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,23,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(290);
+ setState(293);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) {
case 1:
{
_localctx = new BinaryContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(242);
+ setState(245);
if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)");
- setState(243);
+ setState(246);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << MUL) | (1L << DIV) | (1L << REM))) != 0)) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(244);
+ setState(247);
expression(16);
}
break;
@@ -1679,16 +1747,16 @@ class PainlessParser extends Parser {
{
_localctx = new BinaryContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(245);
+ setState(248);
if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
- setState(246);
+ setState(249);
_la = _input.LA(1);
if ( !(_la==ADD || _la==SUB) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(247);
+ setState(250);
expression(15);
}
break;
@@ -1696,16 +1764,16 @@ class PainlessParser extends Parser {
{
_localctx = new BinaryContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(248);
+ setState(251);
if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
- setState(249);
+ setState(252);
_la = _input.LA(1);
if ( !(_la==FIND || _la==MATCH) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(250);
+ setState(253);
expression(14);
}
break;
@@ -1713,16 +1781,16 @@ class PainlessParser extends Parser {
{
_localctx = new BinaryContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(251);
+ setState(254);
if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
- setState(252);
+ setState(255);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LSH) | (1L << RSH) | (1L << USH))) != 0)) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(253);
+ setState(256);
expression(13);
}
break;
@@ -1730,16 +1798,16 @@ class PainlessParser extends Parser {
{
_localctx = new CompContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(254);
+ setState(257);
if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
- setState(255);
+ setState(258);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LT) | (1L << LTE) | (1L << GT) | (1L << GTE))) != 0)) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(256);
+ setState(259);
expression(12);
}
break;
@@ -1747,16 +1815,16 @@ class PainlessParser extends Parser {
{
_localctx = new CompContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(257);
+ setState(260);
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
- setState(258);
+ setState(261);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << EQ) | (1L << EQR) | (1L << NE) | (1L << NER))) != 0)) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(259);
+ setState(262);
expression(10);
}
break;
@@ -1764,11 +1832,11 @@ class PainlessParser extends Parser {
{
_localctx = new BinaryContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(260);
+ setState(263);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
- setState(261);
+ setState(264);
match(BWAND);
- setState(262);
+ setState(265);
expression(9);
}
break;
@@ -1776,11 +1844,11 @@ class PainlessParser extends Parser {
{
_localctx = new BinaryContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(263);
+ setState(266);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(264);
+ setState(267);
match(XOR);
- setState(265);
+ setState(268);
expression(8);
}
break;
@@ -1788,11 +1856,11 @@ class PainlessParser extends Parser {
{
_localctx = new BinaryContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(266);
+ setState(269);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(267);
+ setState(270);
match(BWOR);
- setState(268);
+ setState(271);
expression(7);
}
break;
@@ -1800,11 +1868,11 @@ class PainlessParser extends Parser {
{
_localctx = new BoolContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(269);
+ setState(272);
if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
- setState(270);
+ setState(273);
match(BOOLAND);
- setState(271);
+ setState(274);
expression(6);
}
break;
@@ -1812,11 +1880,11 @@ class PainlessParser extends Parser {
{
_localctx = new BoolContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(272);
+ setState(275);
if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
- setState(273);
+ setState(276);
match(BOOLOR);
- setState(274);
+ setState(277);
expression(5);
}
break;
@@ -1824,15 +1892,15 @@ class PainlessParser extends Parser {
{
_localctx = new ConditionalContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(275);
- if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
- setState(276);
- match(COND);
- setState(277);
- expression(0);
setState(278);
- match(COLON);
+ if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
setState(279);
+ match(COND);
+ setState(280);
+ expression(0);
+ setState(281);
+ match(COLON);
+ setState(282);
expression(3);
}
break;
@@ -1840,11 +1908,11 @@ class PainlessParser extends Parser {
{
_localctx = new ElvisContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(281);
+ setState(284);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(282);
+ setState(285);
match(ELVIS);
- setState(283);
+ setState(286);
expression(2);
}
break;
@@ -1852,16 +1920,16 @@ class PainlessParser extends Parser {
{
_localctx = new AssignmentContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(284);
+ setState(287);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(285);
+ setState(288);
_la = _input.LA(1);
if ( !(((((_la - 60)) & ~0x3f) == 0 && ((1L << (_la - 60)) & ((1L << (ASSIGN - 60)) | (1L << (AADD - 60)) | (1L << (ASUB - 60)) | (1L << (AMUL - 60)) | (1L << (ADIV - 60)) | (1L << (AREM - 60)) | (1L << (AAND - 60)) | (1L << (AXOR - 60)) | (1L << (AOR - 60)) | (1L << (ALSH - 60)) | (1L << (ARSH - 60)) | (1L << (AUSH - 60)))) != 0)) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(286);
+ setState(289);
expression(1);
}
break;
@@ -1869,20 +1937,20 @@ class PainlessParser extends Parser {
{
_localctx = new InstanceofContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(287);
+ setState(290);
if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
- setState(288);
+ setState(291);
match(INSTANCEOF);
- setState(289);
+ setState(292);
decltype();
}
break;
}
}
}
- setState(294);
+ setState(297);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,19,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,23,_ctx);
}
}
}
@@ -1979,24 +2047,24 @@ class PainlessParser extends Parser {
public final UnaryContext unary() throws RecognitionException {
UnaryContext _localctx = new UnaryContext(_ctx, getState());
- enterRule(_localctx, 30, RULE_unary);
+ enterRule(_localctx, 32, RULE_unary);
int _la;
try {
- setState(308);
+ setState(311);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) {
case 1:
_localctx = new PreContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(295);
+ setState(298);
_la = _input.LA(1);
if ( !(_la==INCR || _la==DECR) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(296);
+ setState(299);
chain();
}
break;
@@ -2004,9 +2072,9 @@ class PainlessParser extends Parser {
_localctx = new PostContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(297);
+ setState(300);
chain();
- setState(298);
+ setState(301);
_la = _input.LA(1);
if ( !(_la==INCR || _la==DECR) ) {
_errHandler.recoverInline(this);
@@ -2019,7 +2087,7 @@ class PainlessParser extends Parser {
_localctx = new ReadContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(300);
+ setState(303);
chain();
}
break;
@@ -2027,14 +2095,14 @@ class PainlessParser extends Parser {
_localctx = new OperatorContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(301);
+ setState(304);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOOLNOT) | (1L << BWNOT) | (1L << ADD) | (1L << SUB))) != 0)) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(302);
+ setState(305);
unary();
}
break;
@@ -2042,13 +2110,13 @@ class PainlessParser extends Parser {
_localctx = new CastContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(303);
- match(LP);
- setState(304);
- decltype();
- setState(305);
- match(RP);
setState(306);
+ match(LP);
+ setState(307);
+ decltype();
+ setState(308);
+ match(RP);
+ setState(309);
unary();
}
break;
@@ -2127,33 +2195,33 @@ class PainlessParser extends Parser {
public final ChainContext chain() throws RecognitionException {
ChainContext _localctx = new ChainContext(_ctx, getState());
- enterRule(_localctx, 32, RULE_chain);
+ enterRule(_localctx, 34, RULE_chain);
try {
int _alt;
- setState(326);
+ setState(329);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) {
case 1:
_localctx = new DynamicContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(310);
+ setState(313);
primary();
- setState(314);
+ setState(317);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,25,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(311);
+ setState(314);
postfix();
}
}
}
- setState(316);
+ setState(319);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,25,_ctx);
}
}
break;
@@ -2161,25 +2229,25 @@ class PainlessParser extends Parser {
_localctx = new StaticContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(317);
+ setState(320);
decltype();
- setState(318);
+ setState(321);
postdot();
- setState(322);
+ setState(325);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,22,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,26,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(319);
+ setState(322);
postfix();
}
}
}
- setState(324);
+ setState(327);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,22,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,26,_ctx);
}
}
break;
@@ -2187,7 +2255,7 @@ class PainlessParser extends Parser {
_localctx = new NewarrayContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(325);
+ setState(328);
arrayinitializer();
}
break;
@@ -2344,21 +2412,21 @@ class PainlessParser extends Parser {
public final PrimaryContext primary() throws RecognitionException {
PrimaryContext _localctx = new PrimaryContext(_ctx, getState());
- enterRule(_localctx, 34, RULE_primary);
+ enterRule(_localctx, 36, RULE_primary);
int _la;
try {
- setState(346);
+ setState(349);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) {
case 1:
_localctx = new PrecedenceContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(328);
+ setState(331);
match(LP);
- setState(329);
+ setState(332);
expression(0);
- setState(330);
+ setState(333);
match(RP);
}
break;
@@ -2366,7 +2434,7 @@ class PainlessParser extends Parser {
_localctx = new NumericContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(332);
+ setState(335);
_la = _input.LA(1);
if ( !(((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (OCTAL - 72)) | (1L << (HEX - 72)) | (1L << (INTEGER - 72)) | (1L << (DECIMAL - 72)))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2379,7 +2447,7 @@ class PainlessParser extends Parser {
_localctx = new TrueContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(333);
+ setState(336);
match(TRUE);
}
break;
@@ -2387,7 +2455,7 @@ class PainlessParser extends Parser {
_localctx = new FalseContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(334);
+ setState(337);
match(FALSE);
}
break;
@@ -2395,7 +2463,7 @@ class PainlessParser extends Parser {
_localctx = new NullContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(335);
+ setState(338);
match(NULL);
}
break;
@@ -2403,7 +2471,7 @@ class PainlessParser extends Parser {
_localctx = new StringContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(336);
+ setState(339);
match(STRING);
}
break;
@@ -2411,7 +2479,7 @@ class PainlessParser extends Parser {
_localctx = new RegexContext(_localctx);
enterOuterAlt(_localctx, 7);
{
- setState(337);
+ setState(340);
match(REGEX);
}
break;
@@ -2419,7 +2487,7 @@ class PainlessParser extends Parser {
_localctx = new ListinitContext(_localctx);
enterOuterAlt(_localctx, 8);
{
- setState(338);
+ setState(341);
listinitializer();
}
break;
@@ -2427,7 +2495,7 @@ class PainlessParser extends Parser {
_localctx = new MapinitContext(_localctx);
enterOuterAlt(_localctx, 9);
{
- setState(339);
+ setState(342);
mapinitializer();
}
break;
@@ -2435,7 +2503,7 @@ class PainlessParser extends Parser {
_localctx = new VariableContext(_localctx);
enterOuterAlt(_localctx, 10);
{
- setState(340);
+ setState(343);
match(ID);
}
break;
@@ -2443,9 +2511,9 @@ class PainlessParser extends Parser {
_localctx = new CalllocalContext(_localctx);
enterOuterAlt(_localctx, 11);
{
- setState(341);
+ setState(344);
match(ID);
- setState(342);
+ setState(345);
arguments();
}
break;
@@ -2453,11 +2521,11 @@ class PainlessParser extends Parser {
_localctx = new NewobjectContext(_localctx);
enterOuterAlt(_localctx, 12);
{
- setState(343);
+ setState(346);
match(NEW);
- setState(344);
+ setState(347);
match(TYPE);
- setState(345);
+ setState(348);
arguments();
}
break;
@@ -2497,29 +2565,29 @@ class PainlessParser extends Parser {
public final PostfixContext postfix() throws RecognitionException {
PostfixContext _localctx = new PostfixContext(_ctx, getState());
- enterRule(_localctx, 36, RULE_postfix);
+ enterRule(_localctx, 38, RULE_postfix);
try {
- setState(351);
+ setState(354);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,25,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(348);
+ setState(351);
callinvoke();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(349);
+ setState(352);
fieldaccess();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(350);
+ setState(353);
braceaccess();
}
break;
@@ -2556,22 +2624,22 @@ class PainlessParser extends Parser {
public final PostdotContext postdot() throws RecognitionException {
PostdotContext _localctx = new PostdotContext(_ctx, getState());
- enterRule(_localctx, 38, RULE_postdot);
+ enterRule(_localctx, 40, RULE_postdot);
try {
- setState(355);
+ setState(358);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(353);
+ setState(356);
callinvoke();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(354);
+ setState(357);
fieldaccess();
}
break;
@@ -2608,21 +2676,21 @@ class PainlessParser extends Parser {
public final CallinvokeContext callinvoke() throws RecognitionException {
CallinvokeContext _localctx = new CallinvokeContext(_ctx, getState());
- enterRule(_localctx, 40, RULE_callinvoke);
+ enterRule(_localctx, 42, RULE_callinvoke);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(357);
+ setState(360);
_la = _input.LA(1);
if ( !(_la==DOT || _la==NSDOT) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(358);
+ setState(361);
match(DOTID);
- setState(359);
+ setState(362);
arguments();
}
}
@@ -2655,19 +2723,19 @@ class PainlessParser extends Parser {
public final FieldaccessContext fieldaccess() throws RecognitionException {
FieldaccessContext _localctx = new FieldaccessContext(_ctx, getState());
- enterRule(_localctx, 42, RULE_fieldaccess);
+ enterRule(_localctx, 44, RULE_fieldaccess);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(361);
+ setState(364);
_la = _input.LA(1);
if ( !(_la==DOT || _la==NSDOT) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(362);
+ setState(365);
_la = _input.LA(1);
if ( !(_la==DOTINTEGER || _la==DOTID) ) {
_errHandler.recoverInline(this);
@@ -2706,15 +2774,15 @@ class PainlessParser extends Parser {
public final BraceaccessContext braceaccess() throws RecognitionException {
BraceaccessContext _localctx = new BraceaccessContext(_ctx, getState());
- enterRule(_localctx, 44, RULE_braceaccess);
+ enterRule(_localctx, 46, RULE_braceaccess);
try {
enterOuterAlt(_localctx, 1);
{
- setState(364);
+ setState(367);
match(LBRACE);
- setState(365);
+ setState(368);
expression(0);
- setState(366);
+ setState(369);
match(RBRACE);
}
}
@@ -2786,7 +2854,6 @@ class PainlessParser extends Parser {
public ExpressionContext expression(int i) {
return getRuleContext(ExpressionContext.class,i);
}
- public TerminalNode SEMICOLON() { return getToken(PainlessParser.SEMICOLON, 0); }
public List postfix() {
return getRuleContexts(PostfixContext.class);
}
@@ -2807,22 +2874,22 @@ class PainlessParser extends Parser {
public final ArrayinitializerContext arrayinitializer() throws RecognitionException {
ArrayinitializerContext _localctx = new ArrayinitializerContext(_ctx, getState());
- enterRule(_localctx, 46, RULE_arrayinitializer);
+ enterRule(_localctx, 48, RULE_arrayinitializer);
int _la;
try {
int _alt;
setState(412);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) {
case 1:
_localctx = new NewstandardarrayContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(368);
+ setState(371);
match(NEW);
- setState(369);
+ setState(372);
match(TYPE);
- setState(374);
+ setState(377);
_errHandler.sync(this);
_alt = 1;
do {
@@ -2830,11 +2897,11 @@ class PainlessParser extends Parser {
case 1:
{
{
- setState(370);
+ setState(373);
match(LBRACE);
- setState(371);
+ setState(374);
expression(0);
- setState(372);
+ setState(375);
match(RBRACE);
}
}
@@ -2842,32 +2909,32 @@ class PainlessParser extends Parser {
default:
throw new NoViableAltException(this);
}
- setState(376);
+ setState(379);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,27,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,31,_ctx);
} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
- setState(385);
+ setState(388);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) {
case 1:
{
- setState(378);
+ setState(381);
postdot();
- setState(382);
+ setState(385);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,28,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,32,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(379);
+ setState(382);
postfix();
}
}
}
- setState(384);
+ setState(387);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,28,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,32,_ctx);
}
}
break;
@@ -2878,55 +2945,46 @@ class PainlessParser extends Parser {
_localctx = new NewinitializedarrayContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(387);
- match(NEW);
- setState(388);
- match(TYPE);
- setState(389);
- match(LBRACE);
setState(390);
- match(RBRACE);
+ match(NEW);
setState(391);
+ match(TYPE);
+ setState(392);
+ match(LBRACE);
+ setState(393);
+ match(RBRACE);
+ setState(394);
match(LBRACK);
- setState(400);
+ setState(403);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LBRACE) | (1L << LP) | (1L << NEW) | (1L << BOOLNOT) | (1L << BWNOT) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (OCTAL - 72)) | (1L << (HEX - 72)) | (1L << (INTEGER - 72)) | (1L << (DECIMAL - 72)) | (1L << (STRING - 72)) | (1L << (REGEX - 72)) | (1L << (TRUE - 72)) | (1L << (FALSE - 72)) | (1L << (NULL - 72)) | (1L << (TYPE - 72)) | (1L << (ID - 72)))) != 0)) {
{
- setState(392);
+ setState(395);
expression(0);
- setState(397);
+ setState(400);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(393);
+ setState(396);
match(COMMA);
- setState(394);
+ setState(397);
expression(0);
}
}
- setState(399);
+ setState(402);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(403);
- _la = _input.LA(1);
- if (_la==SEMICOLON) {
- {
- setState(402);
- match(SEMICOLON);
- }
- }
-
setState(405);
match(RBRACK);
setState(409);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,33,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,36,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
@@ -2938,7 +2996,7 @@ class PainlessParser extends Parser {
}
setState(411);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,33,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,36,_ctx);
}
}
break;
@@ -2981,12 +3039,12 @@ class PainlessParser extends Parser {
public final ListinitializerContext listinitializer() throws RecognitionException {
ListinitializerContext _localctx = new ListinitializerContext(_ctx, getState());
- enterRule(_localctx, 48, RULE_listinitializer);
+ enterRule(_localctx, 50, RULE_listinitializer);
int _la;
try {
setState(427);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
@@ -3063,12 +3121,12 @@ class PainlessParser extends Parser {
public final MapinitializerContext mapinitializer() throws RecognitionException {
MapinitializerContext _localctx = new MapinitializerContext(_ctx, getState());
- enterRule(_localctx, 50, RULE_mapinitializer);
+ enterRule(_localctx, 52, RULE_mapinitializer);
int _la;
try {
setState(443);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
@@ -3141,7 +3199,7 @@ class PainlessParser extends Parser {
public final MaptokenContext maptoken() throws RecognitionException {
MaptokenContext _localctx = new MaptokenContext(_ctx, getState());
- enterRule(_localctx, 52, RULE_maptoken);
+ enterRule(_localctx, 54, RULE_maptoken);
try {
enterOuterAlt(_localctx, 1);
{
@@ -3190,7 +3248,7 @@ class PainlessParser extends Parser {
public final ArgumentsContext arguments() throws RecognitionException {
ArgumentsContext _localctx = new ArgumentsContext(_ctx, getState());
- enterRule(_localctx, 54, RULE_arguments);
+ enterRule(_localctx, 56, RULE_arguments);
int _la;
try {
enterOuterAlt(_localctx, 1);
@@ -3262,11 +3320,11 @@ class PainlessParser extends Parser {
public final ArgumentContext argument() throws RecognitionException {
ArgumentContext _localctx = new ArgumentContext(_ctx, getState());
- enterRule(_localctx, 56, RULE_argument);
+ enterRule(_localctx, 58, RULE_argument);
try {
setState(465);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,44,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
@@ -3334,7 +3392,7 @@ class PainlessParser extends Parser {
public final LambdaContext lambda() throws RecognitionException {
LambdaContext _localctx = new LambdaContext(_ctx, getState());
- enterRule(_localctx, 58, RULE_lambda);
+ enterRule(_localctx, 60, RULE_lambda);
int _la;
try {
enterOuterAlt(_localctx, 1);
@@ -3453,7 +3511,7 @@ class PainlessParser extends Parser {
public final LamtypeContext lamtype() throws RecognitionException {
LamtypeContext _localctx = new LamtypeContext(_ctx, getState());
- enterRule(_localctx, 60, RULE_lamtype);
+ enterRule(_localctx, 62, RULE_lamtype);
int _la;
try {
enterOuterAlt(_localctx, 1);
@@ -3544,11 +3602,11 @@ class PainlessParser extends Parser {
public final FuncrefContext funcref() throws RecognitionException {
FuncrefContext _localctx = new FuncrefContext(_ctx, getState());
- enterRule(_localctx, 62, RULE_funcref);
+ enterRule(_localctx, 64, RULE_funcref);
try {
setState(505);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) {
case 1:
_localctx = new ClassfuncrefContext(_localctx);
enterOuterAlt(_localctx, 1);
@@ -3612,14 +3670,14 @@ class PainlessParser extends Parser {
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
- case 3:
- return statement_sempred((StatementContext)_localctx, predIndex);
- case 14:
+ case 4:
+ return rstatement_sempred((RstatementContext)_localctx, predIndex);
+ case 15:
return expression_sempred((ExpressionContext)_localctx, predIndex);
}
return true;
}
- private boolean statement_sempred(StatementContext _localctx, int predIndex) {
+ private boolean rstatement_sempred(RstatementContext _localctx, int predIndex) {
switch (predIndex) {
case 0:
return _input.LA(1) != ELSE ;
@@ -3668,196 +3726,195 @@ class PainlessParser extends Parser {
"\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
- "\t!\3\2\7\2D\n\2\f\2\16\2G\13\2\3\2\7\2J\n\2\f\2\16\2M\13\2\3\2\3\2\3"+
- "\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4]\n\4\f\4\16\4`\13\4"+
- "\5\4b\n\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5n\n\5\3\5\3\5\3\5"+
- "\3\5\3\5\3\5\5\5v\n\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5"+
- "\u0083\n\5\3\5\3\5\5\5\u0087\n\5\3\5\3\5\5\5\u008b\n\5\3\5\3\5\3\5\5\5"+
- "\u0090\n\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5"+
- "\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\6\5\u00b1"+
- "\n\5\r\5\16\5\u00b2\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5\u00bc\n\5\3\6\3\6"+
- "\5\6\u00c0\n\6\3\7\3\7\7\7\u00c4\n\7\f\7\16\7\u00c7\13\7\3\7\3\7\3\b\3"+
- "\b\3\t\3\t\5\t\u00cf\n\t\3\n\3\n\3\13\3\13\3\13\3\13\7\13\u00d7\n\13\f"+
- "\13\16\13\u00da\13\13\3\f\3\f\3\f\7\f\u00df\n\f\f\f\16\f\u00e2\13\f\3"+
- "\r\3\r\3\r\5\r\u00e7\n\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u0125\n\20\f\20\16"+
- "\20\u0128\13\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
- "\3\21\3\21\5\21\u0137\n\21\3\22\3\22\7\22\u013b\n\22\f\22\16\22\u013e"+
- "\13\22\3\22\3\22\3\22\7\22\u0143\n\22\f\22\16\22\u0146\13\22\3\22\5\22"+
- "\u0149\n\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23"+
- "\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u015d\n\23\3\24\3\24\3\24\5\24\u0162"+
- "\n\24\3\25\3\25\5\25\u0166\n\25\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\30"+
- "\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\6\31\u0179\n\31\r\31\16"+
- "\31\u017a\3\31\3\31\7\31\u017f\n\31\f\31\16\31\u0182\13\31\5\31\u0184"+
- "\n\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\7\31\u018e\n\31\f\31\16"+
- "\31\u0191\13\31\5\31\u0193\n\31\3\31\5\31\u0196\n\31\3\31\3\31\7\31\u019a"+
- "\n\31\f\31\16\31\u019d\13\31\5\31\u019f\n\31\3\32\3\32\3\32\3\32\7\32"+
- "\u01a5\n\32\f\32\16\32\u01a8\13\32\3\32\3\32\3\32\3\32\5\32\u01ae\n\32"+
- "\3\33\3\33\3\33\3\33\7\33\u01b4\n\33\f\33\16\33\u01b7\13\33\3\33\3\33"+
- "\3\33\3\33\3\33\5\33\u01be\n\33\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35"+
- "\7\35\u01c8\n\35\f\35\16\35\u01cb\13\35\5\35\u01cd\n\35\3\35\3\35\3\36"+
- "\3\36\3\36\5\36\u01d4\n\36\3\37\3\37\3\37\3\37\3\37\7\37\u01db\n\37\f"+
- "\37\16\37\u01de\13\37\5\37\u01e0\n\37\3\37\5\37\u01e3\n\37\3\37\3\37\3"+
- "\37\5\37\u01e8\n\37\3 \5 \u01eb\n \3 \3 \3!\3!\3!\3!\3!\3!\3!\3!\3!\3"+
- "!\3!\3!\3!\5!\u01fc\n!\3!\2\3\36\"\2\4\6\b\n\f\16\20\22\24\26\30\32\34"+
- "\36 \"$&(*,.\60\62\64\668:<>@\2\17\3\3\16\16\3\2 \"\3\2#$\3\2:;\3\2%\'"+
- "\3\2(+\3\2,/\3\2>I\3\2<=\4\2\36\37#$\3\2JM\3\2\13\f\3\2UV\u0237\2E\3\2"+
- "\2\2\4P\3\2\2\2\6U\3\2\2\2\b\u00bb\3\2\2\2\n\u00bf\3\2\2\2\f\u00c1\3\2"+
- "\2\2\16\u00ca\3\2\2\2\20\u00ce\3\2\2\2\22\u00d0\3\2\2\2\24\u00d2\3\2\2"+
- "\2\26\u00db\3\2\2\2\30\u00e3\3\2\2\2\32\u00e8\3\2\2\2\34\u00ef\3\2\2\2"+
- "\36\u00f1\3\2\2\2 \u0136\3\2\2\2\"\u0148\3\2\2\2$\u015c\3\2\2\2&\u0161"+
- "\3\2\2\2(\u0165\3\2\2\2*\u0167\3\2\2\2,\u016b\3\2\2\2.\u016e\3\2\2\2\60"+
- "\u019e\3\2\2\2\62\u01ad\3\2\2\2\64\u01bd\3\2\2\2\66\u01bf\3\2\2\28\u01c3"+
- "\3\2\2\2:\u01d3\3\2\2\2<\u01e2\3\2\2\2>\u01ea\3\2\2\2@\u01fb\3\2\2\2B"+
- "D\5\4\3\2CB\3\2\2\2DG\3\2\2\2EC\3\2\2\2EF\3\2\2\2FK\3\2\2\2GE\3\2\2\2"+
- "HJ\5\b\5\2IH\3\2\2\2JM\3\2\2\2KI\3\2\2\2KL\3\2\2\2LN\3\2\2\2MK\3\2\2\2"+
- "NO\7\2\2\3O\3\3\2\2\2PQ\5\26\f\2QR\7T\2\2RS\5\6\4\2ST\5\f\7\2T\5\3\2\2"+
- "\2Ua\7\t\2\2VW\5\26\f\2W^\7T\2\2XY\7\r\2\2YZ\5\26\f\2Z[\7T\2\2[]\3\2\2"+
- "\2\\X\3\2\2\2]`\3\2\2\2^\\\3\2\2\2^_\3\2\2\2_b\3\2\2\2`^\3\2\2\2aV\3\2"+
- "\2\2ab\3\2\2\2bc\3\2\2\2cd\7\n\2\2d\7\3\2\2\2ef\7\17\2\2fg\7\t\2\2gh\5"+
- "\36\20\2hi\7\n\2\2im\5\n\6\2jk\7\21\2\2kn\5\n\6\2ln\6\5\2\2mj\3\2\2\2"+
- "ml\3\2\2\2n\u00bc\3\2\2\2op\7\22\2\2pq\7\t\2\2qr\5\36\20\2ru\7\n\2\2s"+
- "v\5\n\6\2tv\5\16\b\2us\3\2\2\2ut\3\2\2\2v\u00bc\3\2\2\2wx\7\23\2\2xy\5"+
- "\f\7\2yz\7\22\2\2z{\7\t\2\2{|\5\36\20\2|}\7\n\2\2}~\5\34\17\2~\u00bc\3"+
- "\2\2\2\177\u0080\7\24\2\2\u0080\u0082\7\t\2\2\u0081\u0083\5\20\t\2\u0082"+
- "\u0081\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084\3\2\2\2\u0084\u0086\7\16"+
- "\2\2\u0085\u0087\5\36\20\2\u0086\u0085\3\2\2\2\u0086\u0087\3\2\2\2\u0087"+
- "\u0088\3\2\2\2\u0088\u008a\7\16\2\2\u0089\u008b\5\22\n\2\u008a\u0089\3"+
- "\2\2\2\u008a\u008b\3\2\2\2\u008b\u008c\3\2\2\2\u008c\u008f\7\n\2\2\u008d"+
- "\u0090\5\n\6\2\u008e\u0090\5\16\b\2\u008f\u008d\3\2\2\2\u008f\u008e\3"+
- "\2\2\2\u0090\u00bc\3\2\2\2\u0091\u0092\7\24\2\2\u0092\u0093\7\t\2\2\u0093"+
- "\u0094\5\26\f\2\u0094\u0095\7T\2\2\u0095\u0096\7\66\2\2\u0096\u0097\5"+
- "\36\20\2\u0097\u0098\7\n\2\2\u0098\u0099\5\n\6\2\u0099\u00bc\3\2\2\2\u009a"+
- "\u009b\7\24\2\2\u009b\u009c\7\t\2\2\u009c\u009d\7T\2\2\u009d\u009e\7\20"+
- "\2\2\u009e\u009f\5\36\20\2\u009f\u00a0\7\n\2\2\u00a0\u00a1\5\n\6\2\u00a1"+
- "\u00bc\3\2\2\2\u00a2\u00a3\5\24\13\2\u00a3\u00a4\5\34\17\2\u00a4\u00bc"+
- "\3\2\2\2\u00a5\u00a6\7\25\2\2\u00a6\u00bc\5\34\17\2\u00a7\u00a8\7\26\2"+
- "\2\u00a8\u00bc\5\34\17\2\u00a9\u00aa\7\27\2\2\u00aa\u00ab\5\36\20\2\u00ab"+
- "\u00ac\5\34\17\2\u00ac\u00bc\3\2\2\2\u00ad\u00ae\7\31\2\2\u00ae\u00b0"+
- "\5\f\7\2\u00af\u00b1\5\32\16\2\u00b0\u00af\3\2\2\2\u00b1\u00b2\3\2\2\2"+
- "\u00b2\u00b0\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b3\u00bc\3\2\2\2\u00b4\u00b5"+
- "\7\33\2\2\u00b5\u00b6\5\36\20\2\u00b6\u00b7\5\34\17\2\u00b7\u00bc\3\2"+
- "\2\2\u00b8\u00b9\5\36\20\2\u00b9\u00ba\5\34\17\2\u00ba\u00bc\3\2\2\2\u00bb"+
- "e\3\2\2\2\u00bbo\3\2\2\2\u00bbw\3\2\2\2\u00bb\177\3\2\2\2\u00bb\u0091"+
- "\3\2\2\2\u00bb\u009a\3\2\2\2\u00bb\u00a2\3\2\2\2\u00bb\u00a5\3\2\2\2\u00bb"+
- "\u00a7\3\2\2\2\u00bb\u00a9\3\2\2\2\u00bb\u00ad\3\2\2\2\u00bb\u00b4\3\2"+
- "\2\2\u00bb\u00b8\3\2\2\2\u00bc\t\3\2\2\2\u00bd\u00c0\5\f\7\2\u00be\u00c0"+
- "\5\b\5\2\u00bf\u00bd\3\2\2\2\u00bf\u00be\3\2\2\2\u00c0\13\3\2\2\2\u00c1"+
- "\u00c5\7\5\2\2\u00c2\u00c4\5\b\5\2\u00c3\u00c2\3\2\2\2\u00c4\u00c7\3\2"+
- "\2\2\u00c5\u00c3\3\2\2\2\u00c5\u00c6\3\2\2\2\u00c6\u00c8\3\2\2\2\u00c7"+
- "\u00c5\3\2\2\2\u00c8\u00c9\7\6\2\2\u00c9\r\3\2\2\2\u00ca\u00cb\7\16\2"+
- "\2\u00cb\17\3\2\2\2\u00cc\u00cf\5\24\13\2\u00cd\u00cf\5\36\20\2\u00ce"+
- "\u00cc\3\2\2\2\u00ce\u00cd\3\2\2\2\u00cf\21\3\2\2\2\u00d0\u00d1\5\36\20"+
- "\2\u00d1\23\3\2\2\2\u00d2\u00d3\5\26\f\2\u00d3\u00d8\5\30\r\2\u00d4\u00d5"+
- "\7\r\2\2\u00d5\u00d7\5\30\r\2\u00d6\u00d4\3\2\2\2\u00d7\u00da\3\2\2\2"+
- "\u00d8\u00d6\3\2\2\2\u00d8\u00d9\3\2\2\2\u00d9\25\3\2\2\2\u00da\u00d8"+
- "\3\2\2\2\u00db\u00e0\7S\2\2\u00dc\u00dd\7\7\2\2\u00dd\u00df\7\b\2\2\u00de"+
- "\u00dc\3\2\2\2\u00df\u00e2\3\2\2\2\u00e0\u00de\3\2\2\2\u00e0\u00e1\3\2"+
- "\2\2\u00e1\27\3\2\2\2\u00e2\u00e0\3\2\2\2\u00e3\u00e6\7T\2\2\u00e4\u00e5"+
- "\7>\2\2\u00e5\u00e7\5\36\20\2\u00e6\u00e4\3\2\2\2\u00e6\u00e7\3\2\2\2"+
- "\u00e7\31\3\2\2\2\u00e8\u00e9\7\32\2\2\u00e9\u00ea\7\t\2\2\u00ea\u00eb"+
- "\7S\2\2\u00eb\u00ec\7T\2\2\u00ec\u00ed\7\n\2\2\u00ed\u00ee\5\f\7\2\u00ee"+
- "\33\3\2\2\2\u00ef\u00f0\t\2\2\2\u00f0\35\3\2\2\2\u00f1\u00f2\b\20\1\2"+
- "\u00f2\u00f3\5 \21\2\u00f3\u0126\3\2\2\2\u00f4\u00f5\f\21\2\2\u00f5\u00f6"+
- "\t\3\2\2\u00f6\u0125\5\36\20\22\u00f7\u00f8\f\20\2\2\u00f8\u00f9\t\4\2"+
- "\2\u00f9\u0125\5\36\20\21\u00fa\u00fb\f\17\2\2\u00fb\u00fc\t\5\2\2\u00fc"+
- "\u0125\5\36\20\20\u00fd\u00fe\f\16\2\2\u00fe\u00ff\t\6\2\2\u00ff\u0125"+
- "\5\36\20\17\u0100\u0101\f\r\2\2\u0101\u0102\t\7\2\2\u0102\u0125\5\36\20"+
- "\16\u0103\u0104\f\13\2\2\u0104\u0105\t\b\2\2\u0105\u0125\5\36\20\f\u0106"+
- "\u0107\f\n\2\2\u0107\u0108\7\60\2\2\u0108\u0125\5\36\20\13\u0109\u010a"+
- "\f\t\2\2\u010a\u010b\7\61\2\2\u010b\u0125\5\36\20\n\u010c\u010d\f\b\2"+
- "\2\u010d\u010e\7\62\2\2\u010e\u0125\5\36\20\t\u010f\u0110\f\7\2\2\u0110"+
- "\u0111\7\63\2\2\u0111\u0125\5\36\20\b\u0112\u0113\f\6\2\2\u0113\u0114"+
- "\7\64\2\2\u0114\u0125\5\36\20\7\u0115\u0116\f\5\2\2\u0116\u0117\7\65\2"+
- "\2\u0117\u0118\5\36\20\2\u0118\u0119\7\66\2\2\u0119\u011a\5\36\20\5\u011a"+
- "\u0125\3\2\2\2\u011b\u011c\f\4\2\2\u011c\u011d\7\67\2\2\u011d\u0125\5"+
- "\36\20\4\u011e\u011f\f\3\2\2\u011f\u0120\t\t\2\2\u0120\u0125\5\36\20\3"+
- "\u0121\u0122\f\f\2\2\u0122\u0123\7\35\2\2\u0123\u0125\5\26\f\2\u0124\u00f4"+
- "\3\2\2\2\u0124\u00f7\3\2\2\2\u0124\u00fa\3\2\2\2\u0124\u00fd\3\2\2\2\u0124"+
- "\u0100\3\2\2\2\u0124\u0103\3\2\2\2\u0124\u0106\3\2\2\2\u0124\u0109\3\2"+
- "\2\2\u0124\u010c\3\2\2\2\u0124\u010f\3\2\2\2\u0124\u0112\3\2\2\2\u0124"+
- "\u0115\3\2\2\2\u0124\u011b\3\2\2\2\u0124\u011e\3\2\2\2\u0124\u0121\3\2"+
- "\2\2\u0125\u0128\3\2\2\2\u0126\u0124\3\2\2\2\u0126\u0127\3\2\2\2\u0127"+
- "\37\3\2\2\2\u0128\u0126\3\2\2\2\u0129\u012a\t\n\2\2\u012a\u0137\5\"\22"+
- "\2\u012b\u012c\5\"\22\2\u012c\u012d\t\n\2\2\u012d\u0137\3\2\2\2\u012e"+
- "\u0137\5\"\22\2\u012f\u0130\t\13\2\2\u0130\u0137\5 \21\2\u0131\u0132\7"+
- "\t\2\2\u0132\u0133\5\26\f\2\u0133\u0134\7\n\2\2\u0134\u0135\5 \21\2\u0135"+
- "\u0137\3\2\2\2\u0136\u0129\3\2\2\2\u0136\u012b\3\2\2\2\u0136\u012e\3\2"+
- "\2\2\u0136\u012f\3\2\2\2\u0136\u0131\3\2\2\2\u0137!\3\2\2\2\u0138\u013c"+
- "\5$\23\2\u0139\u013b\5&\24\2\u013a\u0139\3\2\2\2\u013b\u013e\3\2\2\2\u013c"+
- "\u013a\3\2\2\2\u013c\u013d\3\2\2\2\u013d\u0149\3\2\2\2\u013e\u013c\3\2"+
- "\2\2\u013f\u0140\5\26\f\2\u0140\u0144\5(\25\2\u0141\u0143\5&\24\2\u0142"+
- "\u0141\3\2\2\2\u0143\u0146\3\2\2\2\u0144\u0142\3\2\2\2\u0144\u0145\3\2"+
- "\2\2\u0145\u0149\3\2\2\2\u0146\u0144\3\2\2\2\u0147\u0149\5\60\31\2\u0148"+
- "\u0138\3\2\2\2\u0148\u013f\3\2\2\2\u0148\u0147\3\2\2\2\u0149#\3\2\2\2"+
- "\u014a\u014b\7\t\2\2\u014b\u014c\5\36\20\2\u014c\u014d\7\n\2\2\u014d\u015d"+
- "\3\2\2\2\u014e\u015d\t\f\2\2\u014f\u015d\7P\2\2\u0150\u015d\7Q\2\2\u0151"+
- "\u015d\7R\2\2\u0152\u015d\7N\2\2\u0153\u015d\7O\2\2\u0154\u015d\5\62\32"+
- "\2\u0155\u015d\5\64\33\2\u0156\u015d\7T\2\2\u0157\u0158\7T\2\2\u0158\u015d"+
- "\58\35\2\u0159\u015a\7\30\2\2\u015a\u015b\7S\2\2\u015b\u015d\58\35\2\u015c"+
- "\u014a\3\2\2\2\u015c\u014e\3\2\2\2\u015c\u014f\3\2\2\2\u015c\u0150\3\2"+
- "\2\2\u015c\u0151\3\2\2\2\u015c\u0152\3\2\2\2\u015c\u0153\3\2\2\2\u015c"+
- "\u0154\3\2\2\2\u015c\u0155\3\2\2\2\u015c\u0156\3\2\2\2\u015c\u0157\3\2"+
- "\2\2\u015c\u0159\3\2\2\2\u015d%\3\2\2\2\u015e\u0162\5*\26\2\u015f\u0162"+
- "\5,\27\2\u0160\u0162\5.\30\2\u0161\u015e\3\2\2\2\u0161\u015f\3\2\2\2\u0161"+
- "\u0160\3\2\2\2\u0162\'\3\2\2\2\u0163\u0166\5*\26\2\u0164\u0166\5,\27\2"+
- "\u0165\u0163\3\2\2\2\u0165\u0164\3\2\2\2\u0166)\3\2\2\2\u0167\u0168\t"+
- "\r\2\2\u0168\u0169\7V\2\2\u0169\u016a\58\35\2\u016a+\3\2\2\2\u016b\u016c"+
- "\t\r\2\2\u016c\u016d\t\16\2\2\u016d-\3\2\2\2\u016e\u016f\7\7\2\2\u016f"+
- "\u0170\5\36\20\2\u0170\u0171\7\b\2\2\u0171/\3\2\2\2\u0172\u0173\7\30\2"+
- "\2\u0173\u0178\7S\2\2\u0174\u0175\7\7\2\2\u0175\u0176\5\36\20\2\u0176"+
- "\u0177\7\b\2\2\u0177\u0179\3\2\2\2\u0178\u0174\3\2\2\2\u0179\u017a\3\2"+
- "\2\2\u017a\u0178\3\2\2\2\u017a\u017b\3\2\2\2\u017b\u0183\3\2\2\2\u017c"+
- "\u0180\5(\25\2\u017d\u017f\5&\24\2\u017e\u017d\3\2\2\2\u017f\u0182\3\2"+
- "\2\2\u0180\u017e\3\2\2\2\u0180\u0181\3\2\2\2\u0181\u0184\3\2\2\2\u0182"+
- "\u0180\3\2\2\2\u0183\u017c\3\2\2\2\u0183\u0184\3\2\2\2\u0184\u019f\3\2"+
- "\2\2\u0185\u0186\7\30\2\2\u0186\u0187\7S\2\2\u0187\u0188\7\7\2\2\u0188"+
- "\u0189\7\b\2\2\u0189\u0192\7\5\2\2\u018a\u018f\5\36\20\2\u018b\u018c\7"+
- "\r\2\2\u018c\u018e\5\36\20\2\u018d\u018b\3\2\2\2\u018e\u0191\3\2\2\2\u018f"+
- "\u018d\3\2\2\2\u018f\u0190\3\2\2\2\u0190\u0193\3\2\2\2\u0191\u018f\3\2"+
- "\2\2\u0192\u018a\3\2\2\2\u0192\u0193\3\2\2\2\u0193\u0195\3\2\2\2\u0194"+
- "\u0196\7\16\2\2\u0195\u0194\3\2\2\2\u0195\u0196\3\2\2\2\u0196\u0197\3"+
- "\2\2\2\u0197\u019b\7\6\2\2\u0198\u019a\5&\24\2\u0199\u0198\3\2\2\2\u019a"+
+ "\t!\4\"\t\"\3\2\7\2F\n\2\f\2\16\2I\13\2\3\2\7\2L\n\2\f\2\16\2O\13\2\3"+
+ "\2\5\2R\n\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7"+
+ "\4b\n\4\f\4\16\4e\13\4\5\4g\n\4\3\4\3\4\3\5\3\5\3\5\3\5\5\5o\n\5\3\6\3"+
+ "\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6y\n\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6\u0081"+
+ "\n\6\3\6\3\6\3\6\5\6\u0086\n\6\3\6\3\6\5\6\u008a\n\6\3\6\3\6\5\6\u008e"+
+ "\n\6\3\6\3\6\3\6\5\6\u0093\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6"+
+ "\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\6\6\u00a9\n\6\r\6\16\6\u00aa"+
+ "\5\6\u00ad\n\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7"+
+ "\3\7\5\7\u00be\n\7\3\b\3\b\5\b\u00c2\n\b\3\t\3\t\7\t\u00c6\n\t\f\t\16"+
+ "\t\u00c9\13\t\3\t\5\t\u00cc\n\t\3\t\3\t\3\n\3\n\3\13\3\13\5\13\u00d4\n"+
+ "\13\3\f\3\f\3\r\3\r\3\r\3\r\7\r\u00dc\n\r\f\r\16\r\u00df\13\r\3\16\3\16"+
+ "\3\16\7\16\u00e4\n\16\f\16\16\16\u00e7\13\16\3\17\3\17\3\17\5\17\u00ec"+
+ "\n\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21"+
+ "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
+ "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
+ "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
+ "\3\21\3\21\3\21\7\21\u0128\n\21\f\21\16\21\u012b\13\21\3\22\3\22\3\22"+
+ "\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u013a\n\22\3\23"+
+ "\3\23\7\23\u013e\n\23\f\23\16\23\u0141\13\23\3\23\3\23\3\23\7\23\u0146"+
+ "\n\23\f\23\16\23\u0149\13\23\3\23\5\23\u014c\n\23\3\24\3\24\3\24\3\24"+
+ "\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24"+
+ "\5\24\u0160\n\24\3\25\3\25\3\25\5\25\u0165\n\25\3\26\3\26\5\26\u0169\n"+
+ "\26\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3"+
+ "\32\3\32\3\32\3\32\6\32\u017c\n\32\r\32\16\32\u017d\3\32\3\32\7\32\u0182"+
+ "\n\32\f\32\16\32\u0185\13\32\5\32\u0187\n\32\3\32\3\32\3\32\3\32\3\32"+
+ "\3\32\3\32\3\32\7\32\u0191\n\32\f\32\16\32\u0194\13\32\5\32\u0196\n\32"+
+ "\3\32\3\32\7\32\u019a\n\32\f\32\16\32\u019d\13\32\5\32\u019f\n\32\3\33"+
+ "\3\33\3\33\3\33\7\33\u01a5\n\33\f\33\16\33\u01a8\13\33\3\33\3\33\3\33"+
+ "\3\33\5\33\u01ae\n\33\3\34\3\34\3\34\3\34\7\34\u01b4\n\34\f\34\16\34\u01b7"+
+ "\13\34\3\34\3\34\3\34\3\34\3\34\5\34\u01be\n\34\3\35\3\35\3\35\3\35\3"+
+ "\36\3\36\3\36\3\36\7\36\u01c8\n\36\f\36\16\36\u01cb\13\36\5\36\u01cd\n"+
+ "\36\3\36\3\36\3\37\3\37\3\37\5\37\u01d4\n\37\3 \3 \3 \3 \3 \7 \u01db\n"+
+ " \f \16 \u01de\13 \5 \u01e0\n \3 \5 \u01e3\n \3 \3 \3 \5 \u01e8\n \3!"+
+ "\5!\u01eb\n!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\""+
+ "\5\"\u01fc\n\"\3\"\2\3 #\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&("+
+ "*,.\60\62\64\668:<>@B\2\16\3\2 \"\3\2#$\3\2:;\3\2%\'\3\2(+\3\2,/\3\2>"+
+ "I\3\2<=\4\2\36\37#$\3\2JM\3\2\13\f\3\2UV\u0237\2G\3\2\2\2\4U\3\2\2\2\6"+
+ "Z\3\2\2\2\bn\3\2\2\2\n\u00ac\3\2\2\2\f\u00bd\3\2\2\2\16\u00c1\3\2\2\2"+
+ "\20\u00c3\3\2\2\2\22\u00cf\3\2\2\2\24\u00d3\3\2\2\2\26\u00d5\3\2\2\2\30"+
+ "\u00d7\3\2\2\2\32\u00e0\3\2\2\2\34\u00e8\3\2\2\2\36\u00ed\3\2\2\2 \u00f4"+
+ "\3\2\2\2\"\u0139\3\2\2\2$\u014b\3\2\2\2&\u015f\3\2\2\2(\u0164\3\2\2\2"+
+ "*\u0168\3\2\2\2,\u016a\3\2\2\2.\u016e\3\2\2\2\60\u0171\3\2\2\2\62\u019e"+
+ "\3\2\2\2\64\u01ad\3\2\2\2\66\u01bd\3\2\2\28\u01bf\3\2\2\2:\u01c3\3\2\2"+
+ "\2<\u01d3\3\2\2\2>\u01e2\3\2\2\2@\u01ea\3\2\2\2B\u01fb\3\2\2\2DF\5\4\3"+
+ "\2ED\3\2\2\2FI\3\2\2\2GE\3\2\2\2GH\3\2\2\2HM\3\2\2\2IG\3\2\2\2JL\5\b\5"+
+ "\2KJ\3\2\2\2LO\3\2\2\2MK\3\2\2\2MN\3\2\2\2NQ\3\2\2\2OM\3\2\2\2PR\5\f\7"+
+ "\2QP\3\2\2\2QR\3\2\2\2RS\3\2\2\2ST\7\2\2\3T\3\3\2\2\2UV\5\32\16\2VW\7"+
+ "T\2\2WX\5\6\4\2XY\5\20\t\2Y\5\3\2\2\2Zf\7\t\2\2[\\\5\32\16\2\\c\7T\2\2"+
+ "]^\7\r\2\2^_\5\32\16\2_`\7T\2\2`b\3\2\2\2a]\3\2\2\2be\3\2\2\2ca\3\2\2"+
+ "\2cd\3\2\2\2dg\3\2\2\2ec\3\2\2\2f[\3\2\2\2fg\3\2\2\2gh\3\2\2\2hi\7\n\2"+
+ "\2i\7\3\2\2\2jo\5\n\6\2kl\5\f\7\2lm\7\16\2\2mo\3\2\2\2nj\3\2\2\2nk\3\2"+
+ "\2\2o\t\3\2\2\2pq\7\17\2\2qr\7\t\2\2rs\5 \21\2st\7\n\2\2tx\5\16\b\2uv"+
+ "\7\21\2\2vy\5\16\b\2wy\6\6\2\2xu\3\2\2\2xw\3\2\2\2y\u00ad\3\2\2\2z{\7"+
+ "\22\2\2{|\7\t\2\2|}\5 \21\2}\u0080\7\n\2\2~\u0081\5\16\b\2\177\u0081\5"+
+ "\22\n\2\u0080~\3\2\2\2\u0080\177\3\2\2\2\u0081\u00ad\3\2\2\2\u0082\u0083"+
+ "\7\24\2\2\u0083\u0085\7\t\2\2\u0084\u0086\5\24\13\2\u0085\u0084\3\2\2"+
+ "\2\u0085\u0086\3\2\2\2\u0086\u0087\3\2\2\2\u0087\u0089\7\16\2\2\u0088"+
+ "\u008a\5 \21\2\u0089\u0088\3\2\2\2\u0089\u008a\3\2\2\2\u008a\u008b\3\2"+
+ "\2\2\u008b\u008d\7\16\2\2\u008c\u008e\5\26\f\2\u008d\u008c\3\2\2\2\u008d"+
+ "\u008e\3\2\2\2\u008e\u008f\3\2\2\2\u008f\u0092\7\n\2\2\u0090\u0093\5\16"+
+ "\b\2\u0091\u0093\5\22\n\2\u0092\u0090\3\2\2\2\u0092\u0091\3\2\2\2\u0093"+
+ "\u00ad\3\2\2\2\u0094\u0095\7\24\2\2\u0095\u0096\7\t\2\2\u0096\u0097\5"+
+ "\32\16\2\u0097\u0098\7T\2\2\u0098\u0099\7\66\2\2\u0099\u009a\5 \21\2\u009a"+
+ "\u009b\7\n\2\2\u009b\u009c\5\16\b\2\u009c\u00ad\3\2\2\2\u009d\u009e\7"+
+ "\24\2\2\u009e\u009f\7\t\2\2\u009f\u00a0\7T\2\2\u00a0\u00a1\7\20\2\2\u00a1"+
+ "\u00a2\5 \21\2\u00a2\u00a3\7\n\2\2\u00a3\u00a4\5\16\b\2\u00a4\u00ad\3"+
+ "\2\2\2\u00a5\u00a6\7\31\2\2\u00a6\u00a8\5\20\t\2\u00a7\u00a9\5\36\20\2"+
+ "\u00a8\u00a7\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00a8\3\2\2\2\u00aa\u00ab"+
+ "\3\2\2\2\u00ab\u00ad\3\2\2\2\u00acp\3\2\2\2\u00acz\3\2\2\2\u00ac\u0082"+
+ "\3\2\2\2\u00ac\u0094\3\2\2\2\u00ac\u009d\3\2\2\2\u00ac\u00a5\3\2\2\2\u00ad"+
+ "\13\3\2\2\2\u00ae\u00af\7\23\2\2\u00af\u00b0\5\20\t\2\u00b0\u00b1\7\22"+
+ "\2\2\u00b1\u00b2\7\t\2\2\u00b2\u00b3\5 \21\2\u00b3\u00b4\7\n\2\2\u00b4"+
+ "\u00be\3\2\2\2\u00b5\u00be\5\30\r\2\u00b6\u00be\7\25\2\2\u00b7\u00be\7"+
+ "\26\2\2\u00b8\u00b9\7\27\2\2\u00b9\u00be\5 \21\2\u00ba\u00bb\7\33\2\2"+
+ "\u00bb\u00be\5 \21\2\u00bc\u00be\5 \21\2\u00bd\u00ae\3\2\2\2\u00bd\u00b5"+
+ "\3\2\2\2\u00bd\u00b6\3\2\2\2\u00bd\u00b7\3\2\2\2\u00bd\u00b8\3\2\2\2\u00bd"+
+ "\u00ba\3\2\2\2\u00bd\u00bc\3\2\2\2\u00be\r\3\2\2\2\u00bf\u00c2\5\20\t"+
+ "\2\u00c0\u00c2\5\b\5\2\u00c1\u00bf\3\2\2\2\u00c1\u00c0\3\2\2\2\u00c2\17"+
+ "\3\2\2\2\u00c3\u00c7\7\5\2\2\u00c4\u00c6\5\b\5\2\u00c5\u00c4\3\2\2\2\u00c6"+
+ "\u00c9\3\2\2\2\u00c7\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00cb\3\2"+
+ "\2\2\u00c9\u00c7\3\2\2\2\u00ca\u00cc\5\f\7\2\u00cb\u00ca\3\2\2\2\u00cb"+
+ "\u00cc\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00ce\7\6\2\2\u00ce\21\3\2\2"+
+ "\2\u00cf\u00d0\7\16\2\2\u00d0\23\3\2\2\2\u00d1\u00d4\5\30\r\2\u00d2\u00d4"+
+ "\5 \21\2\u00d3\u00d1\3\2\2\2\u00d3\u00d2\3\2\2\2\u00d4\25\3\2\2\2\u00d5"+
+ "\u00d6\5 \21\2\u00d6\27\3\2\2\2\u00d7\u00d8\5\32\16\2\u00d8\u00dd\5\34"+
+ "\17\2\u00d9\u00da\7\r\2\2\u00da\u00dc\5\34\17\2\u00db\u00d9\3\2\2\2\u00dc"+
+ "\u00df\3\2\2\2\u00dd\u00db\3\2\2\2\u00dd\u00de\3\2\2\2\u00de\31\3\2\2"+
+ "\2\u00df\u00dd\3\2\2\2\u00e0\u00e5\7S\2\2\u00e1\u00e2\7\7\2\2\u00e2\u00e4"+
+ "\7\b\2\2\u00e3\u00e1\3\2\2\2\u00e4\u00e7\3\2\2\2\u00e5\u00e3\3\2\2\2\u00e5"+
+ "\u00e6\3\2\2\2\u00e6\33\3\2\2\2\u00e7\u00e5\3\2\2\2\u00e8\u00eb\7T\2\2"+
+ "\u00e9\u00ea\7>\2\2\u00ea\u00ec\5 \21\2\u00eb\u00e9\3\2\2\2\u00eb\u00ec"+
+ "\3\2\2\2\u00ec\35\3\2\2\2\u00ed\u00ee\7\32\2\2\u00ee\u00ef\7\t\2\2\u00ef"+
+ "\u00f0\7S\2\2\u00f0\u00f1\7T\2\2\u00f1\u00f2\7\n\2\2\u00f2\u00f3\5\20"+
+ "\t\2\u00f3\37\3\2\2\2\u00f4\u00f5\b\21\1\2\u00f5\u00f6\5\"\22\2\u00f6"+
+ "\u0129\3\2\2\2\u00f7\u00f8\f\21\2\2\u00f8\u00f9\t\2\2\2\u00f9\u0128\5"+
+ " \21\22\u00fa\u00fb\f\20\2\2\u00fb\u00fc\t\3\2\2\u00fc\u0128\5 \21\21"+
+ "\u00fd\u00fe\f\17\2\2\u00fe\u00ff\t\4\2\2\u00ff\u0128\5 \21\20\u0100\u0101"+
+ "\f\16\2\2\u0101\u0102\t\5\2\2\u0102\u0128\5 \21\17\u0103\u0104\f\r\2\2"+
+ "\u0104\u0105\t\6\2\2\u0105\u0128\5 \21\16\u0106\u0107\f\13\2\2\u0107\u0108"+
+ "\t\7\2\2\u0108\u0128\5 \21\f\u0109\u010a\f\n\2\2\u010a\u010b\7\60\2\2"+
+ "\u010b\u0128\5 \21\13\u010c\u010d\f\t\2\2\u010d\u010e\7\61\2\2\u010e\u0128"+
+ "\5 \21\n\u010f\u0110\f\b\2\2\u0110\u0111\7\62\2\2\u0111\u0128\5 \21\t"+
+ "\u0112\u0113\f\7\2\2\u0113\u0114\7\63\2\2\u0114\u0128\5 \21\b\u0115\u0116"+
+ "\f\6\2\2\u0116\u0117\7\64\2\2\u0117\u0128\5 \21\7\u0118\u0119\f\5\2\2"+
+ "\u0119\u011a\7\65\2\2\u011a\u011b\5 \21\2\u011b\u011c\7\66\2\2\u011c\u011d"+
+ "\5 \21\5\u011d\u0128\3\2\2\2\u011e\u011f\f\4\2\2\u011f\u0120\7\67\2\2"+
+ "\u0120\u0128\5 \21\4\u0121\u0122\f\3\2\2\u0122\u0123\t\b\2\2\u0123\u0128"+
+ "\5 \21\3\u0124\u0125\f\f\2\2\u0125\u0126\7\35\2\2\u0126\u0128\5\32\16"+
+ "\2\u0127\u00f7\3\2\2\2\u0127\u00fa\3\2\2\2\u0127\u00fd\3\2\2\2\u0127\u0100"+
+ "\3\2\2\2\u0127\u0103\3\2\2\2\u0127\u0106\3\2\2\2\u0127\u0109\3\2\2\2\u0127"+
+ "\u010c\3\2\2\2\u0127\u010f\3\2\2\2\u0127\u0112\3\2\2\2\u0127\u0115\3\2"+
+ "\2\2\u0127\u0118\3\2\2\2\u0127\u011e\3\2\2\2\u0127\u0121\3\2\2\2\u0127"+
+ "\u0124\3\2\2\2\u0128\u012b\3\2\2\2\u0129\u0127\3\2\2\2\u0129\u012a\3\2"+
+ "\2\2\u012a!\3\2\2\2\u012b\u0129\3\2\2\2\u012c\u012d\t\t\2\2\u012d\u013a"+
+ "\5$\23\2\u012e\u012f\5$\23\2\u012f\u0130\t\t\2\2\u0130\u013a\3\2\2\2\u0131"+
+ "\u013a\5$\23\2\u0132\u0133\t\n\2\2\u0133\u013a\5\"\22\2\u0134\u0135\7"+
+ "\t\2\2\u0135\u0136\5\32\16\2\u0136\u0137\7\n\2\2\u0137\u0138\5\"\22\2"+
+ "\u0138\u013a\3\2\2\2\u0139\u012c\3\2\2\2\u0139\u012e\3\2\2\2\u0139\u0131"+
+ "\3\2\2\2\u0139\u0132\3\2\2\2\u0139\u0134\3\2\2\2\u013a#\3\2\2\2\u013b"+
+ "\u013f\5&\24\2\u013c\u013e\5(\25\2\u013d\u013c\3\2\2\2\u013e\u0141\3\2"+
+ "\2\2\u013f\u013d\3\2\2\2\u013f\u0140\3\2\2\2\u0140\u014c\3\2\2\2\u0141"+
+ "\u013f\3\2\2\2\u0142\u0143\5\32\16\2\u0143\u0147\5*\26\2\u0144\u0146\5"+
+ "(\25\2\u0145\u0144\3\2\2\2\u0146\u0149\3\2\2\2\u0147\u0145\3\2\2\2\u0147"+
+ "\u0148\3\2\2\2\u0148\u014c\3\2\2\2\u0149\u0147\3\2\2\2\u014a\u014c\5\62"+
+ "\32\2\u014b\u013b\3\2\2\2\u014b\u0142\3\2\2\2\u014b\u014a\3\2\2\2\u014c"+
+ "%\3\2\2\2\u014d\u014e\7\t\2\2\u014e\u014f\5 \21\2\u014f\u0150\7\n\2\2"+
+ "\u0150\u0160\3\2\2\2\u0151\u0160\t\13\2\2\u0152\u0160\7P\2\2\u0153\u0160"+
+ "\7Q\2\2\u0154\u0160\7R\2\2\u0155\u0160\7N\2\2\u0156\u0160\7O\2\2\u0157"+
+ "\u0160\5\64\33\2\u0158\u0160\5\66\34\2\u0159\u0160\7T\2\2\u015a\u015b"+
+ "\7T\2\2\u015b\u0160\5:\36\2\u015c\u015d\7\30\2\2\u015d\u015e\7S\2\2\u015e"+
+ "\u0160\5:\36\2\u015f\u014d\3\2\2\2\u015f\u0151\3\2\2\2\u015f\u0152\3\2"+
+ "\2\2\u015f\u0153\3\2\2\2\u015f\u0154\3\2\2\2\u015f\u0155\3\2\2\2\u015f"+
+ "\u0156\3\2\2\2\u015f\u0157\3\2\2\2\u015f\u0158\3\2\2\2\u015f\u0159\3\2"+
+ "\2\2\u015f\u015a\3\2\2\2\u015f\u015c\3\2\2\2\u0160\'\3\2\2\2\u0161\u0165"+
+ "\5,\27\2\u0162\u0165\5.\30\2\u0163\u0165\5\60\31\2\u0164\u0161\3\2\2\2"+
+ "\u0164\u0162\3\2\2\2\u0164\u0163\3\2\2\2\u0165)\3\2\2\2\u0166\u0169\5"+
+ ",\27\2\u0167\u0169\5.\30\2\u0168\u0166\3\2\2\2\u0168\u0167\3\2\2\2\u0169"+
+ "+\3\2\2\2\u016a\u016b\t\f\2\2\u016b\u016c\7V\2\2\u016c\u016d\5:\36\2\u016d"+
+ "-\3\2\2\2\u016e\u016f\t\f\2\2\u016f\u0170\t\r\2\2\u0170/\3\2\2\2\u0171"+
+ "\u0172\7\7\2\2\u0172\u0173\5 \21\2\u0173\u0174\7\b\2\2\u0174\61\3\2\2"+
+ "\2\u0175\u0176\7\30\2\2\u0176\u017b\7S\2\2\u0177\u0178\7\7\2\2\u0178\u0179"+
+ "\5 \21\2\u0179\u017a\7\b\2\2\u017a\u017c\3\2\2\2\u017b\u0177\3\2\2\2\u017c"+
+ "\u017d\3\2\2\2\u017d\u017b\3\2\2\2\u017d\u017e\3\2\2\2\u017e\u0186\3\2"+
+ "\2\2\u017f\u0183\5*\26\2\u0180\u0182\5(\25\2\u0181\u0180\3\2\2\2\u0182"+
+ "\u0185\3\2\2\2\u0183\u0181\3\2\2\2\u0183\u0184\3\2\2\2\u0184\u0187\3\2"+
+ "\2\2\u0185\u0183\3\2\2\2\u0186\u017f\3\2\2\2\u0186\u0187\3\2\2\2\u0187"+
+ "\u019f\3\2\2\2\u0188\u0189\7\30\2\2\u0189\u018a\7S\2\2\u018a\u018b\7\7"+
+ "\2\2\u018b\u018c\7\b\2\2\u018c\u0195\7\5\2\2\u018d\u0192\5 \21\2\u018e"+
+ "\u018f\7\r\2\2\u018f\u0191\5 \21\2\u0190\u018e\3\2\2\2\u0191\u0194\3\2"+
+ "\2\2\u0192\u0190\3\2\2\2\u0192\u0193\3\2\2\2\u0193\u0196\3\2\2\2\u0194"+
+ "\u0192\3\2\2\2\u0195\u018d\3\2\2\2\u0195\u0196\3\2\2\2\u0196\u0197\3\2"+
+ "\2\2\u0197\u019b\7\6\2\2\u0198\u019a\5(\25\2\u0199\u0198\3\2\2\2\u019a"+
"\u019d\3\2\2\2\u019b\u0199\3\2\2\2\u019b\u019c\3\2\2\2\u019c\u019f\3\2"+
- "\2\2\u019d\u019b\3\2\2\2\u019e\u0172\3\2\2\2\u019e\u0185\3\2\2\2\u019f"+
- "\61\3\2\2\2\u01a0\u01a1\7\7\2\2\u01a1\u01a6\5\36\20\2\u01a2\u01a3\7\r"+
- "\2\2\u01a3\u01a5\5\36\20\2\u01a4\u01a2\3\2\2\2\u01a5\u01a8\3\2\2\2\u01a6"+
- "\u01a4\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a7\u01a9\3\2\2\2\u01a8\u01a6\3\2"+
- "\2\2\u01a9\u01aa\7\b\2\2\u01aa\u01ae\3\2\2\2\u01ab\u01ac\7\7\2\2\u01ac"+
- "\u01ae\7\b\2\2\u01ad\u01a0\3\2\2\2\u01ad\u01ab\3\2\2\2\u01ae\63\3\2\2"+
- "\2\u01af\u01b0\7\7\2\2\u01b0\u01b5\5\66\34\2\u01b1\u01b2\7\r\2\2\u01b2"+
- "\u01b4\5\66\34\2\u01b3\u01b1\3\2\2\2\u01b4\u01b7\3\2\2\2\u01b5\u01b3\3"+
- "\2\2\2\u01b5\u01b6\3\2\2\2\u01b6\u01b8\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b8"+
- "\u01b9\7\b\2\2\u01b9\u01be\3\2\2\2\u01ba\u01bb\7\7\2\2\u01bb\u01bc\7\66"+
- "\2\2\u01bc\u01be\7\b\2\2\u01bd\u01af\3\2\2\2\u01bd\u01ba\3\2\2\2\u01be"+
- "\65\3\2\2\2\u01bf\u01c0\5\36\20\2\u01c0\u01c1\7\66\2\2\u01c1\u01c2\5\36"+
- "\20\2\u01c2\67\3\2\2\2\u01c3\u01cc\7\t\2\2\u01c4\u01c9\5:\36\2\u01c5\u01c6"+
- "\7\r\2\2\u01c6\u01c8\5:\36\2\u01c7\u01c5\3\2\2\2\u01c8\u01cb\3\2\2\2\u01c9"+
- "\u01c7\3\2\2\2\u01c9\u01ca\3\2\2\2\u01ca\u01cd\3\2\2\2\u01cb\u01c9\3\2"+
- "\2\2\u01cc\u01c4\3\2\2\2\u01cc\u01cd\3\2\2\2\u01cd\u01ce\3\2\2\2\u01ce"+
- "\u01cf\7\n\2\2\u01cf9\3\2\2\2\u01d0\u01d4\5\36\20\2\u01d1\u01d4\5<\37"+
- "\2\u01d2\u01d4\5@!\2\u01d3\u01d0\3\2\2\2\u01d3\u01d1\3\2\2\2\u01d3\u01d2"+
- "\3\2\2\2\u01d4;\3\2\2\2\u01d5\u01e3\5> \2\u01d6\u01df\7\t\2\2\u01d7\u01dc"+
- "\5> \2\u01d8\u01d9\7\r\2\2\u01d9\u01db\5> \2\u01da\u01d8\3\2\2\2\u01db"+
- "\u01de\3\2\2\2\u01dc\u01da\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd\u01e0\3\2"+
- "\2\2\u01de\u01dc\3\2\2\2\u01df\u01d7\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0"+
- "\u01e1\3\2\2\2\u01e1\u01e3\7\n\2\2\u01e2\u01d5\3\2\2\2\u01e2\u01d6\3\2"+
- "\2\2\u01e3\u01e4\3\2\2\2\u01e4\u01e7\79\2\2\u01e5\u01e8\5\f\7\2\u01e6"+
- "\u01e8\5\36\20\2\u01e7\u01e5\3\2\2\2\u01e7\u01e6\3\2\2\2\u01e8=\3\2\2"+
- "\2\u01e9\u01eb\5\26\f\2\u01ea\u01e9\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb"+
- "\u01ec\3\2\2\2\u01ec\u01ed\7T\2\2\u01ed?\3\2\2\2\u01ee\u01ef\7S\2\2\u01ef"+
- "\u01f0\78\2\2\u01f0\u01fc\7T\2\2\u01f1\u01f2\5\26\f\2\u01f2\u01f3\78\2"+
- "\2\u01f3\u01f4\7\30\2\2\u01f4\u01fc\3\2\2\2\u01f5\u01f6\7T\2\2\u01f6\u01f7"+
- "\78\2\2\u01f7\u01fc\7T\2\2\u01f8\u01f9\7\34\2\2\u01f9\u01fa\78\2\2\u01fa"+
- "\u01fc\7T\2\2\u01fb\u01ee\3\2\2\2\u01fb\u01f1\3\2\2\2\u01fb\u01f5\3\2"+
- "\2\2\u01fb\u01f8\3\2\2\2\u01fcA\3\2\2\2\62EK^amu\u0082\u0086\u008a\u008f"+
- "\u00b2\u00bb\u00bf\u00c5\u00ce\u00d8\u00e0\u00e6\u0124\u0126\u0136\u013c"+
- "\u0144\u0148\u015c\u0161\u0165\u017a\u0180\u0183\u018f\u0192\u0195\u019b"+
- "\u019e\u01a6\u01ad\u01b5\u01bd\u01c9\u01cc\u01d3\u01dc\u01df\u01e2\u01e7"+
- "\u01ea\u01fb";
+ "\2\2\u019d\u019b\3\2\2\2\u019e\u0175\3\2\2\2\u019e\u0188\3\2\2\2\u019f"+
+ "\63\3\2\2\2\u01a0\u01a1\7\7\2\2\u01a1\u01a6\5 \21\2\u01a2\u01a3\7\r\2"+
+ "\2\u01a3\u01a5\5 \21\2\u01a4\u01a2\3\2\2\2\u01a5\u01a8\3\2\2\2\u01a6\u01a4"+
+ "\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a7\u01a9\3\2\2\2\u01a8\u01a6\3\2\2\2\u01a9"+
+ "\u01aa\7\b\2\2\u01aa\u01ae\3\2\2\2\u01ab\u01ac\7\7\2\2\u01ac\u01ae\7\b"+
+ "\2\2\u01ad\u01a0\3\2\2\2\u01ad\u01ab\3\2\2\2\u01ae\65\3\2\2\2\u01af\u01b0"+
+ "\7\7\2\2\u01b0\u01b5\58\35\2\u01b1\u01b2\7\r\2\2\u01b2\u01b4\58\35\2\u01b3"+
+ "\u01b1\3\2\2\2\u01b4\u01b7\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b5\u01b6\3\2"+
+ "\2\2\u01b6\u01b8\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b8\u01b9\7\b\2\2\u01b9"+
+ "\u01be\3\2\2\2\u01ba\u01bb\7\7\2\2\u01bb\u01bc\7\66\2\2\u01bc\u01be\7"+
+ "\b\2\2\u01bd\u01af\3\2\2\2\u01bd\u01ba\3\2\2\2\u01be\67\3\2\2\2\u01bf"+
+ "\u01c0\5 \21\2\u01c0\u01c1\7\66\2\2\u01c1\u01c2\5 \21\2\u01c29\3\2\2\2"+
+ "\u01c3\u01cc\7\t\2\2\u01c4\u01c9\5<\37\2\u01c5\u01c6\7\r\2\2\u01c6\u01c8"+
+ "\5<\37\2\u01c7\u01c5\3\2\2\2\u01c8\u01cb\3\2\2\2\u01c9\u01c7\3\2\2\2\u01c9"+
+ "\u01ca\3\2\2\2\u01ca\u01cd\3\2\2\2\u01cb\u01c9\3\2\2\2\u01cc\u01c4\3\2"+
+ "\2\2\u01cc\u01cd\3\2\2\2\u01cd\u01ce\3\2\2\2\u01ce\u01cf\7\n\2\2\u01cf"+
+ ";\3\2\2\2\u01d0\u01d4\5 \21\2\u01d1\u01d4\5> \2\u01d2\u01d4\5B\"\2\u01d3"+
+ "\u01d0\3\2\2\2\u01d3\u01d1\3\2\2\2\u01d3\u01d2\3\2\2\2\u01d4=\3\2\2\2"+
+ "\u01d5\u01e3\5@!\2\u01d6\u01df\7\t\2\2\u01d7\u01dc\5@!\2\u01d8\u01d9\7"+
+ "\r\2\2\u01d9\u01db\5@!\2\u01da\u01d8\3\2\2\2\u01db\u01de\3\2\2\2\u01dc"+
+ "\u01da\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd\u01e0\3\2\2\2\u01de\u01dc\3\2"+
+ "\2\2\u01df\u01d7\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0\u01e1\3\2\2\2\u01e1"+
+ "\u01e3\7\n\2\2\u01e2\u01d5\3\2\2\2\u01e2\u01d6\3\2\2\2\u01e3\u01e4\3\2"+
+ "\2\2\u01e4\u01e7\79\2\2\u01e5\u01e8\5\20\t\2\u01e6\u01e8\5 \21\2\u01e7"+
+ "\u01e5\3\2\2\2\u01e7\u01e6\3\2\2\2\u01e8?\3\2\2\2\u01e9\u01eb\5\32\16"+
+ "\2\u01ea\u01e9\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\u01ed"+
+ "\7T\2\2\u01edA\3\2\2\2\u01ee\u01ef\7S\2\2\u01ef\u01f0\78\2\2\u01f0\u01fc"+
+ "\7T\2\2\u01f1\u01f2\5\32\16\2\u01f2\u01f3\78\2\2\u01f3\u01f4\7\30\2\2"+
+ "\u01f4\u01fc\3\2\2\2\u01f5\u01f6\7T\2\2\u01f6\u01f7\78\2\2\u01f7\u01fc"+
+ "\7T\2\2\u01f8\u01f9\7\34\2\2\u01f9\u01fa\78\2\2\u01fa\u01fc\7T\2\2\u01fb"+
+ "\u01ee\3\2\2\2\u01fb\u01f1\3\2\2\2\u01fb\u01f5\3\2\2\2\u01fb\u01f8\3\2"+
+ "\2\2\u01fcC\3\2\2\2\65GMQcfnx\u0080\u0085\u0089\u008d\u0092\u00aa\u00ac"+
+ "\u00bd\u00c1\u00c7\u00cb\u00d3\u00dd\u00e5\u00eb\u0127\u0129\u0139\u013f"+
+ "\u0147\u014b\u015f\u0164\u0168\u017d\u0183\u0186\u0192\u0195\u019b\u019e"+
+ "\u01a6\u01ad\u01b5\u01bd\u01c9\u01cc\u01d3\u01dc\u01df\u01e2\u01e7\u01ea"+
+ "\u01fb";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParserBaseVisitor.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParserBaseVisitor.java
index 8c4741e6725..81e7166d9a9 100644
--- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParserBaseVisitor.java
+++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParserBaseVisitor.java
@@ -32,6 +32,13 @@ class PainlessParserBaseVisitor extends AbstractParseTreeVisitor implement
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitParameters(PainlessParser.ParametersContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitStatement(PainlessParser.StatementContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -46,13 +53,6 @@ class PainlessParserBaseVisitor extends AbstractParseTreeVisitor implement
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitWhile(PainlessParser.WhileContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitDo(PainlessParser.DoContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -74,6 +74,20 @@ class PainlessParserBaseVisitor extends AbstractParseTreeVisitor implement
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitIneach(PainlessParser.IneachContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitTry(PainlessParser.TryContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitDo(PainlessParser.DoContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -102,13 +116,6 @@ class PainlessParserBaseVisitor extends AbstractParseTreeVisitor implement
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitReturn(PainlessParser.ReturnContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitTry(PainlessParser.TryContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -186,13 +193,6 @@ class PainlessParserBaseVisitor extends AbstractParseTreeVisitor implement
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitTrap(PainlessParser.TrapContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitDelimiter(PainlessParser.DelimiterContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParserVisitor.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParserVisitor.java
index 47bfd4a1d05..ec3e251f3e9 100644
--- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParserVisitor.java
+++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/PainlessParserVisitor.java
@@ -28,93 +28,99 @@ interface PainlessParserVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitParameters(PainlessParser.ParametersContext ctx);
+ /**
+ * Visit a parse tree produced by {@link PainlessParser#statement}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitStatement(PainlessParser.StatementContext ctx);
/**
* Visit a parse tree produced by the {@code if}
- * labeled alternative in {@link PainlessParser#statement}.
+ * labeled alternative in {@link PainlessParser#rstatement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitIf(PainlessParser.IfContext ctx);
/**
* Visit a parse tree produced by the {@code while}
- * labeled alternative in {@link PainlessParser#statement}.
+ * labeled alternative in {@link PainlessParser#rstatement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitWhile(PainlessParser.WhileContext ctx);
- /**
- * Visit a parse tree produced by the {@code do}
- * labeled alternative in {@link PainlessParser#statement}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitDo(PainlessParser.DoContext ctx);
/**
* Visit a parse tree produced by the {@code for}
- * labeled alternative in {@link PainlessParser#statement}.
+ * labeled alternative in {@link PainlessParser#rstatement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitFor(PainlessParser.ForContext ctx);
/**
* Visit a parse tree produced by the {@code each}
- * labeled alternative in {@link PainlessParser#statement}.
+ * labeled alternative in {@link PainlessParser#rstatement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitEach(PainlessParser.EachContext ctx);
/**
* Visit a parse tree produced by the {@code ineach}
- * labeled alternative in {@link PainlessParser#statement}.
+ * labeled alternative in {@link PainlessParser#rstatement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitIneach(PainlessParser.IneachContext ctx);
+ /**
+ * Visit a parse tree produced by the {@code try}
+ * labeled alternative in {@link PainlessParser#rstatement}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitTry(PainlessParser.TryContext ctx);
+ /**
+ * Visit a parse tree produced by the {@code do}
+ * labeled alternative in {@link PainlessParser#dstatement}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitDo(PainlessParser.DoContext ctx);
/**
* Visit a parse tree produced by the {@code decl}
- * labeled alternative in {@link PainlessParser#statement}.
+ * labeled alternative in {@link PainlessParser#dstatement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDecl(PainlessParser.DeclContext ctx);
/**
* Visit a parse tree produced by the {@code continue}
- * labeled alternative in {@link PainlessParser#statement}.
+ * labeled alternative in {@link PainlessParser#dstatement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitContinue(PainlessParser.ContinueContext ctx);
/**
* Visit a parse tree produced by the {@code break}
- * labeled alternative in {@link PainlessParser#statement}.
+ * labeled alternative in {@link PainlessParser#dstatement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBreak(PainlessParser.BreakContext ctx);
/**
* Visit a parse tree produced by the {@code return}
- * labeled alternative in {@link PainlessParser#statement}.
+ * labeled alternative in {@link PainlessParser#dstatement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitReturn(PainlessParser.ReturnContext ctx);
- /**
- * Visit a parse tree produced by the {@code try}
- * labeled alternative in {@link PainlessParser#statement}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitTry(PainlessParser.TryContext ctx);
/**
* Visit a parse tree produced by the {@code throw}
- * labeled alternative in {@link PainlessParser#statement}.
+ * labeled alternative in {@link PainlessParser#dstatement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitThrow(PainlessParser.ThrowContext ctx);
/**
* Visit a parse tree produced by the {@code expr}
- * labeled alternative in {@link PainlessParser#statement}.
+ * labeled alternative in {@link PainlessParser#dstatement}.
* @param ctx the parse tree
* @return the visitor result
*/
@@ -173,12 +179,6 @@ interface PainlessParserVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitTrap(PainlessParser.TrapContext ctx);
- /**
- * Visit a parse tree produced by {@link PainlessParser#delimiter}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitDelimiter(PainlessParser.DelimiterContext ctx);
/**
* Visit a parse tree produced by the {@code single}
* labeled alternative in {@link PainlessParser#expression}.
diff --git a/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/Walker.java b/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/Walker.java
index a15f87966ea..3ac6cb7fd37 100644
--- a/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/Walker.java
+++ b/modules/lang-painless/src/main/java/org/elasticsearch/painless/antlr/Walker.java
@@ -56,7 +56,6 @@ import org.elasticsearch.painless.antlr.PainlessParser.DeclContext;
import org.elasticsearch.painless.antlr.PainlessParser.DeclarationContext;
import org.elasticsearch.painless.antlr.PainlessParser.DecltypeContext;
import org.elasticsearch.painless.antlr.PainlessParser.DeclvarContext;
-import org.elasticsearch.painless.antlr.PainlessParser.DelimiterContext;
import org.elasticsearch.painless.antlr.PainlessParser.DoContext;
import org.elasticsearch.painless.antlr.PainlessParser.DynamicContext;
import org.elasticsearch.painless.antlr.PainlessParser.EachContext;
@@ -264,6 +263,10 @@ public final class Walker extends PainlessParserBaseVisitor {
statements.add((AStatement)visit(statement));
}
+ if (ctx.dstatement() != null) {
+ statements.add((AStatement)visit(ctx.dstatement()));
+ }
+
return new SSource(scriptClassInfo, settings, sourceName, sourceText, debugStream, (MainMethodReserved)reserved.pop(),
location(ctx), functions, globals, statements);
}
@@ -290,6 +293,10 @@ public final class Walker extends PainlessParserBaseVisitor {
statements.add((AStatement)visit(statement));
}
+ if (ctx.block().dstatement() != null) {
+ statements.add((AStatement)visit(ctx.block().dstatement()));
+ }
+
return new SFunction((FunctionReserved)reserved.pop(), location(ctx), rtnType, name,
paramTypes, paramNames, statements, false);
}
@@ -299,6 +306,17 @@ public final class Walker extends PainlessParserBaseVisitor {
throw location(ctx).createError(new IllegalStateException("Illegal tree structure."));
}
+ @Override
+ public ANode visitStatement(StatementContext ctx) {
+ if (ctx.rstatement() != null) {
+ return visit(ctx.rstatement());
+ } else if (ctx.dstatement() != null) {
+ return visit(ctx.dstatement());
+ } else {
+ throw location(ctx).createError(new IllegalStateException("Illegal tree structure."));
+ }
+ }
+
@Override
public ANode visitIf(IfContext ctx) {
AExpression expression = (AExpression)visit(ctx.expression());
@@ -446,7 +464,7 @@ public final class Walker extends PainlessParserBaseVisitor {
@Override
public ANode visitBlock(BlockContext ctx) {
- if (ctx.statement().isEmpty()) {
+ if (ctx.statement().isEmpty() && ctx.dstatement() == null) {
return null;
} else {
List statements = new ArrayList<>();
@@ -455,6 +473,10 @@ public final class Walker extends PainlessParserBaseVisitor {
statements.add((AStatement)visit(statement));
}
+ if (ctx.dstatement() != null) {
+ statements.add((AStatement)visit(ctx.dstatement()));
+ }
+
return new SBlock(location(ctx), statements);
}
}
@@ -514,11 +536,6 @@ public final class Walker extends PainlessParserBaseVisitor {
return new SCatch(location(ctx), type, name, block);
}
- @Override
- public ANode visitDelimiter(DelimiterContext ctx) {
- throw location(ctx).createError(new IllegalStateException("Illegal tree structure."));
- }
-
@Override
public ANode visitSingle(SingleContext ctx) {
return visit(ctx.unary());
@@ -1074,6 +1091,10 @@ public final class Walker extends PainlessParserBaseVisitor {
for (StatementContext statement : ctx.block().statement()) {
statements.add((AStatement)visit(statement));
}
+
+ if (ctx.block().dstatement() != null) {
+ statements.add((AStatement)visit(ctx.block().dstatement()));
+ }
}
FunctionReserved lambdaReserved = (FunctionReserved)reserved.pop();
diff --git a/modules/lang-painless/src/test/java/org/elasticsearch/painless/RegexTests.java b/modules/lang-painless/src/test/java/org/elasticsearch/painless/RegexTests.java
index 0a66b67a2e8..911a50468cc 100644
--- a/modules/lang-painless/src/test/java/org/elasticsearch/painless/RegexTests.java
+++ b/modules/lang-painless/src/test/java/org/elasticsearch/painless/RegexTests.java
@@ -278,6 +278,6 @@ public class RegexTests extends ScriptTestCase {
IllegalArgumentException e = expectScriptThrows(IllegalArgumentException.class, () -> {
exec("/asdf/b", false); // Not picky so we get a non-assertion error
});
- assertEquals("unexpected token ['b'] was expecting one of [{, ';'}].", e.getMessage());
+ assertEquals("invalid sequence of tokens near ['b'].", e.getMessage());
}
}
diff --git a/modules/lang-painless/src/test/java/org/elasticsearch/painless/WhenThingsGoWrongTests.java b/modules/lang-painless/src/test/java/org/elasticsearch/painless/WhenThingsGoWrongTests.java
index d60da7b795f..1bb754db847 100644
--- a/modules/lang-painless/src/test/java/org/elasticsearch/painless/WhenThingsGoWrongTests.java
+++ b/modules/lang-painless/src/test/java/org/elasticsearch/painless/WhenThingsGoWrongTests.java
@@ -256,7 +256,7 @@ public class WhenThingsGoWrongTests extends ScriptTestCase {
// We don't want PICKY here so we get the normal error message
exec("def i = 1} return 1", emptyMap(), emptyMap(), null, false);
});
- assertEquals("unexpected token ['}'] was expecting one of [].", e.getMessage());
+ assertEquals("invalid sequence of tokens near ['}'].", e.getMessage());
}
public void testBadBoxingCast() {