Match implemented. Not tested yet.

This commit is contained in:
Andrey Breslav
2011-01-01 20:29:39 +03:00
parent a7b790cb13
commit f9fd2182ff
9 changed files with 484 additions and 328 deletions
+2 -1
View File
@@ -103,8 +103,9 @@ literalConstant
: StringWithTemplates
: NoEscapeString
: IntegerLiteral
: HexadecimalLiteral
: LongLiteral
: CharacterLiteral
: FloatLiteral
: "null"
;
+1
View File
@@ -62,6 +62,7 @@ match
out
ref
try
case
Soft:
wraps -- in a class header
+2 -7
View File
@@ -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
;
+4 -5
View File
@@ -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");
}
@@ -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
@@ -1204,7 +1204,7 @@ public class JetParsing extends AbstractJetParsing {
* : simpleUserType{"."}
* ;
*/
private void parseUserType() {
public void parseUserType() {
while (true) {
parseSimpleUserType();
if (!at(DOT)) break;
@@ -93,6 +93,7 @@ RAW_STRING_LITERAL = {THREE_QUO} {QUO_STRING_CHAR}* {THREE_QUO}?
<YYINITIAL> "false" { return JetTokens.FALSE_KEYWORD ;}
<YYINITIAL> "true" { return JetTokens.TRUE_KEYWORD ;}
<YYINITIAL> "type" { return JetTokens.TYPE_KEYWORD ;}
<YYINITIAL> "case" { return JetTokens.CASE_KEYWORD ;}
<YYINITIAL> "this" { return JetTokens.THIS_KEYWORD ;}
<YYINITIAL> "null" { return JetTokens.NULL_KEYWORD ;}
<YYINITIAL> "else" { return JetTokens.ELSE_KEYWORD ;}
@@ -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,
+296 -286
View File
@@ -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
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3
* on 12/29/10 10:19 PM from the specification file
* <tt>/home/user/work/jet/idea/src/org/jetbrains/jet/lexer/Jet.flex</tt>
* on 1/1/11 8:28 PM from the specification file
* <tt>/home/abreslav/work/jet/idea/src/org/jetbrains/jet/lexer/Jet.flex</tt>
*/
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;