From 1ee63ce40a996f9ae82c4f242c4b7101fbe8a0d8 Mon Sep 17 00:00:00 2001
From: jespergravgaard The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing. The default implementation does nothing.
The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.
- */ - @Override public T visitExprCast(KickCParser.ExprCastContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.
- */ - @Override public T visitExprCall(KickCParser.ExprCallContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -221,6 +207,48 @@ public class KickCBaseVisitorThe default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.
+ */ + @Override public T visitExprPostMod(KickCParser.ExprPostModContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.
+ */ + @Override public T visitExprUnary(KickCParser.ExprUnaryContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.
+ */ + @Override public T visitExprNumber(KickCParser.ExprNumberContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.
+ */ + @Override public T visitExprChar(KickCParser.ExprCharContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.
+ */ + @Override public T visitExprCast(KickCParser.ExprCastContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.
+ */ + @Override public T visitExprCall(KickCParser.ExprCallContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -242,13 +270,6 @@ public class KickCBaseVisitorThe default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.
- */ - @Override public T visitExprPostMod(KickCParser.ExprPostModContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -256,20 +277,6 @@ public class KickCBaseVisitorThe default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.
- */ - @Override public T visitExprUnary(KickCParser.ExprUnaryContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.
- */ - @Override public T visitExprNumber(KickCParser.ExprNumberContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java index c7b32445c..be8eda76a 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java @@ -22,10 +22,10 @@ public class KickCLexer extends Lexer { T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31, T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38, - T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, BOOLEAN=45, - NUMBER=46, NUMFLOAT=47, BINFLOAT=48, DECFLOAT=49, HEXFLOAT=50, NUMINT=51, - BININTEGER=52, DECINTEGER=53, HEXINTEGER=54, NAME=55, WS=56, COMMENT_LINE=57, - COMMENT_BLOCK=58; + T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, CHAR=45, + BOOLEAN=46, NUMBER=47, NUMFLOAT=48, BINFLOAT=49, DECFLOAT=50, HEXFLOAT=51, + NUMINT=52, BININTEGER=53, DECINTEGER=54, HEXINTEGER=55, NAME=56, WS=57, + COMMENT_LINE=58, COMMENT_BLOCK=59; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -40,10 +40,10 @@ public class KickCLexer extends Lexer { "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", - "T__41", "SIMPLETYPE", "STRING", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", - "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", - "BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", "NAME_CHAR", - "WS", "COMMENT_LINE", "COMMENT_BLOCK" + "T__41", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", + "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", + "HEXINTEGER", "BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", + "NAME_CHAR", "WS", "COMMENT_LINE", "COMMENT_BLOCK" }; private static final String[] _LITERAL_NAMES = { @@ -57,9 +57,10 @@ public class KickCLexer extends Lexer { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "BOOLEAN", - "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", - "DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE", "COMMENT_BLOCK" + null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "CHAR", + "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", + "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE", + "COMMENT_BLOCK" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -119,7 +120,7 @@ public class KickCLexer extends Lexer { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2<\u01be\b\1\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2=\u01c8\b\1\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"+ @@ -127,153 +128,156 @@ public class KickCLexer extends Lexer { "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ - "\4>\t>\4?\t?\4@\t@\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\6\3\6"+ - "\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3"+ - "\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\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\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24"+ - "\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\31"+ - "\3\32\3\32\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\37\3\37"+ - "\3\37\3 \3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3%\3%\3%\3&\3&\3&\3"+ - "\'\3\'\3(\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3,"+ - "\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u0116\n,\3-\3-"+ - "\3-\3-\7-\u011c\n-\f-\16-\u011f\13-\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\5"+ - ".\u012c\n.\3/\3/\5/\u0130\n/\3\60\3\60\3\60\5\60\u0135\n\60\3\61\3\61"+ - "\3\61\3\61\3\61\5\61\u013c\n\61\3\61\7\61\u013f\n\61\f\61\16\61\u0142"+ - "\13\61\3\61\3\61\6\61\u0146\n\61\r\61\16\61\u0147\3\62\7\62\u014b\n\62"+ - "\f\62\16\62\u014e\13\62\3\62\3\62\6\62\u0152\n\62\r\62\16\62\u0153\3\63"+ - "\3\63\3\63\3\63\3\63\5\63\u015b\n\63\3\63\7\63\u015e\n\63\f\63\16\63\u0161"+ - "\13\63\3\63\3\63\6\63\u0165\n\63\r\63\16\63\u0166\3\64\3\64\3\64\5\64"+ - "\u016c\n\64\3\65\3\65\3\65\6\65\u0171\n\65\r\65\16\65\u0172\3\65\3\65"+ - "\6\65\u0177\n\65\r\65\16\65\u0178\5\65\u017b\n\65\3\66\6\66\u017e\n\66"+ - "\r\66\16\66\u017f\3\67\3\67\3\67\3\67\3\67\5\67\u0187\n\67\3\67\6\67\u018a"+ - "\n\67\r\67\16\67\u018b\38\38\39\39\3:\3:\3;\3;\7;\u0196\n;\f;\16;\u0199"+ - "\13;\3<\3<\3=\3=\3>\6>\u01a0\n>\r>\16>\u01a1\3>\3>\3?\3?\3?\3?\7?\u01aa"+ - "\n?\f?\16?\u01ad\13?\3?\3?\3@\3@\3@\3@\7@\u01b5\n@\f@\16@\u01b8\13@\3"+ - "@\3@\3@\3@\3@\3\u01b6\2A\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f"+ - "\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63"+ - "\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62"+ - "c\63e\64g\65i\66k\67m8o\2q\2s\2u9w\2y\2{:};\177<\3\2\13\3\2$$\4\2DDdd"+ - "\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\aac|\5\2\13\f\17\17"+ - "\"\"\4\2\f\f\17\17\2\u01d9\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2"+ - "\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2"+ - "\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3"+ - "\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2"+ - "\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67"+ - "\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2"+ - "\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2"+ - "\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]"+ - "\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2"+ - "\2\2\2k\3\2\2\2\2m\3\2\2\2\2u\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2"+ - "\2\2\3\u0081\3\2\2\2\5\u0083\3\2\2\2\7\u0085\3\2\2\2\t\u0087\3\2\2\2\13"+ - "\u0089\3\2\2\2\r\u008f\3\2\2\2\17\u0091\3\2\2\2\21\u0093\3\2\2\2\23\u0096"+ - "\3\2\2\2\25\u009b\3\2\2\2\27\u00a1\3\2\2\2\31\u00a4\3\2\2\2\33\u00a8\3"+ - "\2\2\2\35\u00af\3\2\2\2\37\u00b1\3\2\2\2!\u00b4\3\2\2\2#\u00b6\3\2\2\2"+ - "%\u00b8\3\2\2\2\'\u00ba\3\2\2\2)\u00bc\3\2\2\2+\u00bf\3\2\2\2-\u00c2\3"+ - "\2\2\2/\u00c4\3\2\2\2\61\u00c6\3\2\2\2\63\u00ca\3\2\2\2\65\u00cc\3\2\2"+ - "\2\67\u00ce\3\2\2\29\u00d1\3\2\2\2;\u00d4\3\2\2\2=\u00d6\3\2\2\2?\u00d9"+ - "\3\2\2\2A\u00dc\3\2\2\2C\u00df\3\2\2\2E\u00e1\3\2\2\2G\u00e4\3\2\2\2I"+ - "\u00e7\3\2\2\2K\u00ea\3\2\2\2M\u00ed\3\2\2\2O\u00ef\3\2\2\2Q\u00f3\3\2"+ - "\2\2S\u00f6\3\2\2\2U\u00f9\3\2\2\2W\u0115\3\2\2\2Y\u0117\3\2\2\2[\u012b"+ - "\3\2\2\2]\u012f\3\2\2\2_\u0134\3\2\2\2a\u013b\3\2\2\2c\u014c\3\2\2\2e"+ - "\u015a\3\2\2\2g\u016b\3\2\2\2i\u017a\3\2\2\2k\u017d\3\2\2\2m\u0186\3\2"+ - "\2\2o\u018d\3\2\2\2q\u018f\3\2\2\2s\u0191\3\2\2\2u\u0193\3\2\2\2w\u019a"+ - "\3\2\2\2y\u019c\3\2\2\2{\u019f\3\2\2\2}\u01a5\3\2\2\2\177\u01b0\3\2\2"+ - "\2\u0081\u0082\7}\2\2\u0082\4\3\2\2\2\u0083\u0084\7\177\2\2\u0084\6\3"+ - "\2\2\2\u0085\u0086\7*\2\2\u0086\b\3\2\2\2\u0087\u0088\7+\2\2\u0088\n\3"+ - "\2\2\2\u0089\u008a\7e\2\2\u008a\u008b\7q\2\2\u008b\u008c\7p\2\2\u008c"+ - "\u008d\7u\2\2\u008d\u008e\7v\2\2\u008e\f\3\2\2\2\u008f\u0090\7?\2\2\u0090"+ - "\16\3\2\2\2\u0091\u0092\7=\2\2\u0092\20\3\2\2\2\u0093\u0094\7k\2\2\u0094"+ - "\u0095\7h\2\2\u0095\22\3\2\2\2\u0096\u0097\7g\2\2\u0097\u0098\7n\2\2\u0098"+ - "\u0099\7u\2\2\u0099\u009a\7g\2\2\u009a\24\3\2\2\2\u009b\u009c\7y\2\2\u009c"+ - "\u009d\7j\2\2\u009d\u009e\7k\2\2\u009e\u009f\7n\2\2\u009f\u00a0\7g\2\2"+ - "\u00a0\26\3\2\2\2\u00a1\u00a2\7f\2\2\u00a2\u00a3\7q\2\2\u00a3\30\3\2\2"+ - "\2\u00a4\u00a5\7h\2\2\u00a5\u00a6\7q\2\2\u00a6\u00a7\7t\2\2\u00a7\32\3"+ - "\2\2\2\u00a8\u00a9\7t\2\2\u00a9\u00aa\7g\2\2\u00aa\u00ab\7v\2\2\u00ab"+ - "\u00ac\7w\2\2\u00ac\u00ad\7t\2\2\u00ad\u00ae\7p\2\2\u00ae\34\3\2\2\2\u00af"+ - "\u00b0\7<\2\2\u00b0\36\3\2\2\2\u00b1\u00b2\7\60\2\2\u00b2\u00b3\7\60\2"+ - "\2\u00b3 \3\2\2\2\u00b4\u00b5\7.\2\2\u00b5\"\3\2\2\2\u00b6\u00b7\7,\2"+ - "\2\u00b7$\3\2\2\2\u00b8\u00b9\7]\2\2\u00b9&\3\2\2\2\u00ba\u00bb\7_\2\2"+ - "\u00bb(\3\2\2\2\u00bc\u00bd\7/\2\2\u00bd\u00be\7/\2\2\u00be*\3\2\2\2\u00bf"+ - "\u00c0\7-\2\2\u00c0\u00c1\7-\2\2\u00c1,\3\2\2\2\u00c2\u00c3\7-\2\2\u00c3"+ - ".\3\2\2\2\u00c4\u00c5\7/\2\2\u00c5\60\3\2\2\2\u00c6\u00c7\7p\2\2\u00c7"+ - "\u00c8\7q\2\2\u00c8\u00c9\7v\2\2\u00c9\62\3\2\2\2\u00ca\u00cb\7#\2\2\u00cb"+ - "\64\3\2\2\2\u00cc\u00cd\7(\2\2\u00cd\66\3\2\2\2\u00ce\u00cf\7@\2\2\u00cf"+ - "\u00d0\7@\2\2\u00d08\3\2\2\2\u00d1\u00d2\7>\2\2\u00d2\u00d3\7>\2\2\u00d3"+ - ":\3\2\2\2\u00d4\u00d5\7\61\2\2\u00d5<\3\2\2\2\u00d6\u00d7\7?\2\2\u00d7"+ - "\u00d8\7?\2\2\u00d8>\3\2\2\2\u00d9\u00da\7#\2\2\u00da\u00db\7?\2\2\u00db"+ - "@\3\2\2\2\u00dc\u00dd\7>\2\2\u00dd\u00de\7@\2\2\u00deB\3\2\2\2\u00df\u00e0"+ - "\7>\2\2\u00e0D\3\2\2\2\u00e1\u00e2\7>\2\2\u00e2\u00e3\7?\2\2\u00e3F\3"+ - "\2\2\2\u00e4\u00e5\7?\2\2\u00e5\u00e6\7>\2\2\u00e6H\3\2\2\2\u00e7\u00e8"+ - "\7@\2\2\u00e8\u00e9\7?\2\2\u00e9J\3\2\2\2\u00ea\u00eb\7?\2\2\u00eb\u00ec"+ - "\7@\2\2\u00ecL\3\2\2\2\u00ed\u00ee\7@\2\2\u00eeN\3\2\2\2\u00ef\u00f0\7"+ - "c\2\2\u00f0\u00f1\7p\2\2\u00f1\u00f2\7f\2\2\u00f2P\3\2\2\2\u00f3\u00f4"+ - "\7(\2\2\u00f4\u00f5\7(\2\2\u00f5R\3\2\2\2\u00f6\u00f7\7q\2\2\u00f7\u00f8"+ - "\7t\2\2\u00f8T\3\2\2\2\u00f9\u00fa\7~\2\2\u00fa\u00fb\7~\2\2\u00fbV\3"+ - "\2\2\2\u00fc\u00fd\7d\2\2\u00fd\u00fe\7{\2\2\u00fe\u00ff\7v\2\2\u00ff"+ - "\u0116\7g\2\2\u0100\u0101\7y\2\2\u0101\u0102\7q\2\2\u0102\u0103\7t\2\2"+ - "\u0103\u0116\7f\2\2\u0104\u0105\7u\2\2\u0105\u0106\7v\2\2\u0106\u0107"+ - "\7t\2\2\u0107\u0108\7k\2\2\u0108\u0109\7p\2\2\u0109\u0116\7i\2\2\u010a"+ - "\u010b\7d\2\2\u010b\u010c\7q\2\2\u010c\u010d\7q\2\2\u010d\u010e\7n\2\2"+ - "\u010e\u010f\7g\2\2\u010f\u0110\7c\2\2\u0110\u0116\7p\2\2\u0111\u0112"+ - "\7x\2\2\u0112\u0113\7q\2\2\u0113\u0114\7k\2\2\u0114\u0116\7f\2\2\u0115"+ - "\u00fc\3\2\2\2\u0115\u0100\3\2\2\2\u0115\u0104\3\2\2\2\u0115\u010a\3\2"+ - "\2\2\u0115\u0111\3\2\2\2\u0116X\3\2\2\2\u0117\u011d\7$\2\2\u0118\u0119"+ - "\7^\2\2\u0119\u011c\7$\2\2\u011a\u011c\n\2\2\2\u011b\u0118\3\2\2\2\u011b"+ - "\u011a\3\2\2\2\u011c\u011f\3\2\2\2\u011d\u011b\3\2\2\2\u011d\u011e\3\2"+ - "\2\2\u011e\u0120\3\2\2\2\u011f\u011d\3\2\2\2\u0120\u0121\7$\2\2\u0121"+ - "Z\3\2\2\2\u0122\u0123\7v\2\2\u0123\u0124\7t\2\2\u0124\u0125\7w\2\2\u0125"+ - "\u012c\7g\2\2\u0126\u0127\7h\2\2\u0127\u0128\7c\2\2\u0128\u0129\7n\2\2"+ - "\u0129\u012a\7u\2\2\u012a\u012c\7g\2\2\u012b\u0122\3\2\2\2\u012b\u0126"+ - "\3\2\2\2\u012c\\\3\2\2\2\u012d\u0130\5_\60\2\u012e\u0130\5g\64\2\u012f"+ - "\u012d\3\2\2\2\u012f\u012e\3\2\2\2\u0130^\3\2\2\2\u0131\u0135\5a\61\2"+ - "\u0132\u0135\5c\62\2\u0133\u0135\5e\63\2\u0134\u0131\3\2\2\2\u0134\u0132"+ - "\3\2\2\2\u0134\u0133\3\2\2\2\u0135`\3\2\2\2\u0136\u013c\7\'\2\2\u0137"+ - "\u0138\7\62\2\2\u0138\u013c\7d\2\2\u0139\u013a\7\62\2\2\u013a\u013c\7"+ - "D\2\2\u013b\u0136\3\2\2\2\u013b\u0137\3\2\2\2\u013b\u0139\3\2\2\2\u013c"+ - "\u0140\3\2\2\2\u013d\u013f\5o8\2\u013e\u013d\3\2\2\2\u013f\u0142\3\2\2"+ - "\2\u0140\u013e\3\2\2\2\u0140\u0141\3\2\2\2\u0141\u0143\3\2\2\2\u0142\u0140"+ - "\3\2\2\2\u0143\u0145\7\60\2\2\u0144\u0146\5o8\2\u0145\u0144\3\2\2\2\u0146"+ - "\u0147\3\2\2\2\u0147\u0145\3\2\2\2\u0147\u0148\3\2\2\2\u0148b\3\2\2\2"+ - "\u0149\u014b\5q9\2\u014a\u0149\3\2\2\2\u014b\u014e\3\2\2\2\u014c\u014a"+ - "\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u014f\3\2\2\2\u014e\u014c\3\2\2\2\u014f"+ - "\u0151\7\60\2\2\u0150\u0152\5q9\2\u0151\u0150\3\2\2\2\u0152\u0153\3\2"+ - "\2\2\u0153\u0151\3\2\2\2\u0153\u0154\3\2\2\2\u0154d\3\2\2\2\u0155\u015b"+ - "\7&\2\2\u0156\u0157\7\62\2\2\u0157\u015b\7z\2\2\u0158\u0159\7\62\2\2\u0159"+ - "\u015b\7Z\2\2\u015a\u0155\3\2\2\2\u015a\u0156\3\2\2\2\u015a\u0158\3\2"+ - "\2\2\u015b\u015f\3\2\2\2\u015c\u015e\5s:\2\u015d\u015c\3\2\2\2\u015e\u0161"+ - "\3\2\2\2\u015f\u015d\3\2\2\2\u015f\u0160\3\2\2\2\u0160\u0162\3\2\2\2\u0161"+ - "\u015f\3\2\2\2\u0162\u0164\7\60\2\2\u0163\u0165\5s:\2\u0164\u0163\3\2"+ - "\2\2\u0165\u0166\3\2\2\2\u0166\u0164\3\2\2\2\u0166\u0167\3\2\2\2\u0167"+ - "f\3\2\2\2\u0168\u016c\5k\66\2\u0169\u016c\5m\67\2\u016a\u016c\5i\65\2"+ - "\u016b\u0168\3\2\2\2\u016b\u0169\3\2\2\2\u016b\u016a\3\2\2\2\u016ch\3"+ - "\2\2\2\u016d\u016e\7\62\2\2\u016e\u0170\t\3\2\2\u016f\u0171\5o8\2\u0170"+ - "\u016f\3\2\2\2\u0171\u0172\3\2\2\2\u0172\u0170\3\2\2\2\u0172\u0173\3\2"+ - "\2\2\u0173\u017b\3\2\2\2\u0174\u0176\7\'\2\2\u0175\u0177\5o8\2\u0176\u0175"+ - "\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u0176\3\2\2\2\u0178\u0179\3\2\2\2\u0179"+ - "\u017b\3\2\2\2\u017a\u016d\3\2\2\2\u017a\u0174\3\2\2\2\u017bj\3\2\2\2"+ - "\u017c\u017e\5q9\2\u017d\u017c\3\2\2\2\u017e\u017f\3\2\2\2\u017f\u017d"+ - "\3\2\2\2\u017f\u0180\3\2\2\2\u0180l\3\2\2\2\u0181\u0187\7&\2\2\u0182\u0183"+ - "\7\62\2\2\u0183\u0187\7z\2\2\u0184\u0185\7\62\2\2\u0185\u0187\7Z\2\2\u0186"+ - "\u0181\3\2\2\2\u0186\u0182\3\2\2\2\u0186\u0184\3\2\2\2\u0187\u0189\3\2"+ - "\2\2\u0188\u018a\5s:\2\u0189\u0188\3\2\2\2\u018a\u018b\3\2\2\2\u018b\u0189"+ - "\3\2\2\2\u018b\u018c\3\2\2\2\u018cn\3\2\2\2\u018d\u018e\t\4\2\2\u018e"+ - "p\3\2\2\2\u018f\u0190\t\5\2\2\u0190r\3\2\2\2\u0191\u0192\t\6\2\2\u0192"+ - "t\3\2\2\2\u0193\u0197\5w<\2\u0194\u0196\5y=\2\u0195\u0194\3\2\2\2\u0196"+ - "\u0199\3\2\2\2\u0197\u0195\3\2\2\2\u0197\u0198\3\2\2\2\u0198v\3\2\2\2"+ - "\u0199\u0197\3\2\2\2\u019a\u019b\t\7\2\2\u019bx\3\2\2\2\u019c\u019d\t"+ - "\b\2\2\u019dz\3\2\2\2\u019e\u01a0\t\t\2\2\u019f\u019e\3\2\2\2\u01a0\u01a1"+ - "\3\2\2\2\u01a1\u019f\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3"+ - "\u01a4\b>\2\2\u01a4|\3\2\2\2\u01a5\u01a6\7\61\2\2\u01a6\u01a7\7\61\2\2"+ - "\u01a7\u01ab\3\2\2\2\u01a8\u01aa\n\n\2\2\u01a9\u01a8\3\2\2\2\u01aa\u01ad"+ - "\3\2\2\2\u01ab\u01a9\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01ae\3\2\2\2\u01ad"+ - "\u01ab\3\2\2\2\u01ae\u01af\b?\2\2\u01af~\3\2\2\2\u01b0\u01b1\7\61\2\2"+ - "\u01b1\u01b2\7,\2\2\u01b2\u01b6\3\2\2\2\u01b3\u01b5\13\2\2\2\u01b4\u01b3"+ - "\3\2\2\2\u01b5\u01b8\3\2\2\2\u01b6\u01b7\3\2\2\2\u01b6\u01b4\3\2\2\2\u01b7"+ - "\u01b9\3\2\2\2\u01b8\u01b6\3\2\2\2\u01b9\u01ba\7,\2\2\u01ba\u01bb\7\61"+ - "\2\2\u01bb\u01bc\3\2\2\2\u01bc\u01bd\b@\2\2\u01bd\u0080\3\2\2\2\34\2\u0115"+ - "\u011b\u011d\u012b\u012f\u0134\u013b\u0140\u0147\u014c\u0153\u015a\u015f"+ - "\u0166\u016b\u0172\u0178\u017a\u017f\u0186\u018b\u0197\u01a1\u01ab\u01b6"+ - "\3\b\2\2"; + "\4>\t>\4?\t?\4@\t@\4A\tA\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3"+ + "\6\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3"+ + "\13\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\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\21\3\21\3\22\3\22\3\23\3\23\3\24"+ + "\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\31"+ + "\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\37"+ + "\3\37\3\37\3 \3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3%\3%\3%\3&\3&"+ + "\3&\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3,\3,\3,\3,\3"+ + ",\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u0118\n,\3"+ + "-\3-\3-\3-\7-\u011e\n-\f-\16-\u0121\13-\3-\3-\3.\3.\3.\3.\5.\u0129\n."+ + "\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\5/\u0136\n/\3\60\3\60\5\60\u013a\n\60"+ + "\3\61\3\61\3\61\5\61\u013f\n\61\3\62\3\62\3\62\3\62\3\62\5\62\u0146\n"+ + "\62\3\62\7\62\u0149\n\62\f\62\16\62\u014c\13\62\3\62\3\62\6\62\u0150\n"+ + "\62\r\62\16\62\u0151\3\63\7\63\u0155\n\63\f\63\16\63\u0158\13\63\3\63"+ + "\3\63\6\63\u015c\n\63\r\63\16\63\u015d\3\64\3\64\3\64\3\64\3\64\5\64\u0165"+ + "\n\64\3\64\7\64\u0168\n\64\f\64\16\64\u016b\13\64\3\64\3\64\6\64\u016f"+ + "\n\64\r\64\16\64\u0170\3\65\3\65\3\65\5\65\u0176\n\65\3\66\3\66\3\66\6"+ + "\66\u017b\n\66\r\66\16\66\u017c\3\66\3\66\6\66\u0181\n\66\r\66\16\66\u0182"+ + "\5\66\u0185\n\66\3\67\6\67\u0188\n\67\r\67\16\67\u0189\38\38\38\38\38"+ + "\58\u0191\n8\38\68\u0194\n8\r8\168\u0195\39\39\3:\3:\3;\3;\3<\3<\7<\u01a0"+ + "\n<\f<\16<\u01a3\13<\3=\3=\3>\3>\3?\6?\u01aa\n?\r?\16?\u01ab\3?\3?\3@"+ + "\3@\3@\3@\7@\u01b4\n@\f@\16@\u01b7\13@\3@\3@\3A\3A\3A\3A\7A\u01bf\nA\f"+ + "A\16A\u01c2\13A\3A\3A\3A\3A\3A\3\u01c0\2B\3\3\5\4\7\5\t\6\13\7\r\b\17"+ + "\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+"+ + "\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+"+ + "U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q\2s\2u\2w:y\2{\2};\177<\u0081"+ + "=\3\2\f\3\2$$\3\2))\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6"+ + "\2\62;C\\aac|\5\2\13\f\17\17\"\"\4\2\f\f\17\17\2\u01e4\2\3\3\2\2\2\2\5"+ + "\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2"+ + "\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33"+ + "\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2"+ + "\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2"+ + "\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2"+ + "\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K"+ + "\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2"+ + "\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2"+ + "\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2w"+ + "\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\3\u0083\3\2\2\2\5\u0085"+ + "\3\2\2\2\7\u0087\3\2\2\2\t\u0089\3\2\2\2\13\u008b\3\2\2\2\r\u0091\3\2"+ + "\2\2\17\u0093\3\2\2\2\21\u0095\3\2\2\2\23\u0098\3\2\2\2\25\u009d\3\2\2"+ + "\2\27\u00a3\3\2\2\2\31\u00a6\3\2\2\2\33\u00aa\3\2\2\2\35\u00b1\3\2\2\2"+ + "\37\u00b3\3\2\2\2!\u00b6\3\2\2\2#\u00b8\3\2\2\2%\u00ba\3\2\2\2\'\u00bc"+ + "\3\2\2\2)\u00be\3\2\2\2+\u00c1\3\2\2\2-\u00c4\3\2\2\2/\u00c6\3\2\2\2\61"+ + "\u00c8\3\2\2\2\63\u00cc\3\2\2\2\65\u00ce\3\2\2\2\67\u00d0\3\2\2\29\u00d3"+ + "\3\2\2\2;\u00d6\3\2\2\2=\u00d8\3\2\2\2?\u00db\3\2\2\2A\u00de\3\2\2\2C"+ + "\u00e1\3\2\2\2E\u00e3\3\2\2\2G\u00e6\3\2\2\2I\u00e9\3\2\2\2K\u00ec\3\2"+ + "\2\2M\u00ef\3\2\2\2O\u00f1\3\2\2\2Q\u00f5\3\2\2\2S\u00f8\3\2\2\2U\u00fb"+ + "\3\2\2\2W\u0117\3\2\2\2Y\u0119\3\2\2\2[\u0124\3\2\2\2]\u0135\3\2\2\2_"+ + "\u0139\3\2\2\2a\u013e\3\2\2\2c\u0145\3\2\2\2e\u0156\3\2\2\2g\u0164\3\2"+ + "\2\2i\u0175\3\2\2\2k\u0184\3\2\2\2m\u0187\3\2\2\2o\u0190\3\2\2\2q\u0197"+ + "\3\2\2\2s\u0199\3\2\2\2u\u019b\3\2\2\2w\u019d\3\2\2\2y\u01a4\3\2\2\2{"+ + "\u01a6\3\2\2\2}\u01a9\3\2\2\2\177\u01af\3\2\2\2\u0081\u01ba\3\2\2\2\u0083"+ + "\u0084\7}\2\2\u0084\4\3\2\2\2\u0085\u0086\7\177\2\2\u0086\6\3\2\2\2\u0087"+ + "\u0088\7*\2\2\u0088\b\3\2\2\2\u0089\u008a\7+\2\2\u008a\n\3\2\2\2\u008b"+ + "\u008c\7e\2\2\u008c\u008d\7q\2\2\u008d\u008e\7p\2\2\u008e\u008f\7u\2\2"+ + "\u008f\u0090\7v\2\2\u0090\f\3\2\2\2\u0091\u0092\7?\2\2\u0092\16\3\2\2"+ + "\2\u0093\u0094\7=\2\2\u0094\20\3\2\2\2\u0095\u0096\7k\2\2\u0096\u0097"+ + "\7h\2\2\u0097\22\3\2\2\2\u0098\u0099\7g\2\2\u0099\u009a\7n\2\2\u009a\u009b"+ + "\7u\2\2\u009b\u009c\7g\2\2\u009c\24\3\2\2\2\u009d\u009e\7y\2\2\u009e\u009f"+ + "\7j\2\2\u009f\u00a0\7k\2\2\u00a0\u00a1\7n\2\2\u00a1\u00a2\7g\2\2\u00a2"+ + "\26\3\2\2\2\u00a3\u00a4\7f\2\2\u00a4\u00a5\7q\2\2\u00a5\30\3\2\2\2\u00a6"+ + "\u00a7\7h\2\2\u00a7\u00a8\7q\2\2\u00a8\u00a9\7t\2\2\u00a9\32\3\2\2\2\u00aa"+ + "\u00ab\7t\2\2\u00ab\u00ac\7g\2\2\u00ac\u00ad\7v\2\2\u00ad\u00ae\7w\2\2"+ + "\u00ae\u00af\7t\2\2\u00af\u00b0\7p\2\2\u00b0\34\3\2\2\2\u00b1\u00b2\7"+ + "<\2\2\u00b2\36\3\2\2\2\u00b3\u00b4\7\60\2\2\u00b4\u00b5\7\60\2\2\u00b5"+ + " \3\2\2\2\u00b6\u00b7\7.\2\2\u00b7\"\3\2\2\2\u00b8\u00b9\7,\2\2\u00b9"+ + "$\3\2\2\2\u00ba\u00bb\7]\2\2\u00bb&\3\2\2\2\u00bc\u00bd\7_\2\2\u00bd("+ + "\3\2\2\2\u00be\u00bf\7/\2\2\u00bf\u00c0\7/\2\2\u00c0*\3\2\2\2\u00c1\u00c2"+ + "\7-\2\2\u00c2\u00c3\7-\2\2\u00c3,\3\2\2\2\u00c4\u00c5\7-\2\2\u00c5.\3"+ + "\2\2\2\u00c6\u00c7\7/\2\2\u00c7\60\3\2\2\2\u00c8\u00c9\7p\2\2\u00c9\u00ca"+ + "\7q\2\2\u00ca\u00cb\7v\2\2\u00cb\62\3\2\2\2\u00cc\u00cd\7#\2\2\u00cd\64"+ + "\3\2\2\2\u00ce\u00cf\7(\2\2\u00cf\66\3\2\2\2\u00d0\u00d1\7@\2\2\u00d1"+ + "\u00d2\7@\2\2\u00d28\3\2\2\2\u00d3\u00d4\7>\2\2\u00d4\u00d5\7>\2\2\u00d5"+ + ":\3\2\2\2\u00d6\u00d7\7\61\2\2\u00d7<\3\2\2\2\u00d8\u00d9\7?\2\2\u00d9"+ + "\u00da\7?\2\2\u00da>\3\2\2\2\u00db\u00dc\7#\2\2\u00dc\u00dd\7?\2\2\u00dd"+ + "@\3\2\2\2\u00de\u00df\7>\2\2\u00df\u00e0\7@\2\2\u00e0B\3\2\2\2\u00e1\u00e2"+ + "\7>\2\2\u00e2D\3\2\2\2\u00e3\u00e4\7>\2\2\u00e4\u00e5\7?\2\2\u00e5F\3"+ + "\2\2\2\u00e6\u00e7\7?\2\2\u00e7\u00e8\7>\2\2\u00e8H\3\2\2\2\u00e9\u00ea"+ + "\7@\2\2\u00ea\u00eb\7?\2\2\u00ebJ\3\2\2\2\u00ec\u00ed\7?\2\2\u00ed\u00ee"+ + "\7@\2\2\u00eeL\3\2\2\2\u00ef\u00f0\7@\2\2\u00f0N\3\2\2\2\u00f1\u00f2\7"+ + "c\2\2\u00f2\u00f3\7p\2\2\u00f3\u00f4\7f\2\2\u00f4P\3\2\2\2\u00f5\u00f6"+ + "\7(\2\2\u00f6\u00f7\7(\2\2\u00f7R\3\2\2\2\u00f8\u00f9\7q\2\2\u00f9\u00fa"+ + "\7t\2\2\u00faT\3\2\2\2\u00fb\u00fc\7~\2\2\u00fc\u00fd\7~\2\2\u00fdV\3"+ + "\2\2\2\u00fe\u00ff\7d\2\2\u00ff\u0100\7{\2\2\u0100\u0101\7v\2\2\u0101"+ + "\u0118\7g\2\2\u0102\u0103\7y\2\2\u0103\u0104\7q\2\2\u0104\u0105\7t\2\2"+ + "\u0105\u0118\7f\2\2\u0106\u0107\7u\2\2\u0107\u0108\7v\2\2\u0108\u0109"+ + "\7t\2\2\u0109\u010a\7k\2\2\u010a\u010b\7p\2\2\u010b\u0118\7i\2\2\u010c"+ + "\u010d\7d\2\2\u010d\u010e\7q\2\2\u010e\u010f\7q\2\2\u010f\u0110\7n\2\2"+ + "\u0110\u0111\7g\2\2\u0111\u0112\7c\2\2\u0112\u0118\7p\2\2\u0113\u0114"+ + "\7x\2\2\u0114\u0115\7q\2\2\u0115\u0116\7k\2\2\u0116\u0118\7f\2\2\u0117"+ + "\u00fe\3\2\2\2\u0117\u0102\3\2\2\2\u0117\u0106\3\2\2\2\u0117\u010c\3\2"+ + "\2\2\u0117\u0113\3\2\2\2\u0118X\3\2\2\2\u0119\u011f\7$\2\2\u011a\u011b"+ + "\7^\2\2\u011b\u011e\7$\2\2\u011c\u011e\n\2\2\2\u011d\u011a\3\2\2\2\u011d"+ + "\u011c\3\2\2\2\u011e\u0121\3\2\2\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2"+ + "\2\2\u0120\u0122\3\2\2\2\u0121\u011f\3\2\2\2\u0122\u0123\7$\2\2\u0123"+ + "Z\3\2\2\2\u0124\u0128\7)\2\2\u0125\u0126\7^\2\2\u0126\u0129\7)\2\2\u0127"+ + "\u0129\n\3\2\2\u0128\u0125\3\2\2\2\u0128\u0127\3\2\2\2\u0129\u012a\3\2"+ + "\2\2\u012a\u012b\7)\2\2\u012b\\\3\2\2\2\u012c\u012d\7v\2\2\u012d\u012e"+ + "\7t\2\2\u012e\u012f\7w\2\2\u012f\u0136\7g\2\2\u0130\u0131\7h\2\2\u0131"+ + "\u0132\7c\2\2\u0132\u0133\7n\2\2\u0133\u0134\7u\2\2\u0134\u0136\7g\2\2"+ + "\u0135\u012c\3\2\2\2\u0135\u0130\3\2\2\2\u0136^\3\2\2\2\u0137\u013a\5"+ + "a\61\2\u0138\u013a\5i\65\2\u0139\u0137\3\2\2\2\u0139\u0138\3\2\2\2\u013a"+ + "`\3\2\2\2\u013b\u013f\5c\62\2\u013c\u013f\5e\63\2\u013d\u013f\5g\64\2"+ + "\u013e\u013b\3\2\2\2\u013e\u013c\3\2\2\2\u013e\u013d\3\2\2\2\u013fb\3"+ + "\2\2\2\u0140\u0146\7\'\2\2\u0141\u0142\7\62\2\2\u0142\u0146\7d\2\2\u0143"+ + "\u0144\7\62\2\2\u0144\u0146\7D\2\2\u0145\u0140\3\2\2\2\u0145\u0141\3\2"+ + "\2\2\u0145\u0143\3\2\2\2\u0146\u014a\3\2\2\2\u0147\u0149\5q9\2\u0148\u0147"+ + "\3\2\2\2\u0149\u014c\3\2\2\2\u014a\u0148\3\2\2\2\u014a\u014b\3\2\2\2\u014b"+ + "\u014d\3\2\2\2\u014c\u014a\3\2\2\2\u014d\u014f\7\60\2\2\u014e\u0150\5"+ + "q9\2\u014f\u014e\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u014f\3\2\2\2\u0151"+ + "\u0152\3\2\2\2\u0152d\3\2\2\2\u0153\u0155\5s:\2\u0154\u0153\3\2\2\2\u0155"+ + "\u0158\3\2\2\2\u0156\u0154\3\2\2\2\u0156\u0157\3\2\2\2\u0157\u0159\3\2"+ + "\2\2\u0158\u0156\3\2\2\2\u0159\u015b\7\60\2\2\u015a\u015c\5s:\2\u015b"+ + "\u015a\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u015b\3\2\2\2\u015d\u015e\3\2"+ + "\2\2\u015ef\3\2\2\2\u015f\u0165\7&\2\2\u0160\u0161\7\62\2\2\u0161\u0165"+ + "\7z\2\2\u0162\u0163\7\62\2\2\u0163\u0165\7Z\2\2\u0164\u015f\3\2\2\2\u0164"+ + "\u0160\3\2\2\2\u0164\u0162\3\2\2\2\u0165\u0169\3\2\2\2\u0166\u0168\5u"+ + ";\2\u0167\u0166\3\2\2\2\u0168\u016b\3\2\2\2\u0169\u0167\3\2\2\2\u0169"+ + "\u016a\3\2\2\2\u016a\u016c\3\2\2\2\u016b\u0169\3\2\2\2\u016c\u016e\7\60"+ + "\2\2\u016d\u016f\5u;\2\u016e\u016d\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u016e"+ + "\3\2\2\2\u0170\u0171\3\2\2\2\u0171h\3\2\2\2\u0172\u0176\5m\67\2\u0173"+ + "\u0176\5o8\2\u0174\u0176\5k\66\2\u0175\u0172\3\2\2\2\u0175\u0173\3\2\2"+ + "\2\u0175\u0174\3\2\2\2\u0176j\3\2\2\2\u0177\u0178\7\62\2\2\u0178\u017a"+ + "\t\4\2\2\u0179\u017b\5q9\2\u017a\u0179\3\2\2\2\u017b\u017c\3\2\2\2\u017c"+ + "\u017a\3\2\2\2\u017c\u017d\3\2\2\2\u017d\u0185\3\2\2\2\u017e\u0180\7\'"+ + "\2\2\u017f\u0181\5q9\2\u0180\u017f\3\2\2\2\u0181\u0182\3\2\2\2\u0182\u0180"+ + "\3\2\2\2\u0182\u0183\3\2\2\2\u0183\u0185\3\2\2\2\u0184\u0177\3\2\2\2\u0184"+ + "\u017e\3\2\2\2\u0185l\3\2\2\2\u0186\u0188\5s:\2\u0187\u0186\3\2\2\2\u0188"+ + "\u0189\3\2\2\2\u0189\u0187\3\2\2\2\u0189\u018a\3\2\2\2\u018an\3\2\2\2"+ + "\u018b\u0191\7&\2\2\u018c\u018d\7\62\2\2\u018d\u0191\7z\2\2\u018e\u018f"+ + "\7\62\2\2\u018f\u0191\7Z\2\2\u0190\u018b\3\2\2\2\u0190\u018c\3\2\2\2\u0190"+ + "\u018e\3\2\2\2\u0191\u0193\3\2\2\2\u0192\u0194\5u;\2\u0193\u0192\3\2\2"+ + "\2\u0194\u0195\3\2\2\2\u0195\u0193\3\2\2\2\u0195\u0196\3\2\2\2\u0196p"+ + "\3\2\2\2\u0197\u0198\t\5\2\2\u0198r\3\2\2\2\u0199\u019a\t\6\2\2\u019a"+ + "t\3\2\2\2\u019b\u019c\t\7\2\2\u019cv\3\2\2\2\u019d\u01a1\5y=\2\u019e\u01a0"+ + "\5{>\2\u019f\u019e\3\2\2\2\u01a0\u01a3\3\2\2\2\u01a1\u019f\3\2\2\2\u01a1"+ + "\u01a2\3\2\2\2\u01a2x\3\2\2\2\u01a3\u01a1\3\2\2\2\u01a4\u01a5\t\b\2\2"+ + "\u01a5z\3\2\2\2\u01a6\u01a7\t\t\2\2\u01a7|\3\2\2\2\u01a8\u01aa\t\n\2\2"+ + "\u01a9\u01a8\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab\u01a9\3\2\2\2\u01ab\u01ac"+ + "\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01ae\b?\2\2\u01ae~\3\2\2\2\u01af\u01b0"+ + "\7\61\2\2\u01b0\u01b1\7\61\2\2\u01b1\u01b5\3\2\2\2\u01b2\u01b4\n\13\2"+ + "\2\u01b3\u01b2\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\b@\2\2\u01b9"+ + "\u0080\3\2\2\2\u01ba\u01bb\7\61\2\2\u01bb\u01bc\7,\2\2\u01bc\u01c0\3\2"+ + "\2\2\u01bd\u01bf\13\2\2\2\u01be\u01bd\3\2\2\2\u01bf\u01c2\3\2\2\2\u01c0"+ + "\u01c1\3\2\2\2\u01c0\u01be\3\2\2\2\u01c1\u01c3\3\2\2\2\u01c2\u01c0\3\2"+ + "\2\2\u01c3\u01c4\7,\2\2\u01c4\u01c5\7\61\2\2\u01c5\u01c6\3\2\2\2\u01c6"+ + "\u01c7\bA\2\2\u01c7\u0082\3\2\2\2\35\2\u0117\u011d\u011f\u0128\u0135\u0139"+ + "\u013e\u0145\u014a\u0151\u0156\u015d\u0164\u0169\u0170\u0175\u017c\u0182"+ + "\u0184\u0189\u0190\u0195\u01a1\u01ab\u01b5\u01c0\3\b\2\2"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens index 774f0b0b7..52e9cc928 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens @@ -42,20 +42,21 @@ T__40=41 T__41=42 SIMPLETYPE=43 STRING=44 -BOOLEAN=45 -NUMBER=46 -NUMFLOAT=47 -BINFLOAT=48 -DECFLOAT=49 -HEXFLOAT=50 -NUMINT=51 -BININTEGER=52 -DECINTEGER=53 -HEXINTEGER=54 -NAME=55 -WS=56 -COMMENT_LINE=57 -COMMENT_BLOCK=58 +CHAR=45 +BOOLEAN=46 +NUMBER=47 +NUMFLOAT=48 +BINFLOAT=49 +DECFLOAT=50 +HEXFLOAT=51 +NUMINT=52 +BININTEGER=53 +DECINTEGER=54 +HEXINTEGER=55 +NAME=56 +WS=57 +COMMENT_LINE=58 +COMMENT_BLOCK=59 '{'=1 '}'=2 '('=3 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java index a6e468ad4..60757eec2 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java @@ -311,30 +311,6 @@ public interface KickCListener extends ParseTreeListener { * @param ctx the parse tree */ void exitLvaluePar(KickCParser.LvalueParContext ctx); - /** - * Enter a parse tree produced by the {@code exprCast} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void enterExprCast(KickCParser.ExprCastContext ctx); - /** - * Exit a parse tree produced by the {@code exprCast} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void exitExprCast(KickCParser.ExprCastContext ctx); - /** - * Enter a parse tree produced by the {@code exprCall} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void enterExprCall(KickCParser.ExprCallContext ctx); - /** - * Exit a parse tree produced by the {@code exprCall} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void exitExprCall(KickCParser.ExprCallContext ctx); /** * Enter a parse tree produced by the {@code exprPreMod} * labeled alternative in {@link KickCParser#expr}. @@ -359,6 +335,78 @@ public interface KickCListener extends ParseTreeListener { * @param ctx the parse tree */ void exitExprBinary(KickCParser.ExprBinaryContext ctx); + /** + * Enter a parse tree produced by the {@code exprPostMod} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprPostMod(KickCParser.ExprPostModContext ctx); + /** + * Exit a parse tree produced by the {@code exprPostMod} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprPostMod(KickCParser.ExprPostModContext ctx); + /** + * Enter a parse tree produced by the {@code exprUnary} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprUnary(KickCParser.ExprUnaryContext ctx); + /** + * Exit a parse tree produced by the {@code exprUnary} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprUnary(KickCParser.ExprUnaryContext ctx); + /** + * Enter a parse tree produced by the {@code exprNumber} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprNumber(KickCParser.ExprNumberContext ctx); + /** + * Exit a parse tree produced by the {@code exprNumber} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprNumber(KickCParser.ExprNumberContext ctx); + /** + * Enter a parse tree produced by the {@code exprChar} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprChar(KickCParser.ExprCharContext ctx); + /** + * Exit a parse tree produced by the {@code exprChar} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprChar(KickCParser.ExprCharContext ctx); + /** + * Enter a parse tree produced by the {@code exprCast} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprCast(KickCParser.ExprCastContext ctx); + /** + * Exit a parse tree produced by the {@code exprCast} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprCast(KickCParser.ExprCastContext ctx); + /** + * Enter a parse tree produced by the {@code exprCall} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprCall(KickCParser.ExprCallContext ctx); + /** + * Exit a parse tree produced by the {@code exprCall} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprCall(KickCParser.ExprCallContext ctx); /** * Enter a parse tree produced by the {@code exprPar} * labeled alternative in {@link KickCParser#expr}. @@ -395,18 +443,6 @@ public interface KickCListener extends ParseTreeListener { * @param ctx the parse tree */ void exitExprBool(KickCParser.ExprBoolContext ctx); - /** - * Enter a parse tree produced by the {@code exprPostMod} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void enterExprPostMod(KickCParser.ExprPostModContext ctx); - /** - * Exit a parse tree produced by the {@code exprPostMod} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void exitExprPostMod(KickCParser.ExprPostModContext ctx); /** * Enter a parse tree produced by the {@code exprId} * labeled alternative in {@link KickCParser#expr}. @@ -419,30 +455,6 @@ public interface KickCListener extends ParseTreeListener { * @param ctx the parse tree */ void exitExprId(KickCParser.ExprIdContext ctx); - /** - * Enter a parse tree produced by the {@code exprUnary} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void enterExprUnary(KickCParser.ExprUnaryContext ctx); - /** - * Exit a parse tree produced by the {@code exprUnary} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void exitExprUnary(KickCParser.ExprUnaryContext ctx); - /** - * Enter a parse tree produced by the {@code exprNumber} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void enterExprNumber(KickCParser.ExprNumberContext ctx); - /** - * Exit a parse tree produced by the {@code exprNumber} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void exitExprNumber(KickCParser.ExprNumberContext ctx); /** * Enter a parse tree produced by the {@code exprArray} * labeled alternative in {@link KickCParser#expr}. diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index 7f68e2594..71f9af6d3 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -22,10 +22,10 @@ public class KickCParser extends Parser { T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31, T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38, - T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, BOOLEAN=45, - NUMBER=46, NUMFLOAT=47, BINFLOAT=48, DECFLOAT=49, HEXFLOAT=50, NUMINT=51, - BININTEGER=52, DECINTEGER=53, HEXINTEGER=54, NAME=55, WS=56, COMMENT_LINE=57, - COMMENT_BLOCK=58; + T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, CHAR=45, + BOOLEAN=46, NUMBER=47, NUMFLOAT=48, BINFLOAT=49, DECFLOAT=50, HEXFLOAT=51, + NUMINT=52, BININTEGER=53, DECINTEGER=54, HEXINTEGER=55, NAME=56, WS=57, + COMMENT_LINE=58, COMMENT_BLOCK=59; public static final int RULE_file = 0, RULE_stmtSeq = 1, RULE_stmt = 2, RULE_forDeclaration = 3, RULE_forIteration = 4, RULE_parameterListDecl = 5, RULE_parameterDecl = 6, @@ -47,9 +47,10 @@ public class KickCParser extends Parser { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "BOOLEAN", - "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", - "DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE", "COMMENT_BLOCK" + null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "CHAR", + "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", + "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE", + "COMMENT_BLOCK" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -193,7 +194,7 @@ public class KickCParser extends Parser { setState(30); _errHandler.sync(this); _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0) ); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0) ); } } catch (RecognitionException re) { @@ -458,7 +459,7 @@ public class KickCParser extends Parser { setState(34); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { { setState(33); stmtSeq(); @@ -496,7 +497,7 @@ public class KickCParser extends Parser { setState(46); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { { setState(45); stmtSeq(); @@ -662,7 +663,7 @@ public class KickCParser extends Parser { setState(102); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { { setState(101); expr(0); @@ -843,7 +844,7 @@ public class KickCParser extends Parser { setState(119); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { { setState(118); expr(0); @@ -1121,7 +1122,7 @@ public class KickCParser extends Parser { setState(147); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { { setState(146); expr(0); @@ -1223,6 +1224,7 @@ public class KickCParser extends Parser { case T__24: case T__25: case STRING: + case CHAR: case BOOLEAN: case NUMBER: case NAME: @@ -1471,6 +1473,119 @@ public class KickCParser extends Parser { super.copyFrom(ctx); } } + public static class ExprPreModContext extends ExprContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ExprPreModContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprPreMod(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprPreMod(this); + } + @Override + public