diff --git a/grammar/src/expressions.grm b/grammar/src/expressions.grm index 0154a4c3964..d3684bf7518 100644 --- a/grammar/src/expressions.grm +++ b/grammar/src/expressions.grm @@ -103,8 +103,9 @@ literalConstant : StringWithTemplates : NoEscapeString : IntegerLiteral - : HexadecimalLiteral + : LongLiteral : CharacterLiteral + : FloatLiteral : "null" ; diff --git a/grammar/src/lexical.grm b/grammar/src/lexical.grm index ca45e033378..89a53eba2f2 100644 --- a/grammar/src/lexical.grm +++ b/grammar/src/lexical.grm @@ -62,6 +62,7 @@ match out ref try +case Soft: wraps -- in a class header diff --git a/grammar/src/match.grm b/grammar/src/match.grm index 5eb56fe1c61..22466221167 100644 --- a/grammar/src/match.grm +++ b/grammar/src/match.grm @@ -1,14 +1,13 @@ matchEntry - : attributes "case" pattern ("if" "(" expression ")")? "=>" expression // TODO: Consider other options than "=>" + : attributes "case" pattern ("if" "(" expression ")")? "=>" expression SEMI? // TODO: Consider other options than "=>" ; pattern : constantPattern // literal - : variablePattern // variable from the context + : SimpleName // variable from the context : tuplePattern : bindingPattern // we allow non-linear patterns : decomposerPattern // labeled components are allowed - : arrowPattern ; constantPattern @@ -27,7 +26,3 @@ bindingPattern decomposerPattern : userType tuplePattern? ; - -arrowPattern - : pattern "->" pattern - ; \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/JetNodeTypes.java b/idea/src/org/jetbrains/jet/JetNodeTypes.java index 079294c2529..e0cde6927b8 100644 --- a/idea/src/org/jetbrains/jet/JetNodeTypes.java +++ b/idea/src/org/jetbrains/jet/JetNodeTypes.java @@ -45,6 +45,7 @@ public interface JetNodeTypes { JetNodeType VALUE_PARAMETER = new JetNodeType("VALUE_PARAMETER"); JetNodeType FUNCTION_TYPE = new JetNodeType("FUNCTION_TYPE"); JetNodeType DECOMPOSER_PROPERTY_LIST = new JetNodeType("DECOMPOSER_PROPERTY_LIST"); + // TODO: review JetNodeType RECEIVER_TYPE_ATTRIBUTES = new JetNodeType("RECEIVER_TYPE_ATTRIBUTES"); JetNodeType PROPERTY_ACCESSOR = new JetNodeType("PROPERTY_ACCESSOR"); JetNodeType CONSTRUCTOR = new JetNodeType("CONSTRUCTOR"); @@ -64,11 +65,6 @@ public interface JetNodeTypes { JetNodeType SUPERTYE_QUALIFIER = new JetNodeType("SUPERTYE_QUALIFIER"); JetNodeType LONG_CONSTANT = new JetNodeType("LONG_CONSTANT"); JetNodeType TUPLE = new JetNodeType("TUPLE"); - JetNodeType ARROW_TUPLE = new JetNodeType("ARROW_TUPLE"); - JetNodeType MAP_LITERAL_ENTRY = new JetNodeType("MAP_LITERAL_ENTRY"); - JetNodeType MAP_LITERAL = new JetNodeType("MAP_LITERAL"); - JetNodeType RANGE_LITERAL = new JetNodeType("RANGE_LITERAL"); - JetNodeType LIST_LITERAL = new JetNodeType("LIST_LITERAL"); JetNodeType TYPEOF = new JetNodeType("TYPEOF"); JetNodeType NEW = new JetNodeType("NEW"); JetNodeType RETURN = new JetNodeType("RETURN"); @@ -101,6 +97,9 @@ public interface JetNodeTypes { JetNodeType DOT_QIALIFIED_EXPRESSION = new JetNodeType("DOT_QIALIFIED_EXPRESSION"); JetNodeType HASH_QIALIFIED_EXPRESSION = new JetNodeType("HASH_QIALIFIED_EXPRESSION"); JetNodeType SAFE_ACCESS_EXPRESSION = new JetNodeType("SAFE_ACCESS_EXPRESSION"); + JetNodeType MATCH_ENTRY = new JetNodeType("MATCH_ENTRY"); + JetNodeType PATTERN = new JetNodeType("PATTERN"); + JetNodeType TUPLE_PATTERN = new JetNodeType("TUPLE_PATTERN"); IElementType NAMESPACE_NAME = new JetNodeType("NAMESPACE_NAME"); } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index bfbebfdd8cd..08e69476029 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -68,7 +68,12 @@ public class JetExpressionParsing extends AbstractJetParsing { CONJUNCTION(ANDAND), DISJUNCTION(OROR), // TODO: RHS - MATCH(MATCH_KEYWORD), + MATCH(MATCH_KEYWORD) { + @Override + public void parseRightHandSide(JetExpressionParsing parsing) { + parsing.parseMatchBlock(); + } + }, // TODO: don't build a binary tree, build a tuple ARROW(JetTokens.ARROW), ASSIGNMENT(EQ, PLUSEQ, MINUSEQ, MULTEQ, DIVEQ, PERCEQ), @@ -94,6 +99,10 @@ public class JetExpressionParsing extends AbstractJetParsing { parsing.parseBinaryExpression(higher); } + public void parseRightHandSide(JetExpressionParsing parsing) { + parseHigherPrecedence(parsing); + } + public final TokenSet getOperations() { return operations; } @@ -138,7 +147,7 @@ public class JetExpressionParsing extends AbstractJetParsing { while (!myBuilder.eolInLastWhitespace() && atSet(precedence.getOperations())) { advance(); // operation - precedence.parseHigherPrecedence(this); + precedence.parseRightHandSide(this); expression.done(BINARY_EXPRESSION); expression = expression.precede(); } @@ -297,30 +306,6 @@ public class JetExpressionParsing extends AbstractJetParsing { else if (at(DO_KEYWORD)) { parseDoWhile(); } - else if (at(INTEGER_LITERAL)) { - parseOneTokenExpression(INTEGER_CONSTANT); - } - else if (at(LONG_LITERAL)) { - parseOneTokenExpression(LONG_CONSTANT); - } - else if (at(CHARACTER_LITERAL)) { - parseOneTokenExpression(CHARACTER_CONSTANT); - } - else if (at(FLOAT_LITERAL)) { - parseOneTokenExpression(FLOAT_CONSTANT); - } - else if (at(STRING_LITERAL) || at(RAW_STRING_LITERAL)) { - parseOneTokenExpression(STRING_CONSTANT); - } - else if (at(TRUE_KEYWORD)) { - parseOneTokenExpression(BOOLEAN_CONSTANT); - } - else if (at(FALSE_KEYWORD)) { - parseOneTokenExpression(BOOLEAN_CONSTANT); - } - else if (at(NULL_KEYWORD)) { - parseOneTokenExpression(NULL); - } else if (atSet(CLASS_KEYWORD, EXTENSION_KEYWORD, FUN_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, TYPE_KEYWORD, DECOMPOSER_KEYWORD)) { parseLocalDeclaration(); @@ -337,12 +322,175 @@ public class JetExpressionParsing extends AbstractJetParsing { else if (at(LBRACE)) { parseFunctionLiteral(); } - else { + else if (!parseLiteralConstant()) { // TODO errorAndAdvance("Expecting an expression"); } } + /* + * literalConstant + * : "true" | "false" + * : StringWithTemplates + * : NoEscapeString + * : IntegerLiteral + * : LongLiteral + * : CharacterLiteral + * : FloatLiteral + * : "null" + * ; + */ + private boolean parseLiteralConstant() { + if (at(TRUE_KEYWORD) || at(FALSE_KEYWORD)) { + parseOneTokenExpression(BOOLEAN_CONSTANT); + } + else if (at(STRING_LITERAL) || at(RAW_STRING_LITERAL)) { + parseOneTokenExpression(STRING_CONSTANT); + } + else if (at(INTEGER_LITERAL)) { + parseOneTokenExpression(INTEGER_CONSTANT); + } + else if (at(LONG_LITERAL)) { + parseOneTokenExpression(LONG_CONSTANT); + } + else if (at(CHARACTER_LITERAL)) { + parseOneTokenExpression(CHARACTER_CONSTANT); + } + else if (at(FLOAT_LITERAL)) { + parseOneTokenExpression(FLOAT_CONSTANT); + } + else if (at(NULL_KEYWORD)) { + parseOneTokenExpression(NULL); + } else { + return false; + } + return true; + } + + /* + * "{" matchEntry+ "}" + */ + private void parseMatchBlock() { + expect(LBRACE, "Expecting '{' to open a match block"); + while (!eof() && !at(RBRACE)) { + if (at(CASE_KEYWORD) || at(LBRACKET)) { + parseMatchEntry(); + } else { + errorUntil("Expecting 'case' to start pattern matching", TokenSet.create(RBRACE, LBRACKET, CASE_KEYWORD)); + } + } + expect(RBRACE, "Expecting '}'"); + } + + /* + * matchEntry + * : attributes "case" pattern ("if" "(" expression ")")? "=>" expression SEMI? // TODO: Consider other options than "=>" + * ; + */ + private void parseMatchEntry() { + PsiBuilder.Marker entry = mark(); + + myJetParsing.parseAttributeList(); + + expect(CASE_KEYWORD, "Expecting 'case' to start pattern matching", TokenSet.create(RBRACE, IF_KEYWORD, DOUBLE_ARROW)); + + parsePattern(); + + if (at(IF_KEYWORD)) { + advance(); // IF_KEYWORD + + parseCondition(); + } + + expect(DOUBLE_ARROW, "Expecting '=>'", TokenSet.create(RBRACE)); + + parseExpression(); + + consumeIf(SEMICOLON); + + entry.done(MATCH_ENTRY); + } + + /* + * pattern + * : constantPattern // literal + * : variablePattern // variable from the context + * : tuplePattern + * : bindingPattern // we allow non-linear patterns + * : decomposerPattern // labeled components are allowed + * ; + */ + private void parsePattern() { + PsiBuilder.Marker pattern = mark(); + + if (at(IDENTIFIER)) { + myJetParsing.parseUserType(); + if (at(LPAR)) { + parseTuplePattern(); + } + } + else if (at(LPAR)) { + parseTuplePattern(); + } + else if (at(QUEST)) { + parseBindingPattern(); + } else if (!parseLiteralConstant()) { + errorUntil("Pattern expected", TokenSet.create(RBRACE, DOUBLE_ARROW)); + } + + pattern.done(PATTERN); + } + + /* + * bindingPattern + * : "?" SimpleName? (":" pattern)? + * ; + */ + private void parseBindingPattern() { + assert at(QUEST); + + advance(); // QUEST + + consumeIf(IDENTIFIER); + + if (at(COLON)) { + advance(); // COLON + + parsePattern(); + } + } + + /* + * tuplePattern + * : "(" ((SimpleName "=")? pattern{","})? ")" + * ; + */ + private void parseTuplePattern() { + assert at(LPAR); + + PsiBuilder.Marker pattern = mark(); + advance(); // LPAR + + if (!at(RPAR)) { + while (true) { + while (at(COMMA)) errorAndAdvance("Expecting a pattern"); + if (at(IDENTIFIER) && lookahead(1) == EQ) { + advance(); // IDENTIFIER + advance(); // EQ + } + parsePattern(); + if (!at(COMMA)) break; + advance(); // COMMA + if (at(RPAR)) { + error("Expecting a pattern"); + break; + } + } + } + + expect(RPAR, "Expecting ')'"); + pattern.done(TUPLE_PATTERN); + } /* * arrayAccess diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java index c9d19c9e847..0be69b16ac3 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -1204,7 +1204,7 @@ public class JetParsing extends AbstractJetParsing { * : simpleUserType{"."} * ; */ - private void parseUserType() { + public void parseUserType() { while (true) { parseSimpleUserType(); if (!at(DOT)) break; diff --git a/idea/src/org/jetbrains/jet/lexer/Jet.flex b/idea/src/org/jetbrains/jet/lexer/Jet.flex index ccd3b5993f3..9f006da7334 100644 --- a/idea/src/org/jetbrains/jet/lexer/Jet.flex +++ b/idea/src/org/jetbrains/jet/lexer/Jet.flex @@ -93,6 +93,7 @@ RAW_STRING_LITERAL = {THREE_QUO} {QUO_STRING_CHAR}* {THREE_QUO}? "false" { return JetTokens.FALSE_KEYWORD ;} "true" { return JetTokens.TRUE_KEYWORD ;} "type" { return JetTokens.TYPE_KEYWORD ;} + "case" { return JetTokens.CASE_KEYWORD ;} "this" { return JetTokens.THIS_KEYWORD ;} "null" { return JetTokens.NULL_KEYWORD ;} "else" { return JetTokens.ELSE_KEYWORD ;} diff --git a/idea/src/org/jetbrains/jet/lexer/JetTokens.java b/idea/src/org/jetbrains/jet/lexer/JetTokens.java index c088c1c807b..d1b495ff541 100644 --- a/idea/src/org/jetbrains/jet/lexer/JetTokens.java +++ b/idea/src/org/jetbrains/jet/lexer/JetTokens.java @@ -52,6 +52,7 @@ public interface JetTokens { JetKeywordToken WHILE_KEYWORD = JetKeywordToken.keyword("while"); JetKeywordToken DO_KEYWORD = JetKeywordToken.keyword("do"); JetKeywordToken MATCH_KEYWORD = JetKeywordToken.keyword("match"); + JetKeywordToken CASE_KEYWORD = JetKeywordToken.keyword("case"); JetToken IDENTIFIER = new JetToken("IDENTIFIER"); @@ -131,7 +132,7 @@ public interface JetTokens { THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, DECOMPOSER_KEYWORD, EXTENSION_KEYWORD, FOR_KEYWORD, NULL_KEYWORD, TYPEOF_KEYWORD, NEW_KEYWORD, TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD, - ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, MATCH_KEYWORD, REF_KEYWORD, OUT_KEYWORD, TRY_KEYWORD + ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, MATCH_KEYWORD, REF_KEYWORD, OUT_KEYWORD, TRY_KEYWORD, CASE_KEYWORD ); TokenSet SOFT_KEYWORDS = TokenSet.create(WRAPS_KEYWORD, IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, LAZY_KEYWORD, GET_KEYWORD, diff --git a/idea/src/org/jetbrains/jet/lexer/_JetLexer.java b/idea/src/org/jetbrains/jet/lexer/_JetLexer.java index 7d0c5d37b0d..9f50f74a178 100644 --- a/idea/src/org/jetbrains/jet/lexer/_JetLexer.java +++ b/idea/src/org/jetbrains/jet/lexer/_JetLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 12/29/10 10:19 PM */ +/* The following code was generated by JFlex 1.4.3 on 1/1/11 8:28 PM */ /* It's an automatically generated code. Do not modify it. */ package org.jetbrains.jet.lexer; @@ -13,8 +13,8 @@ import org.jetbrains.jet.lexer.JetTokens; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 12/29/10 10:19 PM from the specification file - * /home/user/work/jet/idea/src/org/jetbrains/jet/lexer/Jet.flex + * on 1/1/11 8:28 PM from the specification file + * /home/abreslav/work/jet/idea/src/org/jetbrains/jet/lexer/Jet.flex */ class _JetLexer implements FlexLexer { /** initial size of the lookahead buffer */ @@ -145,20 +145,21 @@ class _JetLexer implements FlexLexer { "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+ "\3\35\1\36\1\37\1\40\1\41\1\0\2\2\1\35"+ "\1\42\1\43\1\44\1\45\1\46\1\47\2\11\3\12"+ - "\1\3\1\50\13\3\1\51\3\3\1\52\1\53\1\54"+ + "\1\3\1\50\14\3\1\51\3\3\1\52\1\53\1\54"+ "\6\3\1\55\1\56\1\0\1\57\1\60\1\61\1\62"+ "\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\35"+ - "\1\37\1\72\1\0\1\34\3\0\1\12\1\73\5\3"+ + "\1\37\1\72\1\0\1\34\3\0\1\12\1\73\6\3"+ "\1\74\3\3\1\75\1\76\3\3\1\77\3\3\1\100"+ "\1\3\1\101\2\3\1\102\1\103\1\104\1\105\1\106"+ "\1\107\1\0\2\72\1\0\1\35\2\0\2\3\1\110"+ - "\6\3\1\111\1\112\1\113\1\3\1\114\3\3\1\37"+ - "\1\0\1\35\1\0\3\3\1\115\1\3\1\116\3\3"+ - "\1\117\1\120\1\121\1\122\1\73\3\3\1\123\1\124"+ - "\1\3\1\125\6\3\1\126\2\3\1\127\1\130\1\131"; + "\1\3\1\111\5\3\1\112\1\113\1\114\1\3\1\115"+ + "\3\3\1\37\1\0\1\35\1\0\3\3\1\116\1\3"+ + "\1\117\3\3\1\120\1\121\1\122\1\123\1\73\3\3"+ + "\1\124\1\125\1\3\1\126\6\3\1\127\2\3\1\130"+ + "\1\131\1\132"; private static int [] zzUnpackAction() { - int [] result = new int[208]; + int [] result = new int[211]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -193,25 +194,26 @@ class _JetLexer implements FlexLexer { "\0\u0a56\0\77\0\77\0\77\0\77\0\77\0\77\0\77"+ "\0\u0a95\0\u0ad4\0\u0b13\0\u0b52\0\u0b91\0\275\0\u0bd0\0\u0c0f"+ "\0\u0c4e\0\u0c8d\0\u0ccc\0\u0d0b\0\u0d4a\0\u0d89\0\u0dc8\0\u0e07"+ - "\0\u0e46\0\275\0\u0e85\0\u0ec4\0\u0f03\0\275\0\275\0\275"+ - "\0\u0f42\0\u0f81\0\u0fc0\0\u0fff\0\u103e\0\u107d\0\u10bc\0\77"+ - "\0\u10fb\0\u113a\0\77\0\77\0\77\0\77\0\77\0\77"+ - "\0\77\0\77\0\77\0\77\0\u1179\0\u11b8\0\u11f7\0\u1236"+ - "\0\u1236\0\u1275\0\u12b4\0\u12f3\0\77\0\u1332\0\u1371\0\u13b0"+ - "\0\u13ef\0\u142e\0\u146d\0\275\0\u14ac\0\u14eb\0\u152a\0\275"+ - "\0\275\0\u1569\0\u15a8\0\u15e7\0\275\0\u1626\0\u1665\0\u16a4"+ - "\0\275\0\u16e3\0\275\0\u1722\0\u1761\0\275\0\275\0\77"+ - "\0\77\0\77\0\77\0\u17a0\0\u17df\0\77\0\u181e\0\u185d"+ - "\0\u189c\0\u18db\0\u191a\0\u1959\0\275\0\u1998\0\u19d7\0\u1a16"+ - "\0\u1a55\0\u1a94\0\u1ad3\0\275\0\275\0\u1b12\0\u1b51\0\275"+ - "\0\u1b90\0\u1bcf\0\u1c0e\0\77\0\u1c4d\0\u1236\0\u1c8c\0\u1ccb"+ - "\0\u1d0a\0\u1d49\0\275\0\u1d88\0\275\0\u1dc7\0\u1e06\0\u1e45"+ - "\0\275\0\275\0\275\0\275\0\77\0\u1e84\0\u1ec3\0\u1f02"+ - "\0\275\0\275\0\u1f41\0\275\0\u1f80\0\u1fbf\0\u1ffe\0\u203d"+ - "\0\u207c\0\u20bb\0\275\0\u20fa\0\u2139\0\275\0\275\0\275"; + "\0\u0e46\0\u0e85\0\275\0\u0ec4\0\u0f03\0\u0f42\0\275\0\275"+ + "\0\275\0\u0f81\0\u0fc0\0\u0fff\0\u103e\0\u107d\0\u10bc\0\u10fb"+ + "\0\77\0\u113a\0\u1179\0\77\0\77\0\77\0\77\0\77"+ + "\0\77\0\77\0\77\0\77\0\77\0\u11b8\0\u11f7\0\u1236"+ + "\0\u1275\0\u1275\0\u12b4\0\u12f3\0\u1332\0\77\0\u1371\0\u13b0"+ + "\0\u13ef\0\u142e\0\u146d\0\u14ac\0\u14eb\0\275\0\u152a\0\u1569"+ + "\0\u15a8\0\275\0\275\0\u15e7\0\u1626\0\u1665\0\275\0\u16a4"+ + "\0\u16e3\0\u1722\0\275\0\u1761\0\275\0\u17a0\0\u17df\0\275"+ + "\0\275\0\77\0\77\0\77\0\77\0\u181e\0\u185d\0\77"+ + "\0\u189c\0\u18db\0\u191a\0\u1959\0\u1998\0\u19d7\0\275\0\u1a16"+ + "\0\275\0\u1a55\0\u1a94\0\u1ad3\0\u1b12\0\u1b51\0\275\0\275"+ + "\0\u1b90\0\u1bcf\0\275\0\u1c0e\0\u1c4d\0\u1c8c\0\77\0\u1ccb"+ + "\0\u1275\0\u1d0a\0\u1d49\0\u1d88\0\u1dc7\0\275\0\u1e06\0\275"+ + "\0\u1e45\0\u1e84\0\u1ec3\0\275\0\275\0\275\0\275\0\77"+ + "\0\u1f02\0\u1f41\0\u1f80\0\275\0\275\0\u1fbf\0\275\0\u1ffe"+ + "\0\u203d\0\u207c\0\u20bb\0\u20fa\0\u2139\0\275\0\u2178\0\u21b7"+ + "\0\275\0\275\0\275"; private static int [] zzUnpackRowMap() { - int [] result = new int[208]; + int [] result = new int[211]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -257,191 +259,195 @@ class _JetLexer implements FlexLexer { "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ "\1\0\1\4\3\0\12\4\1\107\11\4\1\110\2\4"+ "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\3\4\1\111\20\4\1\112\2\4"+ + "\1\0\1\4\3\0\3\4\1\111\5\4\1\112\12\4"+ + "\1\113\2\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\15\4\1\114\2\4"+ + "\1\115\6\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\11\4\1\116\15\4"+ "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\15\4\1\113\2\4\1\114\6\4"+ + "\1\0\1\4\3\0\1\4\1\117\25\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\1\4\1\120\7\4\1\121\3\4\1\122\11\4"+ "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\11\4\1\115\15\4\24\0\2\4"+ + "\1\0\1\4\3\0\6\4\1\123\20\4\24\0\2\4"+ "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\1\4\1\116\25\4\24\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\1\4"+ - "\1\117\7\4\1\120\3\4\1\121\11\4\24\0\2\4"+ - "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\6\4\1\122\20\4\24\0\2\4\1\0\2\4"+ + "\3\0\7\4\1\124\6\4\1\125\4\4\1\126\3\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\6\4\1\127\1\4\1\130\6\4"+ + "\1\131\7\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\3\4\1\132\5\4"+ + "\1\133\3\4\1\134\11\4\24\0\2\4\1\0\2\4"+ "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\7\4"+ - "\1\123\6\4\1\124\4\4\1\125\3\4\24\0\2\4"+ - "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\6\4\1\126\1\4\1\127\6\4\1\130\7\4"+ + "\1\135\17\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\23\4\1\136\3\4"+ "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\3\4\1\131\5\4\1\132\3\4"+ - "\1\133\11\4\24\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\7\4\1\134\17\4"+ - "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\23\4\1\135\3\4\24\0\2\4"+ - "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\11\4\1\136\15\4\77\0\1\137\3\0\1\140"+ - "\57\0\1\141\12\0\1\142\76\0\1\143\1\0\1\144"+ - "\74\0\1\145\76\0\1\146\103\0\1\147\77\0\1\150"+ - "\32\0\1\151\45\0\1\152\66\0\1\153\23\0\1\71"+ - "\7\0\1\71\3\0\1\57\1\154\1\61\5\0\1\57"+ - "\1\61\15\0\1\57\33\0\1\155\7\0\1\155\3\0"+ - "\1\57\2\0\1\155\4\0\1\57\16\0\1\57\11\0"+ - "\1\155\20\0\10\62\1\0\66\62\7\156\1\157\67\156"+ - "\1\0\1\66\7\0\1\66\3\0\1\57\1\71\1\61"+ - "\5\0\1\57\1\61\15\0\1\57\32\0\1\160\2\67"+ - "\5\160\1\0\1\67\1\160\1\67\1\161\1\67\1\162"+ - "\1\67\1\160\1\163\3\160\3\67\2\160\1\163\3\160"+ - "\1\67\5\160\2\67\3\160\1\161\25\160\1\0\1\70"+ - "\7\0\1\70\2\0\1\56\1\0\1\164\32\0\1\56"+ - "\26\0\1\71\7\0\1\71\3\0\1\57\1\0\1\61"+ - "\5\0\1\57\1\61\15\0\1\57\32\0\10\13\1\0"+ - "\66\13\10\102\1\0\12\102\1\103\1\165\62\102\1\0"+ - "\66\102\24\0\1\166\53\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\2\4\1\167"+ - "\24\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\13\4\1\170\13\4\24\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\6\4\1\171\20\4\24\0\2\4\1\0"+ + "\1\0\1\4\3\0\11\4\1\137\15\4\77\0\1\140"+ + "\3\0\1\141\57\0\1\142\12\0\1\143\76\0\1\144"+ + "\1\0\1\145\74\0\1\146\76\0\1\147\103\0\1\150"+ + "\77\0\1\151\32\0\1\152\45\0\1\153\66\0\1\154"+ + "\23\0\1\71\7\0\1\71\3\0\1\57\1\155\1\61"+ + "\5\0\1\57\1\61\15\0\1\57\33\0\1\156\7\0"+ + "\1\156\3\0\1\57\2\0\1\156\4\0\1\57\16\0"+ + "\1\57\11\0\1\156\20\0\10\62\1\0\66\62\7\157"+ + "\1\160\67\157\1\0\1\66\7\0\1\66\3\0\1\57"+ + "\1\71\1\61\5\0\1\57\1\61\15\0\1\57\32\0"+ + "\1\161\2\67\5\161\1\0\1\67\1\161\1\67\1\162"+ + "\1\67\1\163\1\67\1\161\1\164\3\161\3\67\2\161"+ + "\1\164\3\161\1\67\5\161\2\67\3\161\1\162\25\161"+ + "\1\0\1\70\7\0\1\70\2\0\1\56\1\0\1\165"+ + "\32\0\1\56\26\0\1\71\7\0\1\71\3\0\1\57"+ + "\1\0\1\61\5\0\1\57\1\61\15\0\1\57\32\0"+ + "\10\13\1\0\66\13\10\102\1\0\12\102\1\103\1\166"+ + "\62\102\1\0\66\102\24\0\1\167\53\0\2\4\1\0"+ "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\10\4\1\172\16\4\24\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\11\4\1\173"+ + "\2\4\1\170\24\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\13\4\1\171"+ + "\13\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ + "\1\4\1\0\1\4\3\0\6\4\1\172\20\4\24\0"+ + "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ + "\1\4\3\0\10\4\1\173\16\4\24\0\2\4\1\0"+ + "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ + "\6\4\1\174\20\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\11\4\1\175"+ "\15\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\13\4\1\174\13\4\24\0"+ + "\1\4\1\0\1\4\3\0\13\4\1\176\13\4\24\0"+ "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\21\4\1\175\5\4\24\0\2\4\1\0"+ + "\1\4\3\0\21\4\1\177\5\4\24\0\2\4\1\0"+ "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\13\4\1\176\13\4\24\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\13\4\1\177"+ - "\3\4\1\200\7\4\24\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\22\4\1\201"+ + "\13\4\1\200\13\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\13\4\1\201"+ + "\3\4\1\202\7\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\22\4\1\203"+ "\4\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\4\4\1\202\22\4\24\0"+ + "\1\4\1\0\1\4\3\0\4\4\1\204\22\4\24\0"+ "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\24\4\1\203\2\4\24\0\2\4\1\0"+ + "\1\4\3\0\24\4\1\205\2\4\24\0\2\4\1\0"+ "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\15\4\1\204\1\205\10\4\24\0\2\4\1\0\2\4"+ + "\15\4\1\206\1\207\10\4\24\0\2\4\1\0\2\4"+ "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\5\4"+ - "\1\206\21\4\24\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\7\4\1\207\4\4"+ - "\1\210\12\4\24\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\7\4\1\211\17\4"+ + "\1\210\21\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\7\4\1\211\4\4"+ + "\1\212\12\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\7\4\1\213\17\4"+ "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\24\4\1\212\2\4\24\0\2\4"+ + "\1\0\1\4\3\0\24\4\1\214\2\4\24\0\2\4"+ "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\10\4\1\213\16\4\24\0\2\4\1\0\2\4"+ + "\3\0\10\4\1\215\16\4\24\0\2\4\1\0\2\4"+ "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\1\4"+ - "\1\214\25\4\24\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\14\4\1\215\12\4"+ + "\1\216\25\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\14\4\1\217\12\4"+ "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\7\4\1\216\14\4\1\217\2\4"+ - "\77\0\1\220\55\0\1\221\1\0\1\222\115\0\1\223"+ - "\23\0\1\155\7\0\1\155\3\0\1\57\7\0\1\57"+ - "\16\0\1\57\32\0\7\156\1\224\67\156\6\225\1\226"+ - "\1\157\67\225\1\0\2\160\6\0\1\160\1\0\1\160"+ - "\1\0\1\160\1\0\1\160\1\0\1\227\3\0\3\160"+ - "\2\0\1\227\3\0\1\160\5\0\2\160\32\0\2\160"+ - "\6\0\1\160\1\0\1\160\1\0\1\160\1\154\1\160"+ - "\1\0\1\227\3\0\3\160\2\0\1\227\3\0\1\160"+ - "\5\0\2\160\32\0\1\230\1\160\6\0\1\230\1\0"+ - "\1\160\1\0\1\160\1\0\1\160\1\231\1\227\3\0"+ - "\3\160\2\0\1\227\3\0\1\160\5\0\2\160\10\0"+ - "\1\231\36\0\1\154\60\0\24\166\1\232\52\166\1\0"+ + "\1\0\1\4\3\0\7\4\1\220\14\4\1\221\2\4"+ + "\77\0\1\222\55\0\1\223\1\0\1\224\115\0\1\225"+ + "\23\0\1\156\7\0\1\156\3\0\1\57\7\0\1\57"+ + "\16\0\1\57\32\0\7\157\1\226\67\157\6\227\1\230"+ + "\1\160\67\227\1\0\2\161\6\0\1\161\1\0\1\161"+ + "\1\0\1\161\1\0\1\161\1\0\1\231\3\0\3\161"+ + "\2\0\1\231\3\0\1\161\5\0\2\161\32\0\2\161"+ + "\6\0\1\161\1\0\1\161\1\0\1\161\1\155\1\161"+ + "\1\0\1\231\3\0\3\161\2\0\1\231\3\0\1\161"+ + "\5\0\2\161\32\0\1\232\1\161\6\0\1\232\1\0"+ + "\1\161\1\0\1\161\1\0\1\161\1\233\1\231\3\0"+ + "\3\161\2\0\1\231\3\0\1\161\5\0\2\161\10\0"+ + "\1\233\36\0\1\155\60\0\24\167\1\234\52\167\1\0"+ "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\3\4\1\233\23\4\24\0\2\4\1\0"+ + "\1\4\3\0\3\4\1\235\23\4\24\0\2\4\1\0"+ "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\1\4\1\234\25\4\24\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\235"+ + "\1\4\1\236\25\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\237"+ "\25\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\13\4\1\236\13\4\24\0"+ + "\1\4\1\0\1\4\3\0\13\4\1\240\13\4\24\0"+ "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\6\4\1\237\20\4\24\0\2\4\1\0"+ + "\1\4\3\0\1\4\1\241\25\4\24\0\2\4\1\0"+ "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\1\4\1\240\25\4\24\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\2\4\1\241"+ - "\24\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\15\4\1\242\11\4\24\0"+ - "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\1\4\1\243\25\4\24\0\2\4\1\0"+ - "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\24\4\1\244\2\4\24\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\245"+ + "\6\4\1\242\20\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\243"+ "\25\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\1\4\1\246\25\4\24\0"+ + "\1\4\1\0\1\4\3\0\2\4\1\244\24\4\24\0"+ "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\3\4\1\247\23\4\24\0\2\4\1\0"+ + "\1\4\3\0\15\4\1\245\11\4\24\0\2\4\1\0"+ "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ - "\6\4\1\250\20\4\24\0\2\4\1\0\2\4\3\0"+ - "\5\4\1\0\1\4\1\0\1\4\3\0\6\4\1\251"+ + "\1\4\1\246\25\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\24\4\1\247"+ + "\2\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ + "\1\4\1\0\1\4\3\0\1\4\1\250\25\4\24\0"+ + "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ + "\1\4\3\0\1\4\1\251\25\4\24\0\2\4\1\0"+ + "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ + "\3\4\1\252\23\4\24\0\2\4\1\0\2\4\3\0"+ + "\5\4\1\0\1\4\1\0\1\4\3\0\6\4\1\253"+ "\20\4\24\0\2\4\1\0\2\4\3\0\5\4\1\0"+ - "\1\4\1\0\1\4\3\0\11\4\1\252\15\4\24\0"+ + "\1\4\1\0\1\4\3\0\6\4\1\254\20\4\24\0"+ "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+ - "\1\4\3\0\24\4\1\253\2\4\23\0\6\156\1\254"+ - "\1\224\67\156\7\225\1\255\67\225\1\0\1\155\7\0"+ - "\1\155\6\0\1\231\35\0\1\231\21\0\1\230\1\160"+ - "\6\0\1\230\1\0\1\160\1\0\1\256\1\0\1\160"+ - "\1\0\1\227\3\0\1\256\2\160\2\0\1\227\3\0"+ - "\1\160\5\0\1\256\1\160\32\0\1\155\7\0\1\155"+ - "\65\0\24\166\1\257\52\166\1\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\4\4"+ - "\1\260\22\4\24\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\10\4\1\261\16\4"+ + "\1\4\3\0\11\4\1\255\15\4\24\0\2\4\1\0"+ + "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+ + "\24\4\1\256\2\4\23\0\6\157\1\257\1\226\67\157"+ + "\7\227\1\260\67\227\1\0\1\156\7\0\1\156\6\0"+ + "\1\233\35\0\1\233\21\0\1\232\1\161\6\0\1\232"+ + "\1\0\1\161\1\0\1\261\1\0\1\161\1\0\1\231"+ + "\3\0\1\261\2\161\2\0\1\231\3\0\1\161\5\0"+ + "\1\261\1\161\32\0\1\156\7\0\1\156\65\0\24\167"+ + "\1\262\52\167\1\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\4\4\1\263\22\4"+ "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\14\4\1\262\12\4\24\0\2\4"+ + "\1\0\1\4\3\0\10\4\1\264\16\4\24\0\2\4"+ "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\6\4\1\263\20\4\24\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\2\4"+ - "\1\264\24\4\24\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\23\4\1\265\3\4"+ - "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\7\4\1\266\17\4\24\0\2\4"+ - "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\6\4\1\267\20\4\24\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\3\4"+ - "\1\270\23\4\24\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\22\4\1\271\4\4"+ - "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\1\4\1\272\25\4\24\0\2\4"+ - "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\25\4\1\273\1\4\24\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\1\4"+ - "\1\274\25\4\23\0\6\225\1\226\1\255\67\225\24\166"+ - "\1\275\52\166\1\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\5\4\1\276\21\4"+ - "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\6\4\1\277\20\4\24\0\2\4"+ - "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\10\4\1\300\16\4\24\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\13\4"+ - "\1\301\13\4\24\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\10\4\1\302\16\4"+ - "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\5\4\1\303\21\4\24\0\2\4"+ - "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\17\4\1\304\7\4\24\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\3\4"+ - "\1\305\23\4\24\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\14\4\1\306\12\4"+ - "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\15\4\1\307\11\4\24\0\2\4"+ - "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\11\4\1\310\15\4\24\0\2\4\1\0\2\4"+ + "\3\0\14\4\1\265\12\4\24\0\2\4\1\0\2\4"+ "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\6\4"+ - "\1\311\20\4\24\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\3\4\1\312\23\4"+ + "\1\266\20\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\2\4\1\267\24\4"+ "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\1\4\1\313\25\4\24\0\2\4"+ + "\1\0\1\4\3\0\23\4\1\270\3\4\24\0\2\4"+ "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\2\4\1\314\24\4\24\0\2\4\1\0\2\4"+ - "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\1\4"+ - "\1\315\25\4\24\0\2\4\1\0\2\4\3\0\5\4"+ - "\1\0\1\4\1\0\1\4\3\0\10\4\1\316\16\4"+ + "\3\0\7\4\1\271\17\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\6\4"+ + "\1\272\20\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\3\4\1\273\23\4"+ "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ - "\1\0\1\4\3\0\1\4\1\317\25\4\24\0\2\4"+ + "\1\0\1\4\3\0\22\4\1\274\4\4\24\0\2\4"+ "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ - "\3\0\7\4\1\320\17\4\23\0"; + "\3\0\1\4\1\275\25\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\25\4"+ + "\1\276\1\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\1\4\1\277\25\4"+ + "\23\0\6\227\1\230\1\260\67\227\24\167\1\300\52\167"+ + "\1\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\5\4\1\301\21\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\6\4\1\302\20\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\10\4"+ + "\1\303\16\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\13\4\1\304\13\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\10\4\1\305\16\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\5\4\1\306\21\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\17\4"+ + "\1\307\7\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\3\4\1\310\23\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\14\4\1\311\12\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\15\4\1\312\11\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\11\4"+ + "\1\313\15\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\6\4\1\314\20\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\3\4\1\315\23\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\1\4\1\316\25\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\2\4"+ + "\1\317\24\4\24\0\2\4\1\0\2\4\3\0\5\4"+ + "\1\0\1\4\1\0\1\4\3\0\1\4\1\320\25\4"+ + "\24\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+ + "\1\0\1\4\3\0\10\4\1\321\16\4\24\0\2\4"+ + "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+ + "\3\0\1\4\1\322\25\4\24\0\2\4\1\0\2\4"+ + "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\7\4"+ + "\1\323\17\4\23\0"; private static int [] zzUnpackTrans() { - int [] result = new int[8568]; + int [] result = new int[8694]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -483,13 +489,13 @@ class _JetLexer implements FlexLexer { private static final String ZZ_ATTRIBUTE_PACKED_0 = "\1\0\1\11\40\1\1\11\1\1\13\11\4\1\2\11"+ - "\1\0\3\1\7\11\37\1\1\11\1\0\1\1\12\11"+ - "\3\1\1\0\1\1\3\0\1\11\32\1\4\11\1\0"+ - "\1\1\1\11\1\0\1\1\2\0\21\1\1\11\1\0"+ + "\1\0\3\1\7\11\40\1\1\11\1\0\1\1\12\11"+ + "\3\1\1\0\1\1\3\0\1\11\33\1\4\11\1\0"+ + "\1\1\1\11\1\0\1\1\2\0\22\1\1\11\1\0"+ "\1\1\1\0\15\1\1\11\23\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[208]; + int [] result = new int[211]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -797,359 +803,363 @@ class _JetLexer implements FlexLexer { case 3: { return JetTokens.IDENTIFIER; } - case 90: break; + case 91: break; case 64: { return JetTokens.FOR_KEYWORD ; } - case 91: break; + case 92: break; case 60: { return JetTokens.OUT_KEYWORD ; } - case 92: break; - case 84: + case 93: break; + case 85: { return JetTokens.RETURN_KEYWORD ; } - case 93: break; - case 73: + case 94: break; + case 74: { return JetTokens.NULL_KEYWORD ; } - case 94: break; + case 95: break; case 14: { return JetTokens.LT ; } - case 95: break; + case 96: break; case 40: { return JetTokens.DO_KEYWORD ; } - case 96: break; + case 97: break; case 13: { return JetTokens.PLUS ; } - case 97: break; + case 98: break; case 28: { return JetTokens.LONG_LITERAL; } - case 98: break; + case 99: break; case 59: { return JetTokens.RAW_STRING_LITERAL; } - case 99: break; + case 100: break; case 48: { return JetTokens.PLUSEQ ; } - case 100: break; - case 78: + case 101: break; + case 79: { return JetTokens.MATCH_KEYWORD ; } - case 101: break; + case 102: break; case 26: { return JetTokens.COMMA ; } - case 102: break; + case 103: break; case 15: { return JetTokens.GT ; } - case 103: break; + case 104: break; case 4: { return JetTokens.WHITE_SPACE; } - case 104: break; - case 85: + case 105: break; + case 86: { return JetTokens.TYPEOF_KEYWORD ; } - case 105: break; + case 106: break; case 24: { return JetTokens.RPAR ; } - case 106: break; + case 107: break; case 46: { return JetTokens.DOUBLE_ARROW; } - case 107: break; - case 74: + case 108: break; + case 75: { return JetTokens.TRUE_KEYWORD ; } - case 108: break; + case 109: break; case 52: { return JetTokens.ANDAND ; } - case 109: break; + case 110: break; case 58: { return JetTokens.DOC_COMMENT; } - case 110: break; + case 111: break; case 29: { return JetTokens.FLOAT_LITERAL; } - case 111: break; + case 112: break; case 30: { return JetTokens.EOL_COMMENT; } - case 112: break; + case 113: break; case 17: { return JetTokens.COLON ; } - case 113: break; + case 114: break; case 50: { return JetTokens.LTEQ ; } - case 114: break; + case 115: break; case 39: { return JetTokens.ARROW ; } - case 115: break; + case 116: break; case 19: { return JetTokens.LBRACKET ; } - case 116: break; + case 117: break; case 57: { yypushback(2); return JetTokens.INTEGER_LITERAL; } - case 117: break; + case 118: break; case 9: { return JetTokens.CHARACTER_LITERAL; } - case 118: break; + case 119: break; case 66: { return JetTokens.VAR_KEYWORD ; } - case 119: break; + case 120: break; case 51: { return JetTokens.GTEQ ; } - case 120: break; + case 121: break; case 2: { return JetTokens.INTEGER_LITERAL; } - case 121: break; + case 122: break; case 22: { return JetTokens.RBRACE ; } - case 122: break; - case 77: + case 123: break; + case 78: { return JetTokens.CLASS_KEYWORD ; } - case 123: break; + case 124: break; case 12: { return JetTokens.EXCL ; } - case 124: break; + case 125: break; case 63: { return JetTokens.TRY_KEYWORD ; } - case 125: break; + case 126: break; case 47: { return JetTokens.EXCLEQ ; } - case 126: break; + case 127: break; case 38: { return JetTokens.MINUSEQ ; } - case 127: break; - case 79: + case 128: break; + case 80: { return JetTokens.THROW_KEYWORD ; } - case 128: break; - case 82: + case 129: break; + case 83: { return JetTokens.WHILE_KEYWORD ; } - case 129: break; + case 130: break; case 37: { return JetTokens.MINUSMINUS; } - case 130: break; - case 86: + case 131: break; + case 87: { return JetTokens.CONTINUE_KEYWORD ; } - case 131: break; + case 132: break; case 70: { return JetTokens.NOT_IN; } - case 132: break; + case 133: break; case 5: { return JetTokens.DIV ; } - case 133: break; + case 134: break; case 55: { return JetTokens.ELVIS ; } - case 134: break; + case 135: break; case 16: { return JetTokens.QUEST ; } - case 135: break; + case 136: break; case 53: { return JetTokens.OROR ; } - case 136: break; + case 137: break; case 18: { return JetTokens.PERC ; } - case 137: break; + case 138: break; case 71: { return JetTokens.EXCLEQEQEQ; } - case 138: break; + case 139: break; case 56: { return JetTokens.PERCEQ ; } - case 139: break; + case 140: break; case 35: { return JetTokens.RANGE ; } - case 140: break; + case 141: break; case 1: { return TokenType.BAD_CHARACTER; } - case 141: break; + case 142: break; case 54: { return JetTokens.SAFE_ACCESS; } - case 142: break; - case 88: - { return JetTokens.NAMESPACE_KEYWORD ; - } case 143: break; case 89: - { return JetTokens.DECOMPOSER_KEYWORD ; + { return JetTokens.NAMESPACE_KEYWORD ; } case 144: break; + case 90: + { return JetTokens.DECOMPOSER_KEYWORD ; + } + case 145: break; case 69: { return JetTokens.NOT_IS; } - case 145: break; + case 146: break; case 6: { return JetTokens.MUL ; } - case 146: break; + case 147: break; case 20: { return JetTokens.RBRACKET ; } - case 147: break; + case 148: break; case 49: { return JetTokens.PLUSPLUS ; } - case 148: break; - case 76: + case 149: break; + case 77: { return JetTokens.THIS_KEYWORD ; } - case 149: break; + case 150: break; + case 73: + { return JetTokens.CASE_KEYWORD ; + } + case 151: break; case 7: { return JetTokens.DOT ; } - case 150: break; + case 152: break; case 25: { return JetTokens.SEMICOLON ; } - case 151: break; + case 153: break; case 44: { return JetTokens.IF_KEYWORD ; } - case 152: break; + case 154: break; case 11: { return JetTokens.EQ ; } - case 153: break; + case 155: break; case 23: { return JetTokens.LPAR ; } - case 154: break; + case 156: break; case 8: { return JetTokens.MINUS ; } - case 155: break; - case 80: + case 157: break; + case 81: { return JetTokens.FALSE_KEYWORD ; } - case 156: break; - case 75: + case 158: break; + case 76: { return JetTokens.TYPE_KEYWORD ; } - case 157: break; + case 159: break; case 61: { return JetTokens.REF_KEYWORD ; } - case 158: break; + case 160: break; case 65: { return JetTokens.FUN_KEYWORD ; } - case 159: break; + case 161: break; case 42: { return JetTokens.IS_KEYWORD ; } - case 160: break; + case 162: break; case 32: { return JetTokens.DIVEQ ; } - case 161: break; - case 87: + case 163: break; + case 88: { return JetTokens.EXTENSION_KEYWORD ; } - case 162: break; + case 164: break; case 72: { return JetTokens.ELSE_KEYWORD ; } - case 163: break; + case 165: break; case 41: { return JetTokens.AS_KEYWORD ; } - case 164: break; + case 166: break; case 43: { return JetTokens.IN_KEYWORD ; } - case 165: break; + case 167: break; case 45: { return JetTokens.EQEQ ; } - case 166: break; + case 168: break; case 67: { return JetTokens.VAL_KEYWORD ; } - case 167: break; + case 169: break; case 68: { return JetTokens.EQEQEQ ; } - case 168: break; + case 170: break; case 62: { return JetTokens.NEW_KEYWORD ; } - case 169: break; + case 171: break; case 33: { return JetTokens.MULTEQ ; } - case 170: break; + case 172: break; case 10: { return JetTokens.STRING_LITERAL; } - case 171: break; + case 173: break; case 21: { return JetTokens.LBRACE ; } - case 172: break; - case 83: + case 174: break; + case 84: { return JetTokens.OBJECT_KEYWORD ; } - case 173: break; - case 81: + case 175: break; + case 82: { return JetTokens.BREAK_KEYWORD ; } - case 174: break; + case 176: break; case 31: { return JetTokens.BLOCK_COMMENT; } - case 175: break; + case 177: break; case 36: { return JetTokens.FILTER ; } - case 176: break; + case 178: break; case 27: { return JetTokens.HASH ; } - case 177: break; + case 179: break; case 34: { return JetTokens.MAP ; } - case 178: break; + case 180: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true;