diff --git a/cobol-parser/pom.xml b/cobol-parser/pom.xml index 16d22845..8e65ff85 100644 --- a/cobol-parser/pom.xml +++ b/cobol-parser/pom.xml @@ -34,7 +34,7 @@ org.antlr antlr4-runtime - 4.8 + 4.9.3 diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.java index e0fce173..84b735c4 100644 --- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.java +++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookLexer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -// Generated from copybookLexer.g4 by ANTLR 4.8 +// Generated from copybookLexer.g4 by ANTLR 4.9.3 package za.co.absa.cobrix.cobol.parser.antlr; import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.g4 b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.g4 index 61a677b8..fec00ec6 100644 --- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.g4 +++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.g4 @@ -50,6 +50,22 @@ booleanLiteral identifier: IDENTIFIER | THRU_OR_THROUGH | A_S | P_S | P_NS | X_S | | N_S | S_S | S_NS | Z_S | Z_NS | V_S | V_NS | SINGLE_QUOTED_IDENTIFIER // is this valid? + | SIGN | LEADING | TRAILING | SEPARATE | CHARACTER + | ASCENDING | DESCENDING | KEY + | BINARY | DISPLAY | PACKED_DECIMAL + | COMPUTATIONAL | COMPUTATIONAL_0 | COMPUTATIONAL_1 | COMPUTATIONAL_2 | COMPUTATIONAL_3 | COMPUTATIONAL_3U | COMPUTATIONAL_4 | COMPUTATIONAL_5 | COMPUTATIONAL_9 + | COMP | COMP_0 | COMP_1 | COMP_2 | COMP_3 | COMP_3U | COMP_4 | COMP_5 | COMP_9 + | REDEFINES | RENAMES + | VALUE | VALUES + | OCCURS | TIMES | DEPENDING | INDEXED + | BLANK | ZERO | ZEROS | ZEROES | SPACE | SPACES + | HIGH_VALUE | HIGH_VALUES | LOW_VALUE | LOW_VALUES + | NULL | NULLS | QUOTE | QUOTES + | JUSTIFIED | JUST | RIGHT + | PICTURE | PIC + | TRUE | FALSE + | ARE | IS | ON | BY | WHEN | TO | ALL + | USAGE | FROM ; thru: diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.java index e03e6867..fb13b4d4 100644 --- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.java +++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParser.java @@ -14,7 +14,7 @@ * limitations under the License. */ -// Generated from copybookParser.g4 by ANTLR 4.8 +// Generated from copybookParser.g4 by ANTLR 4.9.3 package za.co.absa.cobrix.cobol.parser.antlr; import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; @@ -504,6 +504,73 @@ public static class IdentifierContext extends ParserRuleContext { public TerminalNode V_S() { return getToken(copybookParser.V_S, 0); } public TerminalNode V_NS() { return getToken(copybookParser.V_NS, 0); } public TerminalNode SINGLE_QUOTED_IDENTIFIER() { return getToken(copybookParser.SINGLE_QUOTED_IDENTIFIER, 0); } + public TerminalNode SIGN() { return getToken(copybookParser.SIGN, 0); } + public TerminalNode LEADING() { return getToken(copybookParser.LEADING, 0); } + public TerminalNode TRAILING() { return getToken(copybookParser.TRAILING, 0); } + public TerminalNode SEPARATE() { return getToken(copybookParser.SEPARATE, 0); } + public TerminalNode CHARACTER() { return getToken(copybookParser.CHARACTER, 0); } + public TerminalNode ASCENDING() { return getToken(copybookParser.ASCENDING, 0); } + public TerminalNode DESCENDING() { return getToken(copybookParser.DESCENDING, 0); } + public TerminalNode KEY() { return getToken(copybookParser.KEY, 0); } + public TerminalNode BINARY() { return getToken(copybookParser.BINARY, 0); } + public TerminalNode DISPLAY() { return getToken(copybookParser.DISPLAY, 0); } + public TerminalNode PACKED_DECIMAL() { return getToken(copybookParser.PACKED_DECIMAL, 0); } + public TerminalNode COMPUTATIONAL() { return getToken(copybookParser.COMPUTATIONAL, 0); } + public TerminalNode COMPUTATIONAL_0() { return getToken(copybookParser.COMPUTATIONAL_0, 0); } + public TerminalNode COMPUTATIONAL_1() { return getToken(copybookParser.COMPUTATIONAL_1, 0); } + public TerminalNode COMPUTATIONAL_2() { return getToken(copybookParser.COMPUTATIONAL_2, 0); } + public TerminalNode COMPUTATIONAL_3() { return getToken(copybookParser.COMPUTATIONAL_3, 0); } + public TerminalNode COMPUTATIONAL_3U() { return getToken(copybookParser.COMPUTATIONAL_3U, 0); } + public TerminalNode COMPUTATIONAL_4() { return getToken(copybookParser.COMPUTATIONAL_4, 0); } + public TerminalNode COMPUTATIONAL_5() { return getToken(copybookParser.COMPUTATIONAL_5, 0); } + public TerminalNode COMPUTATIONAL_9() { return getToken(copybookParser.COMPUTATIONAL_9, 0); } + public TerminalNode COMP() { return getToken(copybookParser.COMP, 0); } + public TerminalNode COMP_0() { return getToken(copybookParser.COMP_0, 0); } + public TerminalNode COMP_1() { return getToken(copybookParser.COMP_1, 0); } + public TerminalNode COMP_2() { return getToken(copybookParser.COMP_2, 0); } + public TerminalNode COMP_3() { return getToken(copybookParser.COMP_3, 0); } + public TerminalNode COMP_3U() { return getToken(copybookParser.COMP_3U, 0); } + public TerminalNode COMP_4() { return getToken(copybookParser.COMP_4, 0); } + public TerminalNode COMP_5() { return getToken(copybookParser.COMP_5, 0); } + public TerminalNode COMP_9() { return getToken(copybookParser.COMP_9, 0); } + public TerminalNode REDEFINES() { return getToken(copybookParser.REDEFINES, 0); } + public TerminalNode RENAMES() { return getToken(copybookParser.RENAMES, 0); } + public TerminalNode VALUE() { return getToken(copybookParser.VALUE, 0); } + public TerminalNode VALUES() { return getToken(copybookParser.VALUES, 0); } + public TerminalNode OCCURS() { return getToken(copybookParser.OCCURS, 0); } + public TerminalNode TIMES() { return getToken(copybookParser.TIMES, 0); } + public TerminalNode DEPENDING() { return getToken(copybookParser.DEPENDING, 0); } + public TerminalNode INDEXED() { return getToken(copybookParser.INDEXED, 0); } + public TerminalNode BLANK() { return getToken(copybookParser.BLANK, 0); } + public TerminalNode ZERO() { return getToken(copybookParser.ZERO, 0); } + public TerminalNode ZEROS() { return getToken(copybookParser.ZEROS, 0); } + public TerminalNode ZEROES() { return getToken(copybookParser.ZEROES, 0); } + public TerminalNode SPACE() { return getToken(copybookParser.SPACE, 0); } + public TerminalNode SPACES() { return getToken(copybookParser.SPACES, 0); } + public TerminalNode HIGH_VALUE() { return getToken(copybookParser.HIGH_VALUE, 0); } + public TerminalNode HIGH_VALUES() { return getToken(copybookParser.HIGH_VALUES, 0); } + public TerminalNode LOW_VALUE() { return getToken(copybookParser.LOW_VALUE, 0); } + public TerminalNode LOW_VALUES() { return getToken(copybookParser.LOW_VALUES, 0); } + public TerminalNode NULL() { return getToken(copybookParser.NULL, 0); } + public TerminalNode NULLS() { return getToken(copybookParser.NULLS, 0); } + public TerminalNode QUOTE() { return getToken(copybookParser.QUOTE, 0); } + public TerminalNode QUOTES() { return getToken(copybookParser.QUOTES, 0); } + public TerminalNode JUSTIFIED() { return getToken(copybookParser.JUSTIFIED, 0); } + public TerminalNode JUST() { return getToken(copybookParser.JUST, 0); } + public TerminalNode RIGHT() { return getToken(copybookParser.RIGHT, 0); } + public TerminalNode PICTURE() { return getToken(copybookParser.PICTURE, 0); } + public TerminalNode PIC() { return getToken(copybookParser.PIC, 0); } + public TerminalNode TRUE() { return getToken(copybookParser.TRUE, 0); } + public TerminalNode FALSE() { return getToken(copybookParser.FALSE, 0); } + public TerminalNode ARE() { return getToken(copybookParser.ARE, 0); } + public TerminalNode IS() { return getToken(copybookParser.IS, 0); } + public TerminalNode ON() { return getToken(copybookParser.ON, 0); } + public TerminalNode BY() { return getToken(copybookParser.BY, 0); } + public TerminalNode WHEN() { return getToken(copybookParser.WHEN, 0); } + public TerminalNode TO() { return getToken(copybookParser.TO, 0); } + public TerminalNode ALL() { return getToken(copybookParser.ALL, 0); } + public TerminalNode USAGE() { return getToken(copybookParser.USAGE, 0); } + public TerminalNode FROM() { return getToken(copybookParser.FROM, 0); } public IdentifierContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -519,7 +586,7 @@ public final IdentifierContext identifier() throws RecognitionException { IdentifierContext _localctx = new IdentifierContext(_ctx, getState()); enterRule(_localctx, 10, RULE_identifier); try { - setState(128); + setState(195); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { case 1: @@ -625,6 +692,475 @@ public final IdentifierContext identifier() throws RecognitionException { match(SINGLE_QUOTED_IDENTIFIER); } break; + case 16: + enterOuterAlt(_localctx, 16); + { + setState(128); + match(SIGN); + } + break; + case 17: + enterOuterAlt(_localctx, 17); + { + setState(129); + match(LEADING); + } + break; + case 18: + enterOuterAlt(_localctx, 18); + { + setState(130); + match(TRAILING); + } + break; + case 19: + enterOuterAlt(_localctx, 19); + { + setState(131); + match(SEPARATE); + } + break; + case 20: + enterOuterAlt(_localctx, 20); + { + setState(132); + match(CHARACTER); + } + break; + case 21: + enterOuterAlt(_localctx, 21); + { + setState(133); + match(ASCENDING); + } + break; + case 22: + enterOuterAlt(_localctx, 22); + { + setState(134); + match(DESCENDING); + } + break; + case 23: + enterOuterAlt(_localctx, 23); + { + setState(135); + match(KEY); + } + break; + case 24: + enterOuterAlt(_localctx, 24); + { + setState(136); + match(BINARY); + } + break; + case 25: + enterOuterAlt(_localctx, 25); + { + setState(137); + match(DISPLAY); + } + break; + case 26: + enterOuterAlt(_localctx, 26); + { + setState(138); + match(PACKED_DECIMAL); + } + break; + case 27: + enterOuterAlt(_localctx, 27); + { + setState(139); + match(COMPUTATIONAL); + } + break; + case 28: + enterOuterAlt(_localctx, 28); + { + setState(140); + match(COMPUTATIONAL_0); + } + break; + case 29: + enterOuterAlt(_localctx, 29); + { + setState(141); + match(COMPUTATIONAL_1); + } + break; + case 30: + enterOuterAlt(_localctx, 30); + { + setState(142); + match(COMPUTATIONAL_2); + } + break; + case 31: + enterOuterAlt(_localctx, 31); + { + setState(143); + match(COMPUTATIONAL_3); + } + break; + case 32: + enterOuterAlt(_localctx, 32); + { + setState(144); + match(COMPUTATIONAL_3U); + } + break; + case 33: + enterOuterAlt(_localctx, 33); + { + setState(145); + match(COMPUTATIONAL_4); + } + break; + case 34: + enterOuterAlt(_localctx, 34); + { + setState(146); + match(COMPUTATIONAL_5); + } + break; + case 35: + enterOuterAlt(_localctx, 35); + { + setState(147); + match(COMPUTATIONAL_9); + } + break; + case 36: + enterOuterAlt(_localctx, 36); + { + setState(148); + match(COMP); + } + break; + case 37: + enterOuterAlt(_localctx, 37); + { + setState(149); + match(COMP_0); + } + break; + case 38: + enterOuterAlt(_localctx, 38); + { + setState(150); + match(COMP_1); + } + break; + case 39: + enterOuterAlt(_localctx, 39); + { + setState(151); + match(COMP_2); + } + break; + case 40: + enterOuterAlt(_localctx, 40); + { + setState(152); + match(COMP_3); + } + break; + case 41: + enterOuterAlt(_localctx, 41); + { + setState(153); + match(COMP_3U); + } + break; + case 42: + enterOuterAlt(_localctx, 42); + { + setState(154); + match(COMP_4); + } + break; + case 43: + enterOuterAlt(_localctx, 43); + { + setState(155); + match(COMP_5); + } + break; + case 44: + enterOuterAlt(_localctx, 44); + { + setState(156); + match(COMP_9); + } + break; + case 45: + enterOuterAlt(_localctx, 45); + { + setState(157); + match(REDEFINES); + } + break; + case 46: + enterOuterAlt(_localctx, 46); + { + setState(158); + match(RENAMES); + } + break; + case 47: + enterOuterAlt(_localctx, 47); + { + setState(159); + match(VALUE); + } + break; + case 48: + enterOuterAlt(_localctx, 48); + { + setState(160); + match(VALUES); + } + break; + case 49: + enterOuterAlt(_localctx, 49); + { + setState(161); + match(OCCURS); + } + break; + case 50: + enterOuterAlt(_localctx, 50); + { + setState(162); + match(TIMES); + } + break; + case 51: + enterOuterAlt(_localctx, 51); + { + setState(163); + match(DEPENDING); + } + break; + case 52: + enterOuterAlt(_localctx, 52); + { + setState(164); + match(INDEXED); + } + break; + case 53: + enterOuterAlt(_localctx, 53); + { + setState(165); + match(BLANK); + } + break; + case 54: + enterOuterAlt(_localctx, 54); + { + setState(166); + match(ZERO); + } + break; + case 55: + enterOuterAlt(_localctx, 55); + { + setState(167); + match(ZEROS); + } + break; + case 56: + enterOuterAlt(_localctx, 56); + { + setState(168); + match(ZEROES); + } + break; + case 57: + enterOuterAlt(_localctx, 57); + { + setState(169); + match(SPACE); + } + break; + case 58: + enterOuterAlt(_localctx, 58); + { + setState(170); + match(SPACES); + } + break; + case 59: + enterOuterAlt(_localctx, 59); + { + setState(171); + match(HIGH_VALUE); + } + break; + case 60: + enterOuterAlt(_localctx, 60); + { + setState(172); + match(HIGH_VALUES); + } + break; + case 61: + enterOuterAlt(_localctx, 61); + { + setState(173); + match(LOW_VALUE); + } + break; + case 62: + enterOuterAlt(_localctx, 62); + { + setState(174); + match(LOW_VALUES); + } + break; + case 63: + enterOuterAlt(_localctx, 63); + { + setState(175); + match(NULL); + } + break; + case 64: + enterOuterAlt(_localctx, 64); + { + setState(176); + match(NULLS); + } + break; + case 65: + enterOuterAlt(_localctx, 65); + { + setState(177); + match(QUOTE); + } + break; + case 66: + enterOuterAlt(_localctx, 66); + { + setState(178); + match(QUOTES); + } + break; + case 67: + enterOuterAlt(_localctx, 67); + { + setState(179); + match(JUSTIFIED); + } + break; + case 68: + enterOuterAlt(_localctx, 68); + { + setState(180); + match(JUST); + } + break; + case 69: + enterOuterAlt(_localctx, 69); + { + setState(181); + match(RIGHT); + } + break; + case 70: + enterOuterAlt(_localctx, 70); + { + setState(182); + match(PICTURE); + } + break; + case 71: + enterOuterAlt(_localctx, 71); + { + setState(183); + match(PIC); + } + break; + case 72: + enterOuterAlt(_localctx, 72); + { + setState(184); + match(TRUE); + } + break; + case 73: + enterOuterAlt(_localctx, 73); + { + setState(185); + match(FALSE); + } + break; + case 74: + enterOuterAlt(_localctx, 74); + { + setState(186); + match(ARE); + } + break; + case 75: + enterOuterAlt(_localctx, 75); + { + setState(187); + match(IS); + } + break; + case 76: + enterOuterAlt(_localctx, 76); + { + setState(188); + match(ON); + } + break; + case 77: + enterOuterAlt(_localctx, 77); + { + setState(189); + match(BY); + } + break; + case 78: + enterOuterAlt(_localctx, 78); + { + setState(190); + match(WHEN); + } + break; + case 79: + enterOuterAlt(_localctx, 79); + { + setState(191); + match(TO); + } + break; + case 80: + enterOuterAlt(_localctx, 80); + { + setState(192); + match(ALL); + } + break; + case 81: + enterOuterAlt(_localctx, 81); + { + setState(193); + match(USAGE); + } + break; + case 82: + enterOuterAlt(_localctx, 82); + { + setState(194); + match(FROM); + } + break; } } catch (RecognitionException re) { @@ -657,7 +1193,7 @@ public final ThruContext thru() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(130); + setState(197); match(THRU_OR_THROUGH); } } @@ -705,19 +1241,19 @@ public final ValuesContext values() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(140); + setState(207); _errHandler.sync(this); switch (_input.LA(1)) { case VALUE: { - setState(132); + setState(199); match(VALUE); - setState(134); + setState(201); _errHandler.sync(this); _la = _input.LA(1); if (_la==IS) { { - setState(133); + setState(200); match(IS); } } @@ -726,14 +1262,14 @@ public final ValuesContext values() throws RecognitionException { break; case VALUES: { - setState(136); + setState(203); match(VALUES); - setState(138); + setState(205); _errHandler.sync(this); _la = _input.LA(1); if (_la==ARE) { { - setState(137); + setState(204); match(ARE); } } @@ -743,29 +1279,29 @@ public final ValuesContext values() throws RecognitionException { default: throw new NoViableAltException(this); } - setState(142); + setState(209); valuesFromTo(); - setState(149); + setState(216); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALL) | (1L << FALSE) | (1L << HIGH_VALUE) | (1L << HIGH_VALUES) | (1L << LOW_VALUE) | (1L << LOW_VALUES) | (1L << NULL) | (1L << NULLS) | (1L << QUOTE) | (1L << QUOTES))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (SPACE - 65)) | (1L << (SPACES - 65)) | (1L << (TRUE - 65)) | (1L << (ZERO - 65)) | (1L << (ZEROS - 65)) | (1L << (ZEROES - 65)) | (1L << (COMMACHAR - 65)) | (1L << (MINUSCHAR - 65)) | (1L << (PLUSCHAR - 65)) | (1L << (NINES - 65)) | (1L << (STRINGLITERAL - 65)) | (1L << (LEVEL_ROOT - 65)) | (1L << (LEVEL_REGULAR - 65)) | (1L << (LEVEL_NUMBER_66 - 65)) | (1L << (LEVEL_NUMBER_77 - 65)))) != 0) || ((((_la - 129)) & ~0x3f) == 0 && ((1L << (_la - 129)) & ((1L << (LEVEL_NUMBER_88 - 129)) | (1L << (INTEGERLITERAL - 129)) | (1L << (NUMERICLITERAL - 129)))) != 0)) { { { - setState(144); + setState(211); _errHandler.sync(this); _la = _input.LA(1); if (_la==COMMACHAR) { { - setState(143); + setState(210); match(COMMACHAR); } } - setState(146); + setState(213); valuesFromTo(); } } - setState(151); + setState(218); _errHandler.sync(this); _la = _input.LA(1); } @@ -807,14 +1343,14 @@ public final ValuesFromToContext valuesFromTo() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(152); + setState(219); valuesFrom(); - setState(154); + setState(221); _errHandler.sync(this); _la = _input.LA(1); if (_la==THRU_OR_THROUGH) { { - setState(153); + setState(220); valuesTo(); } } @@ -853,7 +1389,7 @@ public final ValuesFromContext valuesFrom() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(156); + setState(223); literal(); } } @@ -892,9 +1428,9 @@ public final ValuesToContext valuesTo() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(158); + setState(225); thru(); - setState(159); + setState(226); literal(); } } @@ -942,106 +1478,106 @@ public final SpecialValuesContext specialValues() throws RecognitionException { SpecialValuesContext _localctx = new SpecialValuesContext(_ctx, getState()); enterRule(_localctx, 22, RULE_specialValues); try { - setState(176); + setState(243); _errHandler.sync(this); switch (_input.LA(1)) { case ALL: enterOuterAlt(_localctx, 1); { - setState(161); + setState(228); match(ALL); - setState(162); + setState(229); literal(); } break; case HIGH_VALUE: enterOuterAlt(_localctx, 2); { - setState(163); + setState(230); match(HIGH_VALUE); } break; case HIGH_VALUES: enterOuterAlt(_localctx, 3); { - setState(164); + setState(231); match(HIGH_VALUES); } break; case LOW_VALUE: enterOuterAlt(_localctx, 4); { - setState(165); + setState(232); match(LOW_VALUE); } break; case LOW_VALUES: enterOuterAlt(_localctx, 5); { - setState(166); + setState(233); match(LOW_VALUES); } break; case NULL: enterOuterAlt(_localctx, 6); { - setState(167); + setState(234); match(NULL); } break; case NULLS: enterOuterAlt(_localctx, 7); { - setState(168); + setState(235); match(NULLS); } break; case QUOTE: enterOuterAlt(_localctx, 8); { - setState(169); + setState(236); match(QUOTE); } break; case QUOTES: enterOuterAlt(_localctx, 9); { - setState(170); + setState(237); match(QUOTES); } break; case SPACE: enterOuterAlt(_localctx, 10); { - setState(171); + setState(238); match(SPACE); } break; case SPACES: enterOuterAlt(_localctx, 11); { - setState(172); + setState(239); match(SPACES); } break; case ZERO: enterOuterAlt(_localctx, 12); { - setState(173); + setState(240); match(ZERO); } break; case ZEROS: enterOuterAlt(_localctx, 13); { - setState(174); + setState(241); match(ZEROS); } break; case ZEROES: enterOuterAlt(_localctx, 14); { - setState(175); + setState(242); match(ZEROES); } break; @@ -1086,7 +1622,7 @@ public final SortsContext sorts() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(178); + setState(245); _la = _input.LA(1); if ( !(_la==ASCENDING || _la==DESCENDING) ) { _errHandler.recoverInline(this); @@ -1096,27 +1632,27 @@ public final SortsContext sorts() throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(180); + setState(247); _errHandler.sync(this); - _la = _input.LA(1); - if (_la==KEY) { + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { + case 1: { - setState(179); + setState(246); match(KEY); } + break; } - - setState(183); + setState(250); _errHandler.sync(this); - _la = _input.LA(1); - if (_la==IS) { + switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { + case 1: { - setState(182); + setState(249); match(IS); } + break; } - - setState(185); + setState(252); identifier(); } } @@ -1153,9 +1689,9 @@ public final OccursToContext occursTo() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(187); + setState(254); match(TO); - setState(188); + setState(255); integerLiteral(); } } @@ -1190,23 +1726,22 @@ public T accept(ParseTreeVisitor visitor) { public final DependingOnContext dependingOn() throws RecognitionException { DependingOnContext _localctx = new DependingOnContext(_ctx, getState()); enterRule(_localctx, 28, RULE_dependingOn); - int _la; try { enterOuterAlt(_localctx, 1); { - setState(190); + setState(257); match(DEPENDING); - setState(192); + setState(259); _errHandler.sync(this); - _la = _input.LA(1); - if (_la==ON) { + switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { + case 1: { - setState(191); + setState(258); match(ON); } + break; } - - setState(194); + setState(261); identifier(); } } @@ -1253,41 +1788,41 @@ public final IndexedByContext indexedBy() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(196); + setState(263); match(INDEXED); - setState(198); + setState(265); _errHandler.sync(this); - _la = _input.LA(1); - if (_la==BY) { + switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { + case 1: { - setState(197); + setState(264); match(BY); } + break; } - - setState(200); + setState(267); identifier(); - setState(207); + setState(274); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMACHAR || _la==IDENTIFIER) { { { - setState(202); + setState(269); _errHandler.sync(this); _la = _input.LA(1); if (_la==COMMACHAR) { { - setState(201); + setState(268); match(COMMACHAR); } } - setState(204); + setState(271); match(IDENTIFIER); } } - setState(209); + setState(276); _errHandler.sync(this); _la = _input.LA(1); } @@ -1340,56 +1875,56 @@ public final OccursContext occurs() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(210); + setState(277); match(OCCURS); - setState(211); + setState(278); integerLiteral(); - setState(213); + setState(280); _errHandler.sync(this); _la = _input.LA(1); if (_la==TO) { { - setState(212); + setState(279); occursTo(); } } - setState(216); + setState(283); _errHandler.sync(this); _la = _input.LA(1); if (_la==TIMES) { { - setState(215); + setState(282); match(TIMES); } } - setState(219); + setState(286); _errHandler.sync(this); _la = _input.LA(1); if (_la==DEPENDING) { { - setState(218); + setState(285); dependingOn(); } } - setState(222); + setState(289); _errHandler.sync(this); _la = _input.LA(1); if (_la==ASCENDING || _la==DESCENDING) { { - setState(221); + setState(288); sorts(); } } - setState(225); + setState(292); _errHandler.sync(this); _la = _input.LA(1); if (_la==INDEXED) { { - setState(224); + setState(291); indexedBy(); } } @@ -1429,9 +1964,9 @@ public final RedefinesContext redefines() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(227); + setState(294); match(REDEFINES); - setState(228); + setState(295); identifier(); } } @@ -1475,18 +2010,18 @@ public final RenamesContext renames() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(230); + setState(297); match(RENAMES); - setState(231); + setState(298); identifier(); - setState(235); + setState(302); _errHandler.sync(this); _la = _input.LA(1); if (_la==THRU_OR_THROUGH) { { - setState(232); + setState(299); thru(); - setState(233); + setState(300); identifier(); } } @@ -1544,7 +2079,7 @@ public final UsageLiteralContext usageLiteral() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(237); + setState(304); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BINARY) | (1L << COMP) | (1L << COMP_0) | (1L << COMP_1) | (1L << COMP_2) | (1L << COMP_3) | (1L << COMP_3U) | (1L << COMP_4) | (1L << COMP_5) | (1L << COMP_9) | (1L << COMPUTATIONAL) | (1L << COMPUTATIONAL_0) | (1L << COMPUTATIONAL_1) | (1L << COMPUTATIONAL_2) | (1L << COMPUTATIONAL_3) | (1L << COMPUTATIONAL_3U) | (1L << COMPUTATIONAL_4) | (1L << COMPUTATIONAL_5) | (1L << COMPUTATIONAL_9) | (1L << DISPLAY) | (1L << PACKED_DECIMAL))) != 0)) ) { _errHandler.recoverInline(this); @@ -1603,7 +2138,7 @@ public final GroupUsageLiteralContext groupUsageLiteral() throws RecognitionExce try { enterOuterAlt(_localctx, 1); { - setState(239); + setState(306); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BINARY) | (1L << COMP) | (1L << COMP_0) | (1L << COMP_3) | (1L << COMP_3U) | (1L << COMP_4) | (1L << COMP_5) | (1L << COMP_9) | (1L << COMPUTATIONAL) | (1L << COMPUTATIONAL_0) | (1L << COMPUTATIONAL_3) | (1L << COMPUTATIONAL_3U) | (1L << COMPUTATIONAL_4) | (1L << COMPUTATIONAL_5) | (1L << COMPUTATIONAL_9) | (1L << DISPLAY) | (1L << PACKED_DECIMAL))) != 0)) ) { _errHandler.recoverInline(this); @@ -1650,19 +2185,19 @@ public final UsageContext usage() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(245); + setState(312); _errHandler.sync(this); _la = _input.LA(1); if (_la==USAGE) { { - setState(241); + setState(308); match(USAGE); - setState(243); + setState(310); _errHandler.sync(this); _la = _input.LA(1); if (_la==IS) { { - setState(242); + setState(309); match(IS); } } @@ -1670,7 +2205,7 @@ public final UsageContext usage() throws RecognitionException { } } - setState(247); + setState(314); usageLiteral(); } } @@ -1709,19 +2244,19 @@ public final UsageGroupContext usageGroup() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(253); + setState(320); _errHandler.sync(this); _la = _input.LA(1); if (_la==USAGE) { { - setState(249); + setState(316); match(USAGE); - setState(251); + setState(318); _errHandler.sync(this); _la = _input.LA(1); if (_la==IS) { { - setState(250); + setState(317); match(IS); } } @@ -1729,7 +2264,7 @@ public final UsageGroupContext usageGroup() throws RecognitionException { } } - setState(255); + setState(322); groupUsageLiteral(); } } @@ -1769,19 +2304,19 @@ public final SeparateSignContext separateSign() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(257); + setState(324); match(SIGN); - setState(259); + setState(326); _errHandler.sync(this); _la = _input.LA(1); if (_la==IS) { { - setState(258); + setState(325); match(IS); } } - setState(261); + setState(328); _la = _input.LA(1); if ( !(_la==LEADING || _la==TRAILING) ) { _errHandler.recoverInline(this); @@ -1791,22 +2326,22 @@ public final SeparateSignContext separateSign() throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(263); + setState(330); _errHandler.sync(this); _la = _input.LA(1); if (_la==SEPARATE) { { - setState(262); + setState(329); match(SEPARATE); } } - setState(266); + setState(333); _errHandler.sync(this); _la = _input.LA(1); if (_la==CHARACTER) { { - setState(265); + setState(332); match(CHARACTER); } } @@ -1846,7 +2381,7 @@ public final JustifiedContext justified() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(268); + setState(335); _la = _input.LA(1); if ( !(_la==JUST || _la==JUSTIFIED) ) { _errHandler.recoverInline(this); @@ -1856,12 +2391,12 @@ public final JustifiedContext justified() throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(270); + setState(337); _errHandler.sync(this); _la = _input.LA(1); if (_la==RIGHT) { { - setState(269); + setState(336); match(RIGHT); } } @@ -1898,7 +2433,7 @@ public final TermContext term() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(272); + setState(339); match(TERMINAL); } } @@ -1947,14 +2482,14 @@ public final PlusMinusContext plusMinus() throws RecognitionException { PlusMinusContext _localctx = new PlusMinusContext(_ctx, getState()); enterRule(_localctx, 52, RULE_plusMinus); try { - setState(276); + setState(343); _errHandler.sync(this); switch (_input.LA(1)) { case PLUSCHAR: _localctx = new PlusContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(274); + setState(341); match(PLUSCHAR); } break; @@ -1962,7 +2497,7 @@ public final PlusMinusContext plusMinus() throws RecognitionException { _localctx = new MinusContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(275); + setState(342); match(MINUSCHAR); } break; @@ -2114,14 +2649,14 @@ public final Precision9Context precision9() throws RecognitionException { Precision9Context _localctx = new Precision9Context(_ctx, getState()); enterRule(_localctx, 54, RULE_precision9); try { - setState(291); + setState(358); _errHandler.sync(this); switch (_input.LA(1)) { case NINES: _localctx = new Precision9NinesContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(278); + setState(345); match(NINES); } break; @@ -2129,7 +2664,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new Precision9SsContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(279); + setState(346); match(S_S); } break; @@ -2137,7 +2672,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new Precision9PsContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(280); + setState(347); match(P_S); } break; @@ -2145,7 +2680,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new Precision9ZsContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(281); + setState(348); match(Z_S); } break; @@ -2153,7 +2688,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new Precision9VsContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(282); + setState(349); match(V_S); } break; @@ -2161,7 +2696,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new Precision9ExplicitDotContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(283); + setState(350); match(PRECISION_9_EXPLICIT_DOT); } break; @@ -2169,7 +2704,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new Precision9DecimalScaledContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(284); + setState(351); match(PRECISION_9_DECIMAL_SCALED); } break; @@ -2177,7 +2712,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new Precision9DecimalScaledWithVContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(285); + setState(352); match(PRECISION_9_DECIMAL_WITH_V); } break; @@ -2185,7 +2720,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new Precision9ScaledContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(286); + setState(353); match(PRECISION_9_SCALED); } break; @@ -2193,7 +2728,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new Precision9ScaledLeadContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(287); + setState(354); match(PRECISION_9_SCALED_LEAD); } break; @@ -2201,7 +2736,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new PrecisionZExplicitDotContext(_localctx); enterOuterAlt(_localctx, 11); { - setState(288); + setState(355); match(PRECISION_Z_EXPLICIT_DOT); } break; @@ -2209,7 +2744,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new PrecisionZDecimalScaledContext(_localctx); enterOuterAlt(_localctx, 12); { - setState(289); + setState(356); match(PRECISION_Z_DECIMAL_SCALED); } break; @@ -2217,7 +2752,7 @@ public final Precision9Context precision9() throws RecognitionException { _localctx = new PrecisionZScaledContext(_localctx); enterOuterAlt(_localctx, 13); { - setState(290); + setState(357); match(PRECISION_Z_SCALED); } break; @@ -2281,7 +2816,7 @@ public final SignPrecision9Context signPrecision9() throws RecognitionException enterRule(_localctx, 56, RULE_signPrecision9); int _la; try { - setState(300); + setState(367); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { case 1: @@ -2289,17 +2824,17 @@ public final SignPrecision9Context signPrecision9() throws RecognitionException enterOuterAlt(_localctx, 1); { { - setState(294); + setState(361); _errHandler.sync(this); _la = _input.LA(1); if (_la==MINUSCHAR || _la==PLUSCHAR) { { - setState(293); + setState(360); plusMinus(); } } - setState(296); + setState(363); precision9(); } } @@ -2309,9 +2844,9 @@ public final SignPrecision9Context signPrecision9() throws RecognitionException enterOuterAlt(_localctx, 2); { { - setState(297); + setState(364); precision9(); - setState(298); + setState(365); plusMinus(); } } @@ -2350,7 +2885,7 @@ public final AlphaXContext alphaX() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(302); + setState(369); _la = _input.LA(1); if ( !(_la==X_S || _la==LENGTH_TYPE_X) ) { _errHandler.recoverInline(this); @@ -2394,7 +2929,7 @@ public final AlphaNContext alphaN() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(304); + setState(371); _la = _input.LA(1); if ( !(_la==N_S || _la==LENGTH_TYPE_N) ) { _errHandler.recoverInline(this); @@ -2438,7 +2973,7 @@ public final AlphaAContext alphaA() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(306); + setState(373); _la = _input.LA(1); if ( !(_la==A_S || _la==LENGTH_TYPE_A) ) { _errHandler.recoverInline(this); @@ -2482,7 +3017,7 @@ public final PictureLiteralContext pictureLiteral() throws RecognitionException try { enterOuterAlt(_localctx, 1); { - setState(308); + setState(375); _la = _input.LA(1); if ( !(_la==PIC || _la==PICTURE) ) { _errHandler.recoverInline(this); @@ -2544,35 +3079,35 @@ public final PicContext pic() throws RecognitionException { enterRule(_localctx, 66, RULE_pic); int _la; try { - setState(340); + setState(407); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(310); + setState(377); pictureLiteral(); - setState(324); + setState(391); _errHandler.sync(this); switch (_input.LA(1)) { case X_S: case LENGTH_TYPE_X: { - setState(311); + setState(378); alphaX(); } break; case A_S: case LENGTH_TYPE_A: { - setState(312); + setState(379); alphaA(); } break; case N_S: case LENGTH_TYPE_N: { - setState(313); + setState(380); alphaN(); } break; @@ -2614,19 +3149,19 @@ public final PicContext pic() throws RecognitionException { case PRECISION_Z_DECIMAL_SCALED: case PRECISION_Z_SCALED: { - setState(322); + setState(389); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) { case 1: { - setState(314); + setState(381); signPrecision9(); - setState(316); + setState(383); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { case 1: { - setState(315); + setState(382); usage(); } break; @@ -2635,17 +3170,17 @@ public final PicContext pic() throws RecognitionException { break; case 2: { - setState(319); + setState(386); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BINARY) | (1L << COMP) | (1L << COMP_0) | (1L << COMP_1) | (1L << COMP_2) | (1L << COMP_3) | (1L << COMP_3U) | (1L << COMP_4) | (1L << COMP_5) | (1L << COMP_9) | (1L << COMPUTATIONAL) | (1L << COMPUTATIONAL_0) | (1L << COMPUTATIONAL_1) | (1L << COMPUTATIONAL_2) | (1L << COMPUTATIONAL_3) | (1L << COMPUTATIONAL_3U) | (1L << COMPUTATIONAL_4) | (1L << COMPUTATIONAL_5) | (1L << COMPUTATIONAL_9) | (1L << DISPLAY) | (1L << PACKED_DECIMAL))) != 0) || _la==USAGE) { { - setState(318); + setState(385); usage(); } } - setState(321); + setState(388); signPrecision9(); } break; @@ -2660,19 +3195,19 @@ public final PicContext pic() throws RecognitionException { case 2: enterOuterAlt(_localctx, 2); { - setState(330); + setState(397); _errHandler.sync(this); _la = _input.LA(1); if (_la==USAGE) { { - setState(326); + setState(393); match(USAGE); - setState(328); + setState(395); _errHandler.sync(this); _la = _input.LA(1); if (_la==IS) { { - setState(327); + setState(394); match(IS); } } @@ -2680,26 +3215,26 @@ public final PicContext pic() throws RecognitionException { } } - setState(332); + setState(399); match(COMP_1); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(337); + setState(404); _errHandler.sync(this); _la = _input.LA(1); if (_la==USAGE) { { - setState(333); + setState(400); match(USAGE); - setState(335); + setState(402); _errHandler.sync(this); _la = _input.LA(1); if (_la==IS) { { - setState(334); + setState(401); match(IS); } } @@ -2707,7 +3242,7 @@ public final PicContext pic() throws RecognitionException { } } - setState(339); + setState(406); match(COMP_2); } break; @@ -2745,7 +3280,7 @@ public final SectionContext section() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(342); + setState(409); _la = _input.LA(1); if ( !(_la==LEVEL_ROOT || _la==LEVEL_REGULAR) ) { _errHandler.recoverInline(this); @@ -2790,7 +3325,7 @@ public final SkipLiteralContext skipLiteral() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(344); + setState(411); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SKIP1) | (1L << SKIP2) | (1L << SKIP3))) != 0)) ) { _errHandler.recoverInline(this); @@ -2865,21 +3400,21 @@ public final GroupContext group() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(346); + setState(413); section(); - setState(347); + setState(414); identifier(); - setState(354); + setState(421); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BINARY) | (1L << COMP) | (1L << COMP_0) | (1L << COMP_3) | (1L << COMP_3U) | (1L << COMP_4) | (1L << COMP_5) | (1L << COMP_9) | (1L << COMPUTATIONAL) | (1L << COMPUTATIONAL_0) | (1L << COMPUTATIONAL_3) | (1L << COMPUTATIONAL_3U) | (1L << COMPUTATIONAL_4) | (1L << COMPUTATIONAL_5) | (1L << COMPUTATIONAL_9) | (1L << DISPLAY) | (1L << OCCURS) | (1L << PACKED_DECIMAL) | (1L << REDEFINES))) != 0) || ((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (USAGE - 73)) | (1L << (VALUE - 73)) | (1L << (VALUES - 73)))) != 0)) { { - setState(352); + setState(419); _errHandler.sync(this); switch (_input.LA(1)) { case REDEFINES: { - setState(348); + setState(415); redefines(); } break; @@ -2902,20 +3437,20 @@ public final GroupContext group() throws RecognitionException { case PACKED_DECIMAL: case USAGE: { - setState(349); + setState(416); usageGroup(); } break; case OCCURS: { - setState(350); + setState(417); occurs(); } break; case VALUE: case VALUES: { - setState(351); + setState(418); values(); } break; @@ -2923,11 +3458,11 @@ public final GroupContext group() throws RecognitionException { throw new NoViableAltException(this); } } - setState(356); + setState(423); _errHandler.sync(this); _la = _input.LA(1); } - setState(357); + setState(424); term(); } } @@ -3015,89 +3550,89 @@ public final PrimitiveContext primitive() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(359); + setState(426); section(); - setState(360); + setState(427); identifier(); - setState(370); + setState(437); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BINARY) | (1L << COMP) | (1L << COMP_0) | (1L << COMP_1) | (1L << COMP_2) | (1L << COMP_3) | (1L << COMP_3U) | (1L << COMP_4) | (1L << COMP_5) | (1L << COMP_9) | (1L << COMPUTATIONAL) | (1L << COMPUTATIONAL_0) | (1L << COMPUTATIONAL_1) | (1L << COMPUTATIONAL_2) | (1L << COMPUTATIONAL_3) | (1L << COMPUTATIONAL_3U) | (1L << COMPUTATIONAL_4) | (1L << COMPUTATIONAL_5) | (1L << COMPUTATIONAL_9) | (1L << DISPLAY) | (1L << JUST) | (1L << JUSTIFIED) | (1L << OCCURS) | (1L << PACKED_DECIMAL) | (1L << PIC) | (1L << PICTURE) | (1L << REDEFINES))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (SIGN - 64)) | (1L << (USAGE - 64)) | (1L << (VALUE - 64)) | (1L << (VALUES - 64)))) != 0)) { { - setState(368); + setState(435); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,49,_ctx) ) { case 1: { - setState(361); + setState(428); justified(); } break; case 2: { - setState(362); + setState(429); occurs(); } break; case 3: { - setState(363); + setState(430); pic(); } break; case 4: { - setState(364); + setState(431); redefines(); } break; case 5: { - setState(365); + setState(432); usage(); } break; case 6: { - setState(366); + setState(433); values(); } break; case 7: { - setState(367); + setState(434); separateSign(); } break; } } - setState(372); + setState(439); _errHandler.sync(this); _la = _input.LA(1); } - setState(378); + setState(445); _errHandler.sync(this); _la = _input.LA(1); if (_la==BLANK) { { - setState(373); + setState(440); match(BLANK); - setState(375); + setState(442); _errHandler.sync(this); _la = _input.LA(1); if (_la==WHEN) { { - setState(374); + setState(441); match(WHEN); } } - setState(377); + setState(444); match(ZERO); } } - setState(380); + setState(447); term(); } } @@ -3140,13 +3675,13 @@ public final Level66statementContext level66statement() throws RecognitionExcept try { enterOuterAlt(_localctx, 1); { - setState(382); + setState(449); match(LEVEL_NUMBER_66); - setState(383); + setState(450); identifier(); - setState(384); + setState(451); renames(); - setState(385); + setState(452); term(); } } @@ -3189,13 +3724,13 @@ public final Level88statementContext level88statement() throws RecognitionExcept try { enterOuterAlt(_localctx, 1); { - setState(387); + setState(454); match(LEVEL_NUMBER_88); - setState(388); + setState(455); identifier(); - setState(389); + setState(456); values(); - setState(390); + setState(457); term(); } } @@ -3245,55 +3780,55 @@ public final ItemContext item() throws RecognitionException { ItemContext _localctx = new ItemContext(_ctx, getState()); enterRule(_localctx, 80, RULE_item); try { - setState(399); + setState(466); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,53,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(392); + setState(459); match(COMMENT); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(393); + setState(460); group(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(394); + setState(461); primitive(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(395); + setState(462); level66statement(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(396); + setState(463); level88statement(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(397); + setState(464); skipLiteral(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(398); + setState(465); term(); } break; @@ -3311,7 +3846,7 @@ public final ItemContext item() throws RecognitionException { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u008a\u0194\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u008a\u01d7\4\2\t"+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\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"+ @@ -3319,156 +3854,198 @@ public final ItemContext item() throws RecognitionException { "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\3\2\6\2"+ "V\n\2\r\2\16\2W\3\2\5\2[\n\2\3\2\3\2\3\3\3\3\3\3\3\3\5\3c\n\3\3\4\5\4"+ "f\n\4\3\4\3\4\3\4\5\4k\n\4\3\4\5\4n\n\4\3\5\3\5\3\6\3\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\u0083\n\7\3\b\3\b\3"+ - "\t\3\t\5\t\u0089\n\t\3\t\3\t\5\t\u008d\n\t\5\t\u008f\n\t\3\t\3\t\5\t\u0093"+ - "\n\t\3\t\7\t\u0096\n\t\f\t\16\t\u0099\13\t\3\n\3\n\5\n\u009d\n\n\3\13"+ - "\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r"+ - "\3\r\3\r\5\r\u00b3\n\r\3\16\3\16\5\16\u00b7\n\16\3\16\5\16\u00ba\n\16"+ - "\3\16\3\16\3\17\3\17\3\17\3\20\3\20\5\20\u00c3\n\20\3\20\3\20\3\21\3\21"+ - "\5\21\u00c9\n\21\3\21\3\21\5\21\u00cd\n\21\3\21\7\21\u00d0\n\21\f\21\16"+ - "\21\u00d3\13\21\3\22\3\22\3\22\5\22\u00d8\n\22\3\22\5\22\u00db\n\22\3"+ - "\22\5\22\u00de\n\22\3\22\5\22\u00e1\n\22\3\22\5\22\u00e4\n\22\3\23\3\23"+ - "\3\23\3\24\3\24\3\24\3\24\3\24\5\24\u00ee\n\24\3\25\3\25\3\26\3\26\3\27"+ - "\3\27\5\27\u00f6\n\27\5\27\u00f8\n\27\3\27\3\27\3\30\3\30\5\30\u00fe\n"+ - "\30\5\30\u0100\n\30\3\30\3\30\3\31\3\31\5\31\u0106\n\31\3\31\3\31\5\31"+ - "\u010a\n\31\3\31\5\31\u010d\n\31\3\32\3\32\5\32\u0111\n\32\3\33\3\33\3"+ - "\34\3\34\5\34\u0117\n\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35"+ - "\3\35\3\35\3\35\3\35\5\35\u0126\n\35\3\36\5\36\u0129\n\36\3\36\3\36\3"+ - "\36\3\36\5\36\u012f\n\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3#\3#\3#"+ - "\3#\5#\u013f\n#\3#\5#\u0142\n#\3#\5#\u0145\n#\5#\u0147\n#\3#\3#\5#\u014b"+ - "\n#\5#\u014d\n#\3#\3#\3#\5#\u0152\n#\5#\u0154\n#\3#\5#\u0157\n#\3$\3$"+ - "\3%\3%\3&\3&\3&\3&\3&\3&\7&\u0163\n&\f&\16&\u0166\13&\3&\3&\3\'\3\'\3"+ - "\'\3\'\3\'\3\'\3\'\3\'\3\'\7\'\u0173\n\'\f\'\16\'\u0176\13\'\3\'\3\'\5"+ - "\'\u017a\n\'\3\'\5\'\u017d\n\'\3\'\3\'\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3"+ - "*\3*\3*\3*\3*\3*\3*\5*\u0192\n*\3*\2\2+\2\4\6\b\n\f\16\20\22\24\26\30"+ - "\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPR\2\17\4\2^^\177\u0084\4\2"+ - "##JJ\4\2\6\6 \6\2\7\7\f\35!!\66\66\b\2\7\7\f\r\20\26\31\35!!\66\66\4"+ - "\2,,II\3\2)*\4\2aaxx\4\2bbzz\4\2__tt\3\2\678\3\2\177\u0080\3\2?A\2\u01d6"+ - "\2U\3\2\2\2\4b\3\2\2\2\6m\3\2\2\2\bo\3\2\2\2\nq\3\2\2\2\f\u0082\3\2\2"+ - "\2\16\u0084\3\2\2\2\20\u008e\3\2\2\2\22\u009a\3\2\2\2\24\u009e\3\2\2\2"+ - "\26\u00a0\3\2\2\2\30\u00b2\3\2\2\2\32\u00b4\3\2\2\2\34\u00bd\3\2\2\2\36"+ - "\u00c0\3\2\2\2 \u00c6\3\2\2\2\"\u00d4\3\2\2\2$\u00e5\3\2\2\2&\u00e8\3"+ - "\2\2\2(\u00ef\3\2\2\2*\u00f1\3\2\2\2,\u00f7\3\2\2\2.\u00ff\3\2\2\2\60"+ - "\u0103\3\2\2\2\62\u010e\3\2\2\2\64\u0112\3\2\2\2\66\u0116\3\2\2\28\u0125"+ - "\3\2\2\2:\u012e\3\2\2\2<\u0130\3\2\2\2>\u0132\3\2\2\2@\u0134\3\2\2\2B"+ - "\u0136\3\2\2\2D\u0156\3\2\2\2F\u0158\3\2\2\2H\u015a\3\2\2\2J\u015c\3\2"+ - "\2\2L\u0169\3\2\2\2N\u0180\3\2\2\2P\u0185\3\2\2\2R\u0191\3\2\2\2TV\5R"+ - "*\2UT\3\2\2\2VW\3\2\2\2WU\3\2\2\2WX\3\2\2\2XZ\3\2\2\2Y[\7\u0089\2\2ZY"+ - "\3\2\2\2Z[\3\2\2\2[\\\3\2\2\2\\]\7\2\2\3]\3\3\2\2\2^c\7~\2\2_c\5\6\4\2"+ - "`c\5\n\6\2ac\5\30\r\2b^\3\2\2\2b_\3\2\2\2b`\3\2\2\2ba\3\2\2\2c\5\3\2\2"+ - "\2df\5\66\34\2ed\3\2\2\2ef\3\2\2\2fg\3\2\2\2gn\7\u0086\2\2hn\7P\2\2ik"+ - "\5\66\34\2ji\3\2\2\2jk\3\2\2\2kl\3\2\2\2ln\5\b\5\2me\3\2\2\2mh\3\2\2\2"+ - "mj\3\2\2\2n\7\3\2\2\2op\t\2\2\2p\t\3\2\2\2qr\t\3\2\2r\13\3\2\2\2s\u0083"+ - "\7\u0088\2\2t\u0083\7\3\2\2u\u0083\7_\2\2v\u0083\7`\2\2w\u0083\7f\2\2"+ - "x\u0083\7a\2\2y\u0083\3\2\2\2z\u0083\7b\2\2{\u0083\7c\2\2|\u0083\7g\2"+ - "\2}\u0083\7d\2\2~\u0083\7h\2\2\177\u0083\7e\2\2\u0080\u0083\7i\2\2\u0081"+ - "\u0083\7\u0087\2\2\u0082s\3\2\2\2\u0082t\3\2\2\2\u0082u\3\2\2\2\u0082"+ - "v\3\2\2\2\u0082w\3\2\2\2\u0082x\3\2\2\2\u0082y\3\2\2\2\u0082z\3\2\2\2"+ - "\u0082{\3\2\2\2\u0082|\3\2\2\2\u0082}\3\2\2\2\u0082~\3\2\2\2\u0082\177"+ - "\3\2\2\2\u0082\u0080\3\2\2\2\u0082\u0081\3\2\2\2\u0083\r\3\2\2\2\u0084"+ - "\u0085\7\3\2\2\u0085\17\3\2\2\2\u0086\u0088\7M\2\2\u0087\u0089\7(\2\2"+ - "\u0088\u0087\3\2\2\2\u0088\u0089\3\2\2\2\u0089\u008f\3\2\2\2\u008a\u008c"+ - "\7N\2\2\u008b\u008d\7\5\2\2\u008c\u008b\3\2\2\2\u008c\u008d\3\2\2\2\u008d"+ - "\u008f\3\2\2\2\u008e\u0086\3\2\2\2\u008e\u008a\3\2\2\2\u008f\u0090\3\2"+ - "\2\2\u0090\u0097\5\22\n\2\u0091\u0093\7T\2\2\u0092\u0091\3\2\2\2\u0092"+ - "\u0093\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u0096\5\22\n\2\u0095\u0092\3"+ - "\2\2\2\u0096\u0099\3\2\2\2\u0097\u0095\3\2\2\2\u0097\u0098\3\2\2\2\u0098"+ - "\21\3\2\2\2\u0099\u0097\3\2\2\2\u009a\u009c\5\24\13\2\u009b\u009d\5\26"+ - "\f\2\u009c\u009b\3\2\2\2\u009c\u009d\3\2\2\2\u009d\23\3\2\2\2\u009e\u009f"+ - "\5\4\3\2\u009f\25\3\2\2\2\u00a0\u00a1\5\16\b\2\u00a1\u00a2\5\4\3\2\u00a2"+ - "\27\3\2\2\2\u00a3\u00a4\7\4\2\2\u00a4\u00b3\5\4\3\2\u00a5\u00b3\7%\2\2"+ - "\u00a6\u00b3\7&\2\2\u00a7\u00b3\7.\2\2\u00a8\u00b3\7/\2\2\u00a9\u00b3"+ - "\7\60\2\2\u00aa\u00b3\7\61\2\2\u00ab\u00b3\79\2\2\u00ac\u00b3\7:\2\2\u00ad"+ - "\u00b3\7C\2\2\u00ae\u00b3\7D\2\2\u00af\u00b3\7P\2\2\u00b0\u00b3\7Q\2\2"+ - "\u00b1\u00b3\7R\2\2\u00b2\u00a3\3\2\2\2\u00b2\u00a5\3\2\2\2\u00b2\u00a6"+ - "\3\2\2\2\u00b2\u00a7\3\2\2\2\u00b2\u00a8\3\2\2\2\u00b2\u00a9\3\2\2\2\u00b2"+ - "\u00aa\3\2\2\2\u00b2\u00ab\3\2\2\2\u00b2\u00ac\3\2\2\2\u00b2\u00ad\3\2"+ - "\2\2\u00b2\u00ae\3\2\2\2\u00b2\u00af\3\2\2\2\u00b2\u00b0\3\2\2\2\u00b2"+ - "\u00b1\3\2\2\2\u00b3\31\3\2\2\2\u00b4\u00b6\t\4\2\2\u00b5\u00b7\7+\2\2"+ - "\u00b6\u00b5\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00b9\3\2\2\2\u00b8\u00ba"+ - "\7(\2\2\u00b9\u00b8\3\2\2\2\u00b9\u00ba\3\2\2\2\u00ba\u00bb\3\2\2\2\u00bb"+ - "\u00bc\5\f\7\2\u00bc\33\3\2\2\2\u00bd\u00be\7H\2\2\u00be\u00bf\5\b\5\2"+ - "\u00bf\35\3\2\2\2\u00c0\u00c2\7\37\2\2\u00c1\u00c3\7\65\2\2\u00c2\u00c1"+ - "\3\2\2\2\u00c2\u00c3\3\2\2\2\u00c3\u00c4\3\2\2\2\u00c4\u00c5\5\f\7\2\u00c5"+ - "\37\3\2\2\2\u00c6\u00c8\7\'\2\2\u00c7\u00c9\7\t\2\2\u00c8\u00c7\3\2\2"+ - "\2\u00c8\u00c9\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00d1\5\f\7\2\u00cb\u00cd"+ - "\7T\2\2\u00cc\u00cb\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce"+ - "\u00d0\7\u0088\2\2\u00cf\u00cc\3\2\2\2\u00d0\u00d3\3\2\2\2\u00d1\u00cf"+ - "\3\2\2\2\u00d1\u00d2\3\2\2\2\u00d2!\3\2\2\2\u00d3\u00d1\3\2\2\2\u00d4"+ - "\u00d5\7\64\2\2\u00d5\u00d7\5\b\5\2\u00d6\u00d8\5\34\17\2\u00d7\u00d6"+ - "\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8\u00da\3\2\2\2\u00d9\u00db\7G\2\2\u00da"+ - "\u00d9\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dd\3\2\2\2\u00dc\u00de\5\36"+ - "\20\2\u00dd\u00dc\3\2\2\2\u00dd\u00de\3\2\2\2\u00de\u00e0\3\2\2\2\u00df"+ - "\u00e1\5\32\16\2\u00e0\u00df\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1\u00e3\3"+ - "\2\2\2\u00e2\u00e4\5 \21\2\u00e3\u00e2\3\2\2\2\u00e3\u00e4\3\2\2\2\u00e4"+ - "#\3\2\2\2\u00e5\u00e6\7;\2\2\u00e6\u00e7\5\f\7\2\u00e7%\3\2\2\2\u00e8"+ - "\u00e9\7<\2\2\u00e9\u00ed\5\f\7\2\u00ea\u00eb\5\16\b\2\u00eb\u00ec\5\f"+ - "\7\2\u00ec\u00ee\3\2\2\2\u00ed\u00ea\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee"+ - "\'\3\2\2\2\u00ef\u00f0\t\5\2\2\u00f0)\3\2\2\2\u00f1\u00f2\t\6\2\2\u00f2"+ - "+\3\2\2\2\u00f3\u00f5\7K\2\2\u00f4\u00f6\7(\2\2\u00f5\u00f4\3\2\2\2\u00f5"+ - "\u00f6\3\2\2\2\u00f6\u00f8\3\2\2\2\u00f7\u00f3\3\2\2\2\u00f7\u00f8\3\2"+ - "\2\2\u00f8\u00f9\3\2\2\2\u00f9\u00fa\5(\25\2\u00fa-\3\2\2\2\u00fb\u00fd"+ - "\7K\2\2\u00fc\u00fe\7(\2\2\u00fd\u00fc\3\2\2\2\u00fd\u00fe\3\2\2\2\u00fe"+ - "\u0100\3\2\2\2\u00ff\u00fb\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\u0101\3\2"+ - "\2\2\u0101\u0102\5*\26\2\u0102/\3\2\2\2\u0103\u0105\7B\2\2\u0104\u0106"+ - "\7(\2\2\u0105\u0104\3\2\2\2\u0105\u0106\3\2\2\2\u0106\u0107\3\2\2\2\u0107"+ - "\u0109\t\7\2\2\u0108\u010a\7>\2\2\u0109\u0108\3\2\2\2\u0109\u010a\3\2"+ - "\2\2\u010a\u010c\3\2\2\2\u010b\u010d\7\n\2\2\u010c\u010b\3\2\2\2\u010c"+ - "\u010d\3\2\2\2\u010d\61\3\2\2\2\u010e\u0110\t\b\2\2\u010f\u0111\7=\2\2"+ - "\u0110\u010f\3\2\2\2\u0110\u0111\3\2\2\2\u0111\63\3\2\2\2\u0112\u0113"+ - "\7\\\2\2\u0113\65\3\2\2\2\u0114\u0117\7X\2\2\u0115\u0117\7W\2\2\u0116"+ - "\u0114\3\2\2\2\u0116\u0115\3\2\2\2\u0117\67\3\2\2\2\u0118\u0126\7^\2\2"+ - "\u0119\u0126\7c\2\2\u011a\u0126\7`\2\2\u011b\u0126\7d\2\2\u011c\u0126"+ - "\7e\2\2\u011d\u0126\7j\2\2\u011e\u0126\7k\2\2\u011f\u0126\7l\2\2\u0120"+ - "\u0126\7m\2\2\u0121\u0126\7n\2\2\u0122\u0126\7o\2\2\u0123\u0126\7p\2\2"+ - "\u0124\u0126\7q\2\2\u0125\u0118\3\2\2\2\u0125\u0119\3\2\2\2\u0125\u011a"+ - "\3\2\2\2\u0125\u011b\3\2\2\2\u0125\u011c\3\2\2\2\u0125\u011d\3\2\2\2\u0125"+ - "\u011e\3\2\2\2\u0125\u011f\3\2\2\2\u0125\u0120\3\2\2\2\u0125\u0121\3\2"+ - "\2\2\u0125\u0122\3\2\2\2\u0125\u0123\3\2\2\2\u0125\u0124\3\2\2\2\u0126"+ - "9\3\2\2\2\u0127\u0129\5\66\34\2\u0128\u0127\3\2\2\2\u0128\u0129\3\2\2"+ - "\2\u0129\u012a\3\2\2\2\u012a\u012f\58\35\2\u012b\u012c\58\35\2\u012c\u012d"+ - "\5\66\34\2\u012d\u012f\3\2\2\2\u012e\u0128\3\2\2\2\u012e\u012b\3\2\2\2"+ - "\u012f;\3\2\2\2\u0130\u0131\t\t\2\2\u0131=\3\2\2\2\u0132\u0133\t\n\2\2"+ - "\u0133?\3\2\2\2\u0134\u0135\t\13\2\2\u0135A\3\2\2\2\u0136\u0137\t\f\2"+ - "\2\u0137C\3\2\2\2\u0138\u0146\5B\"\2\u0139\u0147\5<\37\2\u013a\u0147\5"+ - "@!\2\u013b\u0147\5> \2\u013c\u013e\5:\36\2\u013d\u013f\5,\27\2\u013e\u013d"+ - "\3\2\2\2\u013e\u013f\3\2\2\2\u013f\u0145\3\2\2\2\u0140\u0142\5,\27\2\u0141"+ - "\u0140\3\2\2\2\u0141\u0142\3\2\2\2\u0142\u0143\3\2\2\2\u0143\u0145\5:"+ - "\36\2\u0144\u013c\3\2\2\2\u0144\u0141\3\2\2\2\u0145\u0147\3\2\2\2\u0146"+ - "\u0139\3\2\2\2\u0146\u013a\3\2\2\2\u0146\u013b\3\2\2\2\u0146\u0144\3\2"+ - "\2\2\u0147\u0157\3\2\2\2\u0148\u014a\7K\2\2\u0149\u014b\7(\2\2\u014a\u0149"+ - "\3\2\2\2\u014a\u014b\3\2\2\2\u014b\u014d\3\2\2\2\u014c\u0148\3\2\2\2\u014c"+ - "\u014d\3\2\2\2\u014d\u014e\3\2\2\2\u014e\u0157\7\16\2\2\u014f\u0151\7"+ - "K\2\2\u0150\u0152\7(\2\2\u0151\u0150\3\2\2\2\u0151\u0152\3\2\2\2\u0152"+ - "\u0154\3\2\2\2\u0153\u014f\3\2\2\2\u0153\u0154\3\2\2\2\u0154\u0155\3\2"+ - "\2\2\u0155\u0157\7\17\2\2\u0156\u0138\3\2\2\2\u0156\u014c\3\2\2\2\u0156"+ - "\u0153\3\2\2\2\u0157E\3\2\2\2\u0158\u0159\t\r\2\2\u0159G\3\2\2\2\u015a"+ - "\u015b\t\16\2\2\u015bI\3\2\2\2\u015c\u015d\5F$\2\u015d\u0164\5\f\7\2\u015e"+ - "\u0163\5$\23\2\u015f\u0163\5.\30\2\u0160\u0163\5\"\22\2\u0161\u0163\5"+ - "\20\t\2\u0162\u015e\3\2\2\2\u0162\u015f\3\2\2\2\u0162\u0160\3\2\2\2\u0162"+ - "\u0161\3\2\2\2\u0163\u0166\3\2\2\2\u0164\u0162\3\2\2\2\u0164\u0165\3\2"+ - "\2\2\u0165\u0167\3\2\2\2\u0166\u0164\3\2\2\2\u0167\u0168\5\64\33\2\u0168"+ - "K\3\2\2\2\u0169\u016a\5F$\2\u016a\u0174\5\f\7\2\u016b\u0173\5\62\32\2"+ - "\u016c\u0173\5\"\22\2\u016d\u0173\5D#\2\u016e\u0173\5$\23\2\u016f\u0173"+ - "\5,\27\2\u0170\u0173\5\20\t\2\u0171\u0173\5\60\31\2\u0172\u016b\3\2\2"+ - "\2\u0172\u016c\3\2\2\2\u0172\u016d\3\2\2\2\u0172\u016e\3\2\2\2\u0172\u016f"+ - "\3\2\2\2\u0172\u0170\3\2\2\2\u0172\u0171\3\2\2\2\u0173\u0176\3\2\2\2\u0174"+ - "\u0172\3\2\2\2\u0174\u0175\3\2\2\2\u0175\u017c\3\2\2\2\u0176\u0174\3\2"+ - "\2\2\u0177\u0179\7\b\2\2\u0178\u017a\7O\2\2\u0179\u0178\3\2\2\2\u0179"+ - "\u017a\3\2\2\2\u017a\u017b\3\2\2\2\u017b\u017d\7P\2\2\u017c\u0177\3\2"+ - "\2\2\u017c\u017d\3\2\2\2\u017d\u017e\3\2\2\2\u017e\u017f\5\64\33\2\u017f"+ - "M\3\2\2\2\u0180\u0181\7\u0081\2\2\u0181\u0182\5\f\7\2\u0182\u0183\5&\24"+ - "\2\u0183\u0184\5\64\33\2\u0184O\3\2\2\2\u0185\u0186\7\u0083\2\2\u0186"+ - "\u0187\5\f\7\2\u0187\u0188\5\20\t\2\u0188\u0189\5\64\33\2\u0189Q\3\2\2"+ - "\2\u018a\u0192\7]\2\2\u018b\u0192\5J&\2\u018c\u0192\5L\'\2\u018d\u0192"+ - "\5N(\2\u018e\u0192\5P)\2\u018f\u0192\5H%\2\u0190\u0192\5\64\33\2\u0191"+ - "\u018a\3\2\2\2\u0191\u018b\3\2\2\2\u0191\u018c\3\2\2\2\u0191\u018d\3\2"+ - "\2\2\u0191\u018e\3\2\2\2\u0191\u018f\3\2\2\2\u0191\u0190\3\2\2\2\u0192"+ - "S\3\2\2\28WZbejm\u0082\u0088\u008c\u008e\u0092\u0097\u009c\u00b2\u00b6"+ - "\u00b9\u00c2\u00c8\u00cc\u00d1\u00d7\u00da\u00dd\u00e0\u00e3\u00ed\u00f5"+ - "\u00f7\u00fd\u00ff\u0105\u0109\u010c\u0110\u0116\u0125\u0128\u012e\u013e"+ - "\u0141\u0144\u0146\u014a\u014c\u0151\u0153\u0156\u0162\u0164\u0172\u0174"+ - "\u0179\u017c\u0191"; + "\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\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\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\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\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\3\7\3\7\3\7\3\7\5\7\u00c6\n\7\3\b\3\b\3\t\3\t\5\t\u00cc"+ + "\n\t\3\t\3\t\5\t\u00d0\n\t\5\t\u00d2\n\t\3\t\3\t\5\t\u00d6\n\t\3\t\7\t"+ + "\u00d9\n\t\f\t\16\t\u00dc\13\t\3\n\3\n\5\n\u00e0\n\n\3\13\3\13\3\f\3\f"+ + "\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u00f6"+ + "\n\r\3\16\3\16\5\16\u00fa\n\16\3\16\5\16\u00fd\n\16\3\16\3\16\3\17\3\17"+ + "\3\17\3\20\3\20\5\20\u0106\n\20\3\20\3\20\3\21\3\21\5\21\u010c\n\21\3"+ + "\21\3\21\5\21\u0110\n\21\3\21\7\21\u0113\n\21\f\21\16\21\u0116\13\21\3"+ + "\22\3\22\3\22\5\22\u011b\n\22\3\22\5\22\u011e\n\22\3\22\5\22\u0121\n\22"+ + "\3\22\5\22\u0124\n\22\3\22\5\22\u0127\n\22\3\23\3\23\3\23\3\24\3\24\3"+ + "\24\3\24\3\24\5\24\u0131\n\24\3\25\3\25\3\26\3\26\3\27\3\27\5\27\u0139"+ + "\n\27\5\27\u013b\n\27\3\27\3\27\3\30\3\30\5\30\u0141\n\30\5\30\u0143\n"+ + "\30\3\30\3\30\3\31\3\31\5\31\u0149\n\31\3\31\3\31\5\31\u014d\n\31\3\31"+ + "\5\31\u0150\n\31\3\32\3\32\5\32\u0154\n\32\3\33\3\33\3\34\3\34\5\34\u015a"+ + "\n\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35"+ + "\5\35\u0169\n\35\3\36\5\36\u016c\n\36\3\36\3\36\3\36\3\36\5\36\u0172\n"+ + "\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3#\3#\3#\3#\5#\u0182\n#\3#\5#"+ + "\u0185\n#\3#\5#\u0188\n#\5#\u018a\n#\3#\3#\5#\u018e\n#\5#\u0190\n#\3#"+ + "\3#\3#\5#\u0195\n#\5#\u0197\n#\3#\5#\u019a\n#\3$\3$\3%\3%\3&\3&\3&\3&"+ + "\3&\3&\7&\u01a6\n&\f&\16&\u01a9\13&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3\'"+ + "\3\'\3\'\7\'\u01b6\n\'\f\'\16\'\u01b9\13\'\3\'\3\'\5\'\u01bd\n\'\3\'\5"+ + "\'\u01c0\n\'\3\'\3\'\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3*\3*\3*\3*\3*\3*\3"+ + "*\5*\u01d5\n*\3*\2\2+\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,."+ + "\60\62\64\668:<>@BDFHJLNPR\2\17\4\2^^\177\u0084\4\2##JJ\4\2\6\6 \6\2"+ + "\7\7\f\35!!\66\66\b\2\7\7\f\r\20\26\31\35!!\66\66\4\2,,II\3\2)*\4\2aa"+ + "xx\4\2bbzz\4\2__tt\3\2\678\3\2\177\u0080\3\2?A\2\u025c\2U\3\2\2\2\4b\3"+ + "\2\2\2\6m\3\2\2\2\bo\3\2\2\2\nq\3\2\2\2\f\u00c5\3\2\2\2\16\u00c7\3\2\2"+ + "\2\20\u00d1\3\2\2\2\22\u00dd\3\2\2\2\24\u00e1\3\2\2\2\26\u00e3\3\2\2\2"+ + "\30\u00f5\3\2\2\2\32\u00f7\3\2\2\2\34\u0100\3\2\2\2\36\u0103\3\2\2\2 "+ + "\u0109\3\2\2\2\"\u0117\3\2\2\2$\u0128\3\2\2\2&\u012b\3\2\2\2(\u0132\3"+ + "\2\2\2*\u0134\3\2\2\2,\u013a\3\2\2\2.\u0142\3\2\2\2\60\u0146\3\2\2\2\62"+ + "\u0151\3\2\2\2\64\u0155\3\2\2\2\66\u0159\3\2\2\28\u0168\3\2\2\2:\u0171"+ + "\3\2\2\2<\u0173\3\2\2\2>\u0175\3\2\2\2@\u0177\3\2\2\2B\u0179\3\2\2\2D"+ + "\u0199\3\2\2\2F\u019b\3\2\2\2H\u019d\3\2\2\2J\u019f\3\2\2\2L\u01ac\3\2"+ + "\2\2N\u01c3\3\2\2\2P\u01c8\3\2\2\2R\u01d4\3\2\2\2TV\5R*\2UT\3\2\2\2VW"+ + "\3\2\2\2WU\3\2\2\2WX\3\2\2\2XZ\3\2\2\2Y[\7\u0089\2\2ZY\3\2\2\2Z[\3\2\2"+ + "\2[\\\3\2\2\2\\]\7\2\2\3]\3\3\2\2\2^c\7~\2\2_c\5\6\4\2`c\5\n\6\2ac\5\30"+ + "\r\2b^\3\2\2\2b_\3\2\2\2b`\3\2\2\2ba\3\2\2\2c\5\3\2\2\2df\5\66\34\2ed"+ + "\3\2\2\2ef\3\2\2\2fg\3\2\2\2gn\7\u0086\2\2hn\7P\2\2ik\5\66\34\2ji\3\2"+ + "\2\2jk\3\2\2\2kl\3\2\2\2ln\5\b\5\2me\3\2\2\2mh\3\2\2\2mj\3\2\2\2n\7\3"+ + "\2\2\2op\t\2\2\2p\t\3\2\2\2qr\t\3\2\2r\13\3\2\2\2s\u00c6\7\u0088\2\2t"+ + "\u00c6\7\3\2\2u\u00c6\7_\2\2v\u00c6\7`\2\2w\u00c6\7f\2\2x\u00c6\7a\2\2"+ + "y\u00c6\3\2\2\2z\u00c6\7b\2\2{\u00c6\7c\2\2|\u00c6\7g\2\2}\u00c6\7d\2"+ + "\2~\u00c6\7h\2\2\177\u00c6\7e\2\2\u0080\u00c6\7i\2\2\u0081\u00c6\7\u0087"+ + "\2\2\u0082\u00c6\7B\2\2\u0083\u00c6\7,\2\2\u0084\u00c6\7I\2\2\u0085\u00c6"+ + "\7>\2\2\u0086\u00c6\7\n\2\2\u0087\u00c6\7\6\2\2\u0088\u00c6\7 \2\2\u0089"+ + "\u00c6\7+\2\2\u008a\u00c6\7\7\2\2\u008b\u00c6\7!\2\2\u008c\u00c6\7\66"+ + "\2\2\u008d\u00c6\7\25\2\2\u008e\u00c6\7\26\2\2\u008f\u00c6\7\27\2\2\u0090"+ + "\u00c6\7\30\2\2\u0091\u00c6\7\31\2\2\u0092\u00c6\7\32\2\2\u0093\u00c6"+ + "\7\33\2\2\u0094\u00c6\7\34\2\2\u0095\u00c6\7\35\2\2\u0096\u00c6\7\f\2"+ + "\2\u0097\u00c6\7\r\2\2\u0098\u00c6\7\16\2\2\u0099\u00c6\7\17\2\2\u009a"+ + "\u00c6\7\20\2\2\u009b\u00c6\7\21\2\2\u009c\u00c6\7\22\2\2\u009d\u00c6"+ + "\7\23\2\2\u009e\u00c6\7\24\2\2\u009f\u00c6\7;\2\2\u00a0\u00c6\7<\2\2\u00a1"+ + "\u00c6\7M\2\2\u00a2\u00c6\7N\2\2\u00a3\u00c6\7\64\2\2\u00a4\u00c6\7G\2"+ + "\2\u00a5\u00c6\7\37\2\2\u00a6\u00c6\7\'\2\2\u00a7\u00c6\7\b\2\2\u00a8"+ + "\u00c6\7P\2\2\u00a9\u00c6\7Q\2\2\u00aa\u00c6\7R\2\2\u00ab\u00c6\7C\2\2"+ + "\u00ac\u00c6\7D\2\2\u00ad\u00c6\7%\2\2\u00ae\u00c6\7&\2\2\u00af\u00c6"+ + "\7.\2\2\u00b0\u00c6\7/\2\2\u00b1\u00c6\7\60\2\2\u00b2\u00c6\7\61\2\2\u00b3"+ + "\u00c6\79\2\2\u00b4\u00c6\7:\2\2\u00b5\u00c6\7*\2\2\u00b6\u00c6\7)\2\2"+ + "\u00b7\u00c6\7=\2\2\u00b8\u00c6\78\2\2\u00b9\u00c6\7\67\2\2\u00ba\u00c6"+ + "\7J\2\2\u00bb\u00c6\7#\2\2\u00bc\u00c6\7\5\2\2\u00bd\u00c6\7(\2\2\u00be"+ + "\u00c6\7\65\2\2\u00bf\u00c6\7\t\2\2\u00c0\u00c6\7O\2\2\u00c1\u00c6\7H"+ + "\2\2\u00c2\u00c6\7\4\2\2\u00c3\u00c6\7K\2\2\u00c4\u00c6\7$\2\2\u00c5s"+ + "\3\2\2\2\u00c5t\3\2\2\2\u00c5u\3\2\2\2\u00c5v\3\2\2\2\u00c5w\3\2\2\2\u00c5"+ + "x\3\2\2\2\u00c5y\3\2\2\2\u00c5z\3\2\2\2\u00c5{\3\2\2\2\u00c5|\3\2\2\2"+ + "\u00c5}\3\2\2\2\u00c5~\3\2\2\2\u00c5\177\3\2\2\2\u00c5\u0080\3\2\2\2\u00c5"+ + "\u0081\3\2\2\2\u00c5\u0082\3\2\2\2\u00c5\u0083\3\2\2\2\u00c5\u0084\3\2"+ + "\2\2\u00c5\u0085\3\2\2\2\u00c5\u0086\3\2\2\2\u00c5\u0087\3\2\2\2\u00c5"+ + "\u0088\3\2\2\2\u00c5\u0089\3\2\2\2\u00c5\u008a\3\2\2\2\u00c5\u008b\3\2"+ + "\2\2\u00c5\u008c\3\2\2\2\u00c5\u008d\3\2\2\2\u00c5\u008e\3\2\2\2\u00c5"+ + "\u008f\3\2\2\2\u00c5\u0090\3\2\2\2\u00c5\u0091\3\2\2\2\u00c5\u0092\3\2"+ + "\2\2\u00c5\u0093\3\2\2\2\u00c5\u0094\3\2\2\2\u00c5\u0095\3\2\2\2\u00c5"+ + "\u0096\3\2\2\2\u00c5\u0097\3\2\2\2\u00c5\u0098\3\2\2\2\u00c5\u0099\3\2"+ + "\2\2\u00c5\u009a\3\2\2\2\u00c5\u009b\3\2\2\2\u00c5\u009c\3\2\2\2\u00c5"+ + "\u009d\3\2\2\2\u00c5\u009e\3\2\2\2\u00c5\u009f\3\2\2\2\u00c5\u00a0\3\2"+ + "\2\2\u00c5\u00a1\3\2\2\2\u00c5\u00a2\3\2\2\2\u00c5\u00a3\3\2\2\2\u00c5"+ + "\u00a4\3\2\2\2\u00c5\u00a5\3\2\2\2\u00c5\u00a6\3\2\2\2\u00c5\u00a7\3\2"+ + "\2\2\u00c5\u00a8\3\2\2\2\u00c5\u00a9\3\2\2\2\u00c5\u00aa\3\2\2\2\u00c5"+ + "\u00ab\3\2\2\2\u00c5\u00ac\3\2\2\2\u00c5\u00ad\3\2\2\2\u00c5\u00ae\3\2"+ + "\2\2\u00c5\u00af\3\2\2\2\u00c5\u00b0\3\2\2\2\u00c5\u00b1\3\2\2\2\u00c5"+ + "\u00b2\3\2\2\2\u00c5\u00b3\3\2\2\2\u00c5\u00b4\3\2\2\2\u00c5\u00b5\3\2"+ + "\2\2\u00c5\u00b6\3\2\2\2\u00c5\u00b7\3\2\2\2\u00c5\u00b8\3\2\2\2\u00c5"+ + "\u00b9\3\2\2\2\u00c5\u00ba\3\2\2\2\u00c5\u00bb\3\2\2\2\u00c5\u00bc\3\2"+ + "\2\2\u00c5\u00bd\3\2\2\2\u00c5\u00be\3\2\2\2\u00c5\u00bf\3\2\2\2\u00c5"+ + "\u00c0\3\2\2\2\u00c5\u00c1\3\2\2\2\u00c5\u00c2\3\2\2\2\u00c5\u00c3\3\2"+ + "\2\2\u00c5\u00c4\3\2\2\2\u00c6\r\3\2\2\2\u00c7\u00c8\7\3\2\2\u00c8\17"+ + "\3\2\2\2\u00c9\u00cb\7M\2\2\u00ca\u00cc\7(\2\2\u00cb\u00ca\3\2\2\2\u00cb"+ + "\u00cc\3\2\2\2\u00cc\u00d2\3\2\2\2\u00cd\u00cf\7N\2\2\u00ce\u00d0\7\5"+ + "\2\2\u00cf\u00ce\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0\u00d2\3\2\2\2\u00d1"+ + "\u00c9\3\2\2\2\u00d1\u00cd\3\2\2\2\u00d2\u00d3\3\2\2\2\u00d3\u00da\5\22"+ + "\n\2\u00d4\u00d6\7T\2\2\u00d5\u00d4\3\2\2\2\u00d5\u00d6\3\2\2\2\u00d6"+ + "\u00d7\3\2\2\2\u00d7\u00d9\5\22\n\2\u00d8\u00d5\3\2\2\2\u00d9\u00dc\3"+ + "\2\2\2\u00da\u00d8\3\2\2\2\u00da\u00db\3\2\2\2\u00db\21\3\2\2\2\u00dc"+ + "\u00da\3\2\2\2\u00dd\u00df\5\24\13\2\u00de\u00e0\5\26\f\2\u00df\u00de"+ + "\3\2\2\2\u00df\u00e0\3\2\2\2\u00e0\23\3\2\2\2\u00e1\u00e2\5\4\3\2\u00e2"+ + "\25\3\2\2\2\u00e3\u00e4\5\16\b\2\u00e4\u00e5\5\4\3\2\u00e5\27\3\2\2\2"+ + "\u00e6\u00e7\7\4\2\2\u00e7\u00f6\5\4\3\2\u00e8\u00f6\7%\2\2\u00e9\u00f6"+ + "\7&\2\2\u00ea\u00f6\7.\2\2\u00eb\u00f6\7/\2\2\u00ec\u00f6\7\60\2\2\u00ed"+ + "\u00f6\7\61\2\2\u00ee\u00f6\79\2\2\u00ef\u00f6\7:\2\2\u00f0\u00f6\7C\2"+ + "\2\u00f1\u00f6\7D\2\2\u00f2\u00f6\7P\2\2\u00f3\u00f6\7Q\2\2\u00f4\u00f6"+ + "\7R\2\2\u00f5\u00e6\3\2\2\2\u00f5\u00e8\3\2\2\2\u00f5\u00e9\3\2\2\2\u00f5"+ + "\u00ea\3\2\2\2\u00f5\u00eb\3\2\2\2\u00f5\u00ec\3\2\2\2\u00f5\u00ed\3\2"+ + "\2\2\u00f5\u00ee\3\2\2\2\u00f5\u00ef\3\2\2\2\u00f5\u00f0\3\2\2\2\u00f5"+ + "\u00f1\3\2\2\2\u00f5\u00f2\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f5\u00f4\3\2"+ + "\2\2\u00f6\31\3\2\2\2\u00f7\u00f9\t\4\2\2\u00f8\u00fa\7+\2\2\u00f9\u00f8"+ + "\3\2\2\2\u00f9\u00fa\3\2\2\2\u00fa\u00fc\3\2\2\2\u00fb\u00fd\7(\2\2\u00fc"+ + "\u00fb\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\u00fe\3\2\2\2\u00fe\u00ff\5\f"+ + "\7\2\u00ff\33\3\2\2\2\u0100\u0101\7H\2\2\u0101\u0102\5\b\5\2\u0102\35"+ + "\3\2\2\2\u0103\u0105\7\37\2\2\u0104\u0106\7\65\2\2\u0105\u0104\3\2\2\2"+ + "\u0105\u0106\3\2\2\2\u0106\u0107\3\2\2\2\u0107\u0108\5\f\7\2\u0108\37"+ + "\3\2\2\2\u0109\u010b\7\'\2\2\u010a\u010c\7\t\2\2\u010b\u010a\3\2\2\2\u010b"+ + "\u010c\3\2\2\2\u010c\u010d\3\2\2\2\u010d\u0114\5\f\7\2\u010e\u0110\7T"+ + "\2\2\u010f\u010e\3\2\2\2\u010f\u0110\3\2\2\2\u0110\u0111\3\2\2\2\u0111"+ + "\u0113\7\u0088\2\2\u0112\u010f\3\2\2\2\u0113\u0116\3\2\2\2\u0114\u0112"+ + "\3\2\2\2\u0114\u0115\3\2\2\2\u0115!\3\2\2\2\u0116\u0114\3\2\2\2\u0117"+ + "\u0118\7\64\2\2\u0118\u011a\5\b\5\2\u0119\u011b\5\34\17\2\u011a\u0119"+ + "\3\2\2\2\u011a\u011b\3\2\2\2\u011b\u011d\3\2\2\2\u011c\u011e\7G\2\2\u011d"+ + "\u011c\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u0120\3\2\2\2\u011f\u0121\5\36"+ + "\20\2\u0120\u011f\3\2\2\2\u0120\u0121\3\2\2\2\u0121\u0123\3\2\2\2\u0122"+ + "\u0124\5\32\16\2\u0123\u0122\3\2\2\2\u0123\u0124\3\2\2\2\u0124\u0126\3"+ + "\2\2\2\u0125\u0127\5 \21\2\u0126\u0125\3\2\2\2\u0126\u0127\3\2\2\2\u0127"+ + "#\3\2\2\2\u0128\u0129\7;\2\2\u0129\u012a\5\f\7\2\u012a%\3\2\2\2\u012b"+ + "\u012c\7<\2\2\u012c\u0130\5\f\7\2\u012d\u012e\5\16\b\2\u012e\u012f\5\f"+ + "\7\2\u012f\u0131\3\2\2\2\u0130\u012d\3\2\2\2\u0130\u0131\3\2\2\2\u0131"+ + "\'\3\2\2\2\u0132\u0133\t\5\2\2\u0133)\3\2\2\2\u0134\u0135\t\6\2\2\u0135"+ + "+\3\2\2\2\u0136\u0138\7K\2\2\u0137\u0139\7(\2\2\u0138\u0137\3\2\2\2\u0138"+ + "\u0139\3\2\2\2\u0139\u013b\3\2\2\2\u013a\u0136\3\2\2\2\u013a\u013b\3\2"+ + "\2\2\u013b\u013c\3\2\2\2\u013c\u013d\5(\25\2\u013d-\3\2\2\2\u013e\u0140"+ + "\7K\2\2\u013f\u0141\7(\2\2\u0140\u013f\3\2\2\2\u0140\u0141\3\2\2\2\u0141"+ + "\u0143\3\2\2\2\u0142\u013e\3\2\2\2\u0142\u0143\3\2\2\2\u0143\u0144\3\2"+ + "\2\2\u0144\u0145\5*\26\2\u0145/\3\2\2\2\u0146\u0148\7B\2\2\u0147\u0149"+ + "\7(\2\2\u0148\u0147\3\2\2\2\u0148\u0149\3\2\2\2\u0149\u014a\3\2\2\2\u014a"+ + "\u014c\t\7\2\2\u014b\u014d\7>\2\2\u014c\u014b\3\2\2\2\u014c\u014d\3\2"+ + "\2\2\u014d\u014f\3\2\2\2\u014e\u0150\7\n\2\2\u014f\u014e\3\2\2\2\u014f"+ + "\u0150\3\2\2\2\u0150\61\3\2\2\2\u0151\u0153\t\b\2\2\u0152\u0154\7=\2\2"+ + "\u0153\u0152\3\2\2\2\u0153\u0154\3\2\2\2\u0154\63\3\2\2\2\u0155\u0156"+ + "\7\\\2\2\u0156\65\3\2\2\2\u0157\u015a\7X\2\2\u0158\u015a\7W\2\2\u0159"+ + "\u0157\3\2\2\2\u0159\u0158\3\2\2\2\u015a\67\3\2\2\2\u015b\u0169\7^\2\2"+ + "\u015c\u0169\7c\2\2\u015d\u0169\7`\2\2\u015e\u0169\7d\2\2\u015f\u0169"+ + "\7e\2\2\u0160\u0169\7j\2\2\u0161\u0169\7k\2\2\u0162\u0169\7l\2\2\u0163"+ + "\u0169\7m\2\2\u0164\u0169\7n\2\2\u0165\u0169\7o\2\2\u0166\u0169\7p\2\2"+ + "\u0167\u0169\7q\2\2\u0168\u015b\3\2\2\2\u0168\u015c\3\2\2\2\u0168\u015d"+ + "\3\2\2\2\u0168\u015e\3\2\2\2\u0168\u015f\3\2\2\2\u0168\u0160\3\2\2\2\u0168"+ + "\u0161\3\2\2\2\u0168\u0162\3\2\2\2\u0168\u0163\3\2\2\2\u0168\u0164\3\2"+ + "\2\2\u0168\u0165\3\2\2\2\u0168\u0166\3\2\2\2\u0168\u0167\3\2\2\2\u0169"+ + "9\3\2\2\2\u016a\u016c\5\66\34\2\u016b\u016a\3\2\2\2\u016b\u016c\3\2\2"+ + "\2\u016c\u016d\3\2\2\2\u016d\u0172\58\35\2\u016e\u016f\58\35\2\u016f\u0170"+ + "\5\66\34\2\u0170\u0172\3\2\2\2\u0171\u016b\3\2\2\2\u0171\u016e\3\2\2\2"+ + "\u0172;\3\2\2\2\u0173\u0174\t\t\2\2\u0174=\3\2\2\2\u0175\u0176\t\n\2\2"+ + "\u0176?\3\2\2\2\u0177\u0178\t\13\2\2\u0178A\3\2\2\2\u0179\u017a\t\f\2"+ + "\2\u017aC\3\2\2\2\u017b\u0189\5B\"\2\u017c\u018a\5<\37\2\u017d\u018a\5"+ + "@!\2\u017e\u018a\5> \2\u017f\u0181\5:\36\2\u0180\u0182\5,\27\2\u0181\u0180"+ + "\3\2\2\2\u0181\u0182\3\2\2\2\u0182\u0188\3\2\2\2\u0183\u0185\5,\27\2\u0184"+ + "\u0183\3\2\2\2\u0184\u0185\3\2\2\2\u0185\u0186\3\2\2\2\u0186\u0188\5:"+ + "\36\2\u0187\u017f\3\2\2\2\u0187\u0184\3\2\2\2\u0188\u018a\3\2\2\2\u0189"+ + "\u017c\3\2\2\2\u0189\u017d\3\2\2\2\u0189\u017e\3\2\2\2\u0189\u0187\3\2"+ + "\2\2\u018a\u019a\3\2\2\2\u018b\u018d\7K\2\2\u018c\u018e\7(\2\2\u018d\u018c"+ + "\3\2\2\2\u018d\u018e\3\2\2\2\u018e\u0190\3\2\2\2\u018f\u018b\3\2\2\2\u018f"+ + "\u0190\3\2\2\2\u0190\u0191\3\2\2\2\u0191\u019a\7\16\2\2\u0192\u0194\7"+ + "K\2\2\u0193\u0195\7(\2\2\u0194\u0193\3\2\2\2\u0194\u0195\3\2\2\2\u0195"+ + "\u0197\3\2\2\2\u0196\u0192\3\2\2\2\u0196\u0197\3\2\2\2\u0197\u0198\3\2"+ + "\2\2\u0198\u019a\7\17\2\2\u0199\u017b\3\2\2\2\u0199\u018f\3\2\2\2\u0199"+ + "\u0196\3\2\2\2\u019aE\3\2\2\2\u019b\u019c\t\r\2\2\u019cG\3\2\2\2\u019d"+ + "\u019e\t\16\2\2\u019eI\3\2\2\2\u019f\u01a0\5F$\2\u01a0\u01a7\5\f\7\2\u01a1"+ + "\u01a6\5$\23\2\u01a2\u01a6\5.\30\2\u01a3\u01a6\5\"\22\2\u01a4\u01a6\5"+ + "\20\t\2\u01a5\u01a1\3\2\2\2\u01a5\u01a2\3\2\2\2\u01a5\u01a3\3\2\2\2\u01a5"+ + "\u01a4\3\2\2\2\u01a6\u01a9\3\2\2\2\u01a7\u01a5\3\2\2\2\u01a7\u01a8\3\2"+ + "\2\2\u01a8\u01aa\3\2\2\2\u01a9\u01a7\3\2\2\2\u01aa\u01ab\5\64\33\2\u01ab"+ + "K\3\2\2\2\u01ac\u01ad\5F$\2\u01ad\u01b7\5\f\7\2\u01ae\u01b6\5\62\32\2"+ + "\u01af\u01b6\5\"\22\2\u01b0\u01b6\5D#\2\u01b1\u01b6\5$\23\2\u01b2\u01b6"+ + "\5,\27\2\u01b3\u01b6\5\20\t\2\u01b4\u01b6\5\60\31\2\u01b5\u01ae\3\2\2"+ + "\2\u01b5\u01af\3\2\2\2\u01b5\u01b0\3\2\2\2\u01b5\u01b1\3\2\2\2\u01b5\u01b2"+ + "\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b5\u01b4\3\2\2\2\u01b6\u01b9\3\2\2\2\u01b7"+ + "\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u01bf\3\2\2\2\u01b9\u01b7\3\2"+ + "\2\2\u01ba\u01bc\7\b\2\2\u01bb\u01bd\7O\2\2\u01bc\u01bb\3\2\2\2\u01bc"+ + "\u01bd\3\2\2\2\u01bd\u01be\3\2\2\2\u01be\u01c0\7P\2\2\u01bf\u01ba\3\2"+ + "\2\2\u01bf\u01c0\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01c2\5\64\33\2\u01c2"+ + "M\3\2\2\2\u01c3\u01c4\7\u0081\2\2\u01c4\u01c5\5\f\7\2\u01c5\u01c6\5&\24"+ + "\2\u01c6\u01c7\5\64\33\2\u01c7O\3\2\2\2\u01c8\u01c9\7\u0083\2\2\u01c9"+ + "\u01ca\5\f\7\2\u01ca\u01cb\5\20\t\2\u01cb\u01cc\5\64\33\2\u01ccQ\3\2\2"+ + "\2\u01cd\u01d5\7]\2\2\u01ce\u01d5\5J&\2\u01cf\u01d5\5L\'\2\u01d0\u01d5"+ + "\5N(\2\u01d1\u01d5\5P)\2\u01d2\u01d5\5H%\2\u01d3\u01d5\5\64\33\2\u01d4"+ + "\u01cd\3\2\2\2\u01d4\u01ce\3\2\2\2\u01d4\u01cf\3\2\2\2\u01d4\u01d0\3\2"+ + "\2\2\u01d4\u01d1\3\2\2\2\u01d4\u01d2\3\2\2\2\u01d4\u01d3\3\2\2\2\u01d5"+ + "S\3\2\2\28WZbejm\u00c5\u00cb\u00cf\u00d1\u00d5\u00da\u00df\u00f5\u00f9"+ + "\u00fc\u0105\u010b\u010f\u0114\u011a\u011d\u0120\u0123\u0126\u0130\u0138"+ + "\u013a\u0140\u0142\u0148\u014c\u014f\u0153\u0159\u0168\u016b\u0171\u0181"+ + "\u0184\u0187\u0189\u018d\u018f\u0194\u0196\u0199\u01a5\u01a7\u01b5\u01b7"+ + "\u01bc\u01bf\u01d4"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserBaseVisitor.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserBaseVisitor.java index 6f9fa230..c57b0f6b 100644 --- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserBaseVisitor.java +++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserBaseVisitor.java @@ -14,7 +14,7 @@ * limitations under the License. */ -// Generated from copybookParser.g4 by ANTLR 4.8 +// Generated from copybookParser.g4 by ANTLR 4.9.3 package za.co.absa.cobrix.cobol.parser.antlr; import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserVisitor.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserVisitor.java index 93ef1e7e..7d526598 100644 --- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserVisitor.java +++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/copybookParserVisitor.java @@ -14,7 +14,7 @@ * limitations under the License. */ -// Generated from copybookParser.g4 by ANTLR 4.8 +// Generated from copybookParser.g4 by ANTLR 4.9.3 package za.co.absa.cobrix.cobol.parser.antlr; import org.antlr.v4.runtime.tree.ParseTreeVisitor; diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonBaseVisitor.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonBaseVisitor.java index cc734738..c102ce93 100644 --- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonBaseVisitor.java +++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonBaseVisitor.java @@ -14,7 +14,7 @@ * limitations under the License. */ -// Generated from json.g4 by ANTLR 4.8 +// Generated from json.g4 by ANTLR 4.9.3 package za.co.absa.cobrix.cobol.parser.antlr; import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonLexer.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonLexer.java index 38da8c8c..6ccebe94 100644 --- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonLexer.java +++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonLexer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -// Generated from json.g4 by ANTLR 4.8 +// Generated from json.g4 by ANTLR 4.9.3 package za.co.absa.cobrix.cobol.parser.antlr; import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonParser.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonParser.java index d86c6aa8..e925c94a 100644 --- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonParser.java +++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonParser.java @@ -14,7 +14,7 @@ * limitations under the License. */ -// Generated from json.g4 by ANTLR 4.8 +// Generated from json.g4 by ANTLR 4.9.3 package za.co.absa.cobrix.cobol.parser.antlr; import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; diff --git a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonVisitor.java b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonVisitor.java index 15fbad29..10f8a931 100644 --- a/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonVisitor.java +++ b/cobol-parser/src/main/scala/za/co/absa/cobrix/cobol/parser/antlr/jsonVisitor.java @@ -14,7 +14,7 @@ * limitations under the License. */ -// Generated from json.g4 by ANTLR 4.8 +// Generated from json.g4 by ANTLR 4.9.3 package za.co.absa.cobrix.cobol.parser.antlr; import org.antlr.v4.runtime.tree.ParseTreeVisitor; diff --git a/cobol-parser/src/test/scala/za/co/absa/cobrix/cobol/parser/parse/SyntaxErrorsSpec.scala b/cobol-parser/src/test/scala/za/co/absa/cobrix/cobol/parser/parse/SyntaxErrorsSpec.scala index cabc80a2..b6940995 100644 --- a/cobol-parser/src/test/scala/za/co/absa/cobrix/cobol/parser/parse/SyntaxErrorsSpec.scala +++ b/cobol-parser/src/test/scala/za/co/absa/cobrix/cobol/parser/parse/SyntaxErrorsSpec.scala @@ -17,11 +17,15 @@ package za.co.absa.cobrix.cobol.parser.parse import org.scalatest.funsuite.AnyFunSuite +import org.slf4j.{Logger, LoggerFactory} +import za.co.absa.cobrix.cobol.base.SimpleComparisonBase +import za.co.absa.cobrix.cobol.internal.Logging import za.co.absa.cobrix.cobol.parser.CopybookParser import za.co.absa.cobrix.cobol.parser.ast.{Group, Primitive} import za.co.absa.cobrix.cobol.parser.exceptions.SyntaxErrorException -class SyntaxErrorsSpec extends AnyFunSuite { +class SyntaxErrorsSpec extends AnyFunSuite with SimpleComparisonBase { + private implicit val logger: Logger = LoggerFactory.getLogger(this.getClass) test("Test handle group field having a PIC modifier") { val copyBookContents: String = @@ -158,7 +162,7 @@ class SyntaxErrorsSpec extends AnyFunSuite { } - test ("Test parser tolerance for USAGE clause following PIC without a space"){ + test("Test parser tolerance for USAGE clause following PIC without a space") { val copyBookContents: String = """ 01 GROUP. | 02 FIELD1 PIC X(2). @@ -315,6 +319,72 @@ class SyntaxErrorsSpec extends AnyFunSuite { assert(record.children(2).asInstanceOf[Primitive].dataType.pic == "9(16)V9(16)") } + test("Test field name is a reserved word") { + val copyBookContents: String = + """ 01 RECORD. + | 10 SIGN PIC X(1). + | 10 IS PIC X(2). + | 10 TRAILING PIC X(3). + | 10 FROM PIC 9(1) SIGN IS TRAILING SEPARATE. + | 10 TO PIC 9(2). + | 10 OF PIC 9(3) REDEFINES TO. + | 10 NULL PIC 9(1). + | 10 NULLS PIC 9(3) REDEFINES NULL. + | 10 PICTURE PIC 9(3). + | 10 PIC PICTURE 9(3) REDEFINES PICTURE. + | 10 OCCURS PIC X(1) OCCURS 0 TO 2 TIMES. + |""".stripMargin + + val expectedLayout = + """-------- FIELD LEVEL/NAME --------- --ATTRIBS-- FLD START END LENGTH + | + |1 RECORD 1 1 19 19 + | 10 SIGN 2 1 1 1 + | 10 IS 3 2 3 2 + | 10 TRAILING 4 4 6 3 + | 10 FROM 5 7 8 2 + | 10 TO r 6 9 11 3 + | 10 OF R 7 9 11 3 + | 10 NULL r 8 12 14 3 + | 10 NULLS R 9 12 14 3 + | 10 PICTURE r 10 15 17 3 + | 10 PIC R 11 15 17 3 + | 10 OCCURS [] 12 18 19 2 + |""".stripMargin + + val parsedCopybook = CopybookParser.parseTree(copyBookContents) + + val root = parsedCopybook.ast.children(0).asInstanceOf[Group] + + assert(root.children(0).name == "SIGN") + assert(root.children(1).name == "IS") + assert(root.children(2).name == "TRAILING") + assert(root.children(3).name == "FROM") + assert(root.children(4).name == "TO") + assert(root.children(5).name == "OF") + assert(root.children(6).name == "NULL") + assert(root.children(7).name == "NULLS") + assert(root.children(8).name == "PICTURE") + assert(root.children(9).name == "PIC") + assert(root.children(10).name == "OCCURS") + + val layout = parsedCopybook.generateRecordLayoutPositions() + assertEqualsMultiline(layout, expectedLayout) + } + + test("The reserved word 'REDEFINES' is still not allowed") { + val copyBookContents = + """ 01 RECORD. + | 10 FILED PIC X(1). + | 10 REDEFINES PIC X(1). + |""".stripMargin + val syntaxErrorException = intercept[SyntaxErrorException] { + CopybookParser.parseTree(copyBookContents) + } + + assert(syntaxErrorException.lineNumber == 3) + assert(syntaxErrorException.getMessage.toUpperCase.contains("REDEFINES")) + } } diff --git a/project/Dependencies.scala b/project/Dependencies.scala index d7585bc1..adb614ef 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -18,7 +18,7 @@ import sbt._ object Dependencies { private val scodecCoreVersion = "1.11.4" - private val antlrValue = "4.8" + private val antlrValue = "4.9.3" private val slf4jVersion = "1.7.25" private val jacksonVersion = "2.15.4"