Merge remote-tracking branch 'origin/master'

This commit is contained in:
svtk
2011-12-26 18:37:27 +04:00
467 changed files with 5068 additions and 2902 deletions
+5 -5
View File
@@ -1,6 +1,6 @@
namespace jet
package jet
namespace typeinfo {
package typeinfo {
class TypeInfo<out T> {
fun isSubtypeOf(other : TypeInfo<*>) : Boolean
fun isInstance(obj : Any?) : Boolean
@@ -10,7 +10,7 @@ namespace typeinfo {
fun typeinfo<T>(expression : T) : TypeInfo<T>
}
namespace io {
package io {
fun print(message : Any?)
fun print(message : Int)
fun print(message : Long)
@@ -34,7 +34,7 @@ namespace io {
fun readLine() : String?
}
fun <R> Any.synchronized(block : fun() : R) : R
fun <R> Any.synchronized(block : () -> R) : R
fun Any?.identityEquals(other : Any?) : Boolean // = this === other
@@ -139,7 +139,7 @@ trait CharIterable : Iterable<Char> {
fun Array<T>(val size : Int) : Array<T?>
class Array<T>(val size : Int, init : fun(Int) : T) {
class Array<T>(val size : Int, init : (Int) -> T) {
fun get(index : Int) : T
fun set(index : Int, value : T) : Unit
@@ -2,6 +2,7 @@ package org.jetbrains.jet;
import com.intellij.core.JavaCoreEnvironment;
import com.intellij.lang.java.JavaParserDefinition;
import com.intellij.mock.MockApplication;
import com.intellij.openapi.Disposable;
import org.jetbrains.jet.lang.parsing.JetParserDefinition;
import org.jetbrains.jet.plugin.JetFileType;
@@ -19,4 +20,8 @@ public class JetCoreEnvironment extends JavaCoreEnvironment {
registerParserDefinition(new JavaParserDefinition());
registerParserDefinition(new JetParserDefinition());
}
public MockApplication getApplication() {
return myApplication;
}
}
@@ -18,7 +18,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
*/
public class JetExpressionParsing extends AbstractJetParsing {
private static final TokenSet WHEN_CONDITION_RECOVERY_SET = TokenSet.create(RBRACE, IN_KEYWORD, NOT_IN, IS_KEYWORD, NOT_IS, ELSE_KEYWORD);
private static final TokenSet WHEN_CONDITION_RECOVERY_SET_WITH_DOUBLE_ARROW = TokenSet.create(RBRACE, IN_KEYWORD, NOT_IN, IS_KEYWORD, NOT_IS, ELSE_KEYWORD, DOUBLE_ARROW, DOT);
private static final TokenSet WHEN_CONDITION_RECOVERY_SET_WITH_ARROW = TokenSet.create(RBRACE, IN_KEYWORD, NOT_IN, IS_KEYWORD, NOT_IS, ELSE_KEYWORD, ARROW, DOT);
private static final ImmutableMap<String, JetToken> KEYWORD_TEXTS = tokenSetToMap(KEYWORDS);
@@ -38,8 +38,8 @@ public class JetExpressionParsing extends AbstractJetParsing {
CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD, TRY_KEYWORD, ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD,
WHEN_KEYWORD, RBRACKET, RBRACE, RPAR, PLUSPLUS, MINUSMINUS, MUL, PLUS, MINUS, EXCL, DIV, PERC, LTEQ,
// TODO GTEQ, foo<bar, baz>=x
EQEQEQ, ARROW, DOUBLE_ARROW, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR, SAFE_ACCESS, ELVIS,
SEMICOLON, RANGE, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ, NOT_IN, NOT_IS, HASH,
EQEQEQ, ARROW, ARROW, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR, SAFE_ACCESS, ELVIS,
SEMICOLON, RANGE, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ, NOT_IN, NOT_IS, //HASH,
COLON
);
@@ -49,6 +49,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
// Atomic
LPAR, // parenthesized
HASH, // Tuple
// literal constant
TRUE_KEYWORD, FALSE_KEYWORD,
@@ -100,13 +101,14 @@ public class JetExpressionParsing extends AbstractJetParsing {
);
/*package*/ static final TokenSet EXPRESSION_FOLLOW = TokenSet.create(
SEMICOLON, DOUBLE_ARROW, COMMA, RBRACE, RPAR, RBRACKET
SEMICOLON, ARROW, COMMA, RBRACE, RPAR, RBRACKET
);
@SuppressWarnings({"UnusedDeclaration"})
private enum Precedence {
POSTFIX(PLUSPLUS, MINUSMINUS,
HASH, DOT, SAFE_ACCESS, QUEST), // typeArguments? valueArguments : typeArguments : arrayAccess
// HASH,
DOT, SAFE_ACCESS, QUEST), // typeArguments? valueArguments : typeArguments : arrayAccess
PREFIX(MINUS, PLUS, MINUSMINUS, PLUSPLUS, EXCL, LABEL_IDENTIFIER, AT, ATAT) { // attributes
@@ -150,7 +152,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
EQUALITY(EQEQ, EXCLEQ, EQEQEQ, EXCLEQEQEQ),
CONJUNCTION(ANDAND),
DISJUNCTION(OROR),
ARROW(JetTokens.ARROW),
// ARROW(JetTokens.ARROW),
ASSIGNMENT(EQ, PLUSEQ, MINUSEQ, MULTEQ, DIVEQ, PERCEQ),
;
@@ -374,13 +376,13 @@ public class JetExpressionParsing extends AbstractJetParsing {
expression.done(PREDICATE_EXPRESSION);
}
else if (at(HASH)) {
advance(); // HASH
expect(IDENTIFIER, "Expecting property or function name");
expression.done(HASH_QUALIFIED_EXPRESSION);
}
// else if (at(HASH)) {
// advance(); // HASH
//
// expect(IDENTIFIER, "Expecting property or function name");
//
// expression.done(HASH_QUALIFIED_EXPRESSION);
// }
else if (atSet(Precedence.POSTFIX.getOperations())) {
parseOperationReference();
expression.done(POSTFIX_EXPRESSION);
@@ -502,7 +504,10 @@ public class JetExpressionParsing extends AbstractJetParsing {
// System.out.println("atom at " + myBuilder.getTokenText());
if (at(LPAR)) {
parseParenthesizedExpressionOrTuple();
parseParenthesizedExpression();
}
else if (at(HASH)) {
parseTupleExpression();
}
else if (at(NAMESPACE_KEYWORD)) {
parseOneTokenExpression(ROOT_NAMESPACE);
@@ -756,13 +761,13 @@ public class JetExpressionParsing extends AbstractJetParsing {
if (at(ELSE_KEYWORD)) {
advance(); // ELSE_KEYWORD
if (!at(DOUBLE_ARROW)) {
errorUntil("Expecting '=>'", TokenSet.create(DOUBLE_ARROW,
if (!at(ARROW)) {
errorUntil("Expecting '=>'", TokenSet.create(ARROW,
RBRACE, EOL_OR_SEMICOLON));
}
if (at(DOUBLE_ARROW)) {
advance(); // DOUBLE_ARROW
if (at(ARROW)) {
advance(); // ARROW
if (atSet(WHEN_CONDITION_RECOVERY_SET)) {
error("Expecting an element");
@@ -790,7 +795,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
if (!at(COMMA)) break;
advance(); // COMMA
}
expect(DOUBLE_ARROW, "Expecting '=>' or 'when'", WHEN_CONDITION_RECOVERY_SET);
expect(ARROW, "Expecting '->' or 'when'", WHEN_CONDITION_RECOVERY_SET);
if (atSet(WHEN_CONDITION_RECOVERY_SET)) {
error("Expecting an element");
} else {
@@ -815,7 +820,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
mark.done(OPERATION_REFERENCE);
if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_DOUBLE_ARROW)) {
if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) {
error("Expecting an element");
} else {
parseExpression();
@@ -824,7 +829,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
} else if (at(IS_KEYWORD) || at(NOT_IS)) {
advance(); // IS_KEYWORD or NOT_IS
if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_DOUBLE_ARROW)) {
if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) {
error("Expecting a type or a decomposer pattern");
} else {
parsePattern();
@@ -832,7 +837,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
condition.done(WHEN_CONDITION_IS_PATTERN);
} else {
PsiBuilder.Marker expressionPattern = mark();
if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_DOUBLE_ARROW)) {
if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) {
error("Expecting an expression, is-condition or in-condition");
} else {
parseExpression();
@@ -863,9 +868,8 @@ public class JetExpressionParsing extends AbstractJetParsing {
if (at(NAMESPACE_KEYWORD) || at(IDENTIFIER) || at(FUN_KEYWORD) || at(THIS_KEYWORD)) {
PsiBuilder.Marker rollbackMarker = mark();
parseBinaryExpression(Precedence.ELVIS);
if (at(AT)) {
if (at(HASH)) {
rollbackMarker.drop();
advance(); // AT
PsiBuilder.Marker list = mark();
parseTuplePattern(DECOMPOSER_ARGUMENT);
list.done(DECOMPOSER_ARGUMENT_LIST);
@@ -877,9 +881,9 @@ public class JetExpressionParsing extends AbstractJetParsing {
rollbackMarker = mark();
myJetParsing.parseTypeRef();
if (at(AT)) {
errorAndAdvance("'@' is allowed only after a decomposer element, not after a type");
}
// if (at(AT)) {
// errorAndAdvance("'@' is allowed only after a decomposer element, not after a type");
// }
if (myBuilder.getCurrentOffset() < expressionEndOffset) {
rollbackMarker.rollbackTo();
parseBinaryExpression(Precedence.ELVIS);
@@ -889,7 +893,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
pattern.done(TYPE_PATTERN);
}
}
} else if (at(LPAR)) {
} else if (at(HASH)) {
parseTuplePattern(TUPLE_PATTERN_ENTRY);
pattern.done(TUPLE_PATTERN);
}
@@ -905,20 +909,21 @@ public class JetExpressionParsing extends AbstractJetParsing {
} else if (parseLiteralConstant()) {
pattern.done(EXPRESSION_PATTERN);
} else {
errorUntil("Pattern expected", TokenSet.create(RBRACE, DOUBLE_ARROW));
errorUntil("Pattern expected", TokenSet.create(RBRACE, ARROW));
pattern.drop();
}
}
/*
* tuplePattern
* : "(" ((SimpleName "=")? pattern){","}? ")"
* : "#" "(" ((SimpleName "=")? pattern){","}? ")"
* ;
*/
private void parseTuplePattern(JetNodeType entryType) {
myBuilder.disableNewlines();
expect(LPAR, "Expecting '('", getDecomposerExpressionFollow());
expect(HASH, "Expecting a tuple pattern of the form '#(...)'", getDecomposerExpressionFollow());
expect(LPAR, "Expecting a tuple pattern of the form '#(...)'", getDecomposerExpressionFollow());
if (!at(RPAR)) {
while (true) {
@@ -1059,8 +1064,8 @@ public class JetExpressionParsing extends AbstractJetParsing {
/*
* functionLiteral // one can use "it" as a parameter name
* : "{" expressions "}"
* : "{" (modifiers SimpleName){","} "=>" statements "}"
* : "{" (type ".")? "(" (modifiers SimpleName (":" type)?){","} ")" (":" type)? "=>" expressions "}"
* : "{" (modifiers SimpleName){","} "->" statements "}"
* : "{" (type ".")? "(" (modifiers SimpleName (":" type)?){","} ")" (":" type)? "->" expressions "}"
* ;
*/
private void parseFunctionLiteral() {
@@ -1077,83 +1082,112 @@ public class JetExpressionParsing extends AbstractJetParsing {
myBuilder.enableNewlines();
advance(); // LBRACE
int doubleArrowPos = matchTokenStreamPredicate(new FirstBefore(new At(DOUBLE_ARROW), new At(RBRACE)) {
@Override
public boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses) {
return openBraces == 0;
boolean paramsFound = false;
if (at(ARROW)) {
// { -> ...}
advance(); // ARROW
mark().done(VALUE_PARAMETER_LIST);
paramsFound = true;
}
else if (at(LPAR)) {
// Look for ARROW after matching RPAR
// {(a, b) -> ...}
{
PsiBuilder.Marker rollbackMarker = mark();
parseFunctionLiteralParametersAndType();
paramsFound = rollbackOrDropAt(rollbackMarker, ARROW);
}
});
boolean doubleArrowPresent = doubleArrowPos >= 0;
if (doubleArrowPresent) {
boolean dontExpectParameters = false;
int lastDot = matchTokenStreamPredicate(new LastBefore(new At(DOT), new AtOffset(doubleArrowPos)));
if (lastDot >= 0) { // There is a receiver type
createTruncatedBuilder(lastDot).parseTypeRef();
expect(DOT, "Expecting '.'");
if (!at(LPAR)) {
int firstLParPos = matchTokenStreamPredicate(new FirstBefore(new At(LPAR), new AtOffset(doubleArrowPos)));
if (firstLParPos >= 0) {
errorUntilOffset("Expecting '('", firstLParPos);
} else {
errorUntilOffset("To specify a receiver type, use the full notation: {ReceiverType.(parameters) [: ReturnType] => ...}",
doubleArrowPos);
dontExpectParameters = true;
if (!paramsFound) {
// If not found, try a typeRef DOT and then LPAR .. RPAR ARROW
// {((A) -> B).(x) -> ... }
PsiBuilder.Marker rollbackMarker = mark();
int lastDot = matchTokenStreamPredicate(new LastBefore(new At(DOT), new AtSet(ARROW, RPAR)));
if (lastDot >= 0) {
createTruncatedBuilder(lastDot).parseTypeRef();
if (at(DOT)) {
advance(); // DOT
parseFunctionLiteralParametersAndType();
}
}
paramsFound = rollbackOrDropAt(rollbackMarker, ARROW);
}
if (at(LPAR)) {
parseFunctionLiteralParameterList();
if (at(COLON)) {
advance(); // COLON
if (at(DOUBLE_ARROW)) {
error("Expecting a type");
}
else {
myJetParsing.parseTypeRef();
}
}
}
else if (!dontExpectParameters) {
PsiBuilder.Marker parameterList = mark();
while (!eof()) {
PsiBuilder.Marker parameter = mark();
int parameterNamePos = matchTokenStreamPredicate(new LastBefore(new At(IDENTIFIER), new AtOffset(doubleArrowPos)));
createTruncatedBuilder(parameterNamePos).parseModifierList(MODIFIER_LIST, false);
expect(IDENTIFIER, "Expecting parameter name", TokenSet.create(DOUBLE_ARROW));
parameter.done(VALUE_PARAMETER);
if (at(COLON)) {
errorUntilOffset("To specify a type of a parameter or a return type, use the full notation: {(parameter : Type) : ReturnType => ...}", doubleArrowPos);
}
else if (at(DOUBLE_ARROW)) {
break;
}
else if (!at(COMMA)) {
errorUntilOffset("Expecting '=>' or ','", doubleArrowPos);
}
else {
advance(); // COMMA
}
}
parameterList.done(VALUE_PARAMETER_LIST);
}
expectNoAdvance(DOUBLE_ARROW, "Expecting '=>'");
}
else {
if (at(IDENTIFIER)) {
// Try to parse a simple name list followed by an ARROW
// {a -> ...}
// {a, b -> ...}
PsiBuilder.Marker rollbackMarker = mark();
parseFunctionLiteralShorthandParameterList();
parseOptionalFunctionLiteralType();
paramsFound = rollbackOrDropAt(rollbackMarker, ARROW);
}
if (!paramsFound && atSet(JetParsing.TYPE_REF_FIRST)) {
// Try to parse a type DOT valueParameterList ARROW
// {A.(b) -> ...}
PsiBuilder.Marker rollbackMarker = mark();
int lastDot = matchTokenStreamPredicate(new LastBefore(new At(DOT), new AtSet(ARROW, RBRACE)));
if (lastDot >= 0) { // There is a receiver type
createTruncatedBuilder(lastDot).parseTypeRef();
}
if (at(DOT)) {
advance(); // DOT
parseFunctionLiteralParametersAndType();
paramsFound = rollbackOrDropAt(rollbackMarker, ARROW);
}
else {
rollbackMarker.rollbackTo();
}
}
// int doubleArrowPos = matchTokenStreamPredicate(new FirstBefore(new At(ARROW), new At(RBRACE)) {
// @Override
// public boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses) {
// return openBraces == 0;
// }
// });
//
// boolean doubleArrowPresent = doubleArrowPos >= 0;
// if (doubleArrowPresent) {
// boolean dontExpectParameters = false;
//
// int lastDot = matchTokenStreamPredicate(new LastBefore(new At(DOT), new AtOffset(doubleArrowPos)));
// if (lastDot >= 0) { // There is a receiver type
// createTruncatedBuilder(lastDot).parseTypeRef();
//
// expect(DOT, "Expecting '.'");
//
// if (!at(LPAR)) {
// int firstLParPos = matchTokenStreamPredicate(new FirstBefore(new At(LPAR), new AtOffset(doubleArrowPos)));
//
// if (firstLParPos >= 0) {
// errorUntilOffset("Expecting '('", firstLParPos);
// } else {
// errorUntilOffset("To specify a receiver type, use the full notation: {ReceiverType.(parameters) [: ReturnType] => ...}",
// doubleArrowPos);
// dontExpectParameters = true;
// }
// }
//
// }
//
// if (at(LPAR)) {
// parseFunctionLiteralParametersAndType();
// }
// else if (!dontExpectParameters) {
// parseFunctionLiteralShorthandParameterList();
// }
//
// expectNoAdvance(ARROW, "Expecting '=>'");
// }
}
if (!paramsFound) {
if (preferBlock) {
literal.drop();
parseStatements();
@@ -1175,12 +1209,80 @@ public class JetExpressionParsing extends AbstractJetParsing {
literalExpression.done(FUNCTION_LITERAL_EXPRESSION);
}
private boolean rollbackOrDropAt(PsiBuilder.Marker rollbackMarker, IElementType dropAt) {
if (at(dropAt)) {
advance(); // dropAt
rollbackMarker.drop();
return true;
}
rollbackMarker.rollbackTo();
return false;
}
/*
* SimpleName{,}
*/
private void parseFunctionLiteralShorthandParameterList() {
PsiBuilder.Marker parameterList = mark();
while (!eof()) {
PsiBuilder.Marker parameter = mark();
// int parameterNamePos = matchTokenStreamPredicate(new LastBefore(new At(IDENTIFIER), new AtOffset(doubleArrowPos)));
// createTruncatedBuilder(parameterNamePos).parseModifierList(MODIFIER_LIST, false);
expect(IDENTIFIER, "Expecting parameter name", TokenSet.create(ARROW));
parameter.done(VALUE_PARAMETER);
if (at(COLON)) {
PsiBuilder.Marker errorMarker = mark();
advance(); // COLON
myJetParsing.parseTypeRef();
errorMarker.error("To specify a type of a parameter or a return type, use the full notation: {(parameter : Type) : ReturnType => ...}");
}
else if (at(ARROW)) {
break;
}
else if (at(COMMA)) {
advance(); // COMMA
}
else {
error("Expecting '->' or ','");
break;
}
}
parameterList.done(VALUE_PARAMETER_LIST);
}
private void parseFunctionLiteralParametersAndType() {
parseFunctionLiteralParameterList();
parseOptionalFunctionLiteralType();
}
/*
* (":" type)?
*/
private void parseOptionalFunctionLiteralType() {
if (at(COLON)) {
advance(); // COLON
if (at(ARROW)) {
error("Expecting a type");
}
else {
myJetParsing.parseTypeRef();
}
}
}
/*
* "(" (modifiers SimpleName (":" type)?){","} ")"
*/
private void parseFunctionLiteralParameterList() {
PsiBuilder.Marker list = mark();
expect(LPAR, "Expecting a parameter list in parentheses (...)", TokenSet.create(DOUBLE_ARROW, COLON));
expect(LPAR, "Expecting a parameter list in parentheses (...)", TokenSet.create(ARROW, COLON));
myBuilder.disableNewlines();
@@ -1189,7 +1291,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
if (at(COMMA)) errorAndAdvance("Expecting a parameter declaration");
PsiBuilder.Marker parameter = mark();
int parameterNamePos = matchTokenStreamPredicate(new LastBefore(new At(IDENTIFIER), new AtSet(COMMA, RPAR, COLON, DOUBLE_ARROW)));
int parameterNamePos = matchTokenStreamPredicate(new LastBefore(new At(IDENTIFIER), new AtSet(COMMA, RPAR, COLON, ARROW)));
createTruncatedBuilder(parameterNamePos).parseModifierList(MODIFIER_LIST, false);
expect(IDENTIFIER, "Expecting parameter declaration");
@@ -1211,7 +1313,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
myBuilder.restoreNewlinesState();
expect(RPAR, "Expecting ')", TokenSet.create(DOUBLE_ARROW, COLON));
expect(RPAR, "Expecting ')", TokenSet.create(ARROW, COLON));
list.done(VALUE_PARAMETER_LIST);
}
@@ -1567,29 +1669,43 @@ public class JetExpressionParsing extends AbstractJetParsing {
}
/*
* tupleLiteral // Ambiguity when after a SimpleName (infix call). In this case (e) is treated as an element in parentheses
* // to put a tuple, write write ((e))
* : "(" ((SimpleName "=")? element){","} ")"
* ;
*
* element
* : "(" element ")"
* ;
*
* TODO: duplication with valueArguments (but for the error messages)
* "(" expression ")"
*/
private void parseParenthesizedExpressionOrTuple() {
private void parseParenthesizedExpression() {
assert _at(LPAR);
PsiBuilder.Marker mark = mark();
myBuilder.disableNewlines();
advance(); // LPAR
boolean tuple = false;
if (at(RPAR)) {
error("Expecting an expression");
}
else {
parseExpression();
}
expect(RPAR, "Expecting ')'");
myBuilder.restoreNewlinesState();
mark.done(PARENTHESIZED);
}
/*
* tupleLiteral
* : "#" "(" (((SimpleName "=")? expression){","})? ")"
* ;
*/
private void parseTupleExpression() {
assert _at(HASH);
PsiBuilder.Marker mark = mark();
advance(); // HASH
advance(); // LPAR
myBuilder.disableNewlines();
if (!at(RPAR)) {
while (true) {
while (at(COMMA)) {
tuple = true;
errorAndAdvance("Expecting a tuple entry (element)");
}
@@ -1597,7 +1713,6 @@ public class JetExpressionParsing extends AbstractJetParsing {
PsiBuilder.Marker entry = mark();
advance(); // IDENTIFIER
advance(); // EQ
tuple = true;
parseExpression();
entry.done(LABELED_TUPLE_ENTRY);
} else {
@@ -1606,21 +1721,18 @@ public class JetExpressionParsing extends AbstractJetParsing {
if (!at(COMMA)) break;
advance(); // COMMA
tuple = true;
if (at(RPAR)) {
error("Expecting a tuple entry (element)");
break;
}
}
} else {
tuple = true;
}
}
expect(RPAR, "Expecting ')'");
myBuilder.restoreNewlinesState();
mark.done(tuple ? TUPLE : PARENTHESIZED);
mark.done(TUPLE);
}
/*
@@ -37,7 +37,7 @@ public class JetParsing extends AbstractJetParsing {
private static final TokenSet TYPE_PARAMETER_GT_RECOVERY_SET = TokenSet.create(WHERE_KEYWORD, LPAR, COLON, LBRACE, GT);
private static final TokenSet PARAMETER_NAME_RECOVERY_SET = TokenSet.create(COLON, EQ, COMMA, RPAR);
private static final TokenSet NAMESPACE_NAME_RECOVERY_SET = TokenSet.create(DOT, EOL_OR_SEMICOLON);
/*package*/ static final TokenSet TYPE_REF_FIRST = TokenSet.create(LBRACKET, IDENTIFIER, FUN_KEYWORD, LPAR, CAPITALIZED_THIS_KEYWORD);
/*package*/ static final TokenSet TYPE_REF_FIRST = TokenSet.create(LBRACKET, IDENTIFIER, FUN_KEYWORD, LPAR, CAPITALIZED_THIS_KEYWORD, HASH);
private static final TokenSet RECEIVER_TYPE_TERMINATORS = TokenSet.create(DOT, SAFE_ACCESS);
public static JetParsing createForTopLevel(SemanticWhitespaceAwarePsiBuilder builder) {
@@ -826,12 +826,12 @@ public class JetParsing extends AbstractJetParsing {
boolean typeParametersDeclared = at(LT) ? parseTypeParameterList(TokenSet.create(IDENTIFIER, EQ, COLON, SEMICOLON)) : false;
TokenSet propertyNameFollow = TokenSet.create(COLON, EQ, LBRACE, SEMICOLON);
TokenSet propertyNameFollow = TokenSet.create(COLON, EQ, LBRACE, SEMICOLON, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, CLASS_KEYWORD);
myBuilder.disableJoiningComplexTokens();
// TODO: extract constant
int lastDot = matchTokenStreamPredicate(new FirstBefore(
int lastDot = matchTokenStreamPredicate(new LastBefore(
new AtSet(DOT, SAFE_ACCESS),
new AbstractTokenStreamPredicate() {
@Override
@@ -847,7 +847,7 @@ public class JetParsing extends AbstractJetParsing {
parseReceiverType("property", propertyNameFollow, lastDot);
myBuilder.enableJoiningComplexTokens();
myBuilder.restoreJoiningComplexTokensState();
if (at(COLON)) {
advance(); // COLON
@@ -985,7 +985,7 @@ public class JetParsing extends AbstractJetParsing {
myBuilder.disableJoiningComplexTokens();
int lastDot = findLastBefore(RECEIVER_TYPE_TERMINATORS, TokenSet.create(LPAR), true);
parseReceiverType("function", TokenSet.create(LT, LPAR, COLON, EQ), lastDot);
myBuilder.enableJoiningComplexTokens();
myBuilder.restoreJoiningComplexTokensState();
TokenSet valueParametersFollow = TokenSet.create(COLON, EQ, LBRACE, SEMICOLON, RPAR);
@@ -1281,17 +1281,54 @@ public class JetParsing extends AbstractJetParsing {
* : typeDescriptor "?"
*/
public void parseTypeRef() {
PsiBuilder.Marker typeRefMarker = parseTypeRefContents();
typeRefMarker.done(TYPE_REFERENCE);
}
private PsiBuilder.Marker parseTypeRefContents() {
// Disabling token merge is required for cases like
// Int?.(Foo) -> Bar
// we don't support this case now
// myBuilder.disableJoiningComplexTokens();
PsiBuilder.Marker typeRefMarker = mark();
parseAnnotations(false);
if (at(IDENTIFIER) || at(NAMESPACE_KEYWORD)) {
parseUserType();
}
else if (at(FUN_KEYWORD)) {
parseFunctionType();
else if (at(HASH)) {
parseTupleType();
}
else if (at(LPAR)) {
parseTupleType();
PsiBuilder.Marker functionOrParenthesizedType = mark();
// This may be a function parameter list or just a prenthesized type
advance(); // LPAR
parseTypeRefContents().drop(); // parenthesized types, no reference element around it is needed
if (at(RPAR)) {
advance(); // RPAR
if (at(ARROW)) {
// It's a function type with one parameter specified
// (A) -> B
functionOrParenthesizedType.rollbackTo();
parseFunctionType();
}
else {
// It's a parenthesized type
// (A)
functionOrParenthesizedType.drop();
}
}
else {
// This must be a function type
// (A, B) -> C
// or
// (a : A) -> C
functionOrParenthesizedType.rollbackTo();
parseFunctionType();
}
}
else if (at(CAPITALIZED_THIS_KEYWORD)) {
parseSelfType();
@@ -1299,7 +1336,7 @@ public class JetParsing extends AbstractJetParsing {
else {
errorWithRecovery("Type expected",
TokenSet.orSet(TOPLEVEL_OBJECT_FIRST,
TokenSet.create(EQ, COMMA, GT, RBRACKET, DOT, RPAR, RBRACE, LBRACE, SEMICOLON)));
TokenSet.create(EQ, COMMA, GT, RBRACKET, DOT, RPAR, RBRACE, LBRACE, SEMICOLON)));
}
while (at(QUEST)) {
@@ -1310,20 +1347,29 @@ public class JetParsing extends AbstractJetParsing {
typeRefMarker = precede;
}
typeRefMarker.done(TYPE_REFERENCE);
}
/*
* selfType
* : "This"
* ;
*/
private void parseSelfType() {
assert _at(CAPITALIZED_THIS_KEYWORD);
if (at(DOT)) {
// This is a receiver for a function type
// A.(B) -> C
// ^
PsiBuilder.Marker type = mark();
advance(); // CAPITALIZED_THIS_KEYWORD
type.done(SELF_TYPE);
PsiBuilder.Marker precede = typeRefMarker.precede();
typeRefMarker.done(TYPE_REFERENCE);
advance(); // DOT
if (at(LPAR)) {
parseFunctionTypeContents().drop();
}
else {
error("Expecting function type");
}
typeRefMarker = precede.precede();
precede.done(FUNCTION_TYPE);
}
// myBuilder.restoreJoiningComplexTokensState();
return typeRefMarker;
}
/*
@@ -1341,13 +1387,18 @@ public class JetParsing extends AbstractJetParsing {
PsiBuilder.Marker reference = mark();
while (true) {
expect(IDENTIFIER, "Type name expected", TokenSet.orSet(JetExpressionParsing.EXPRESSION_FIRST, JetExpressionParsing.EXPRESSION_FOLLOW));
expect(IDENTIFIER, "Expecting type name", TokenSet.orSet(JetExpressionParsing.EXPRESSION_FIRST, JetExpressionParsing.EXPRESSION_FOLLOW));
reference.done(REFERENCE_EXPRESSION);
parseTypeArgumentList(-1);
if (!at(DOT)) {
break;
}
if (lookahead(1) == LPAR) {
// This may be a receiver for a function type
// Int.(Int) -> Int
break;
}
PsiBuilder.Marker precede = userType.precede();
userType.done(USER_TYPE);
@@ -1360,6 +1411,19 @@ public class JetParsing extends AbstractJetParsing {
userType.done(USER_TYPE);
}
/*
* selfType
* : "This"
* ;
*/
private void parseSelfType() {
assert _at(CAPITALIZED_THIS_KEYWORD);
PsiBuilder.Marker type = mark();
advance(); // CAPITALIZED_THIS_KEYWORD
type.done(SELF_TYPE);
}
/*
* (optionalProjection type){","}
*/
@@ -1410,18 +1474,18 @@ public class JetParsing extends AbstractJetParsing {
/*
* tupleType
* : "(" type{","}? ")"
* : "(" parameter{","} ")" // tuple with named entries, the names do not affect assignment compatibility
* : "#" "(" type{","}? ")"
* : "#" "(" parameter{","} ")" // tuple with named entries, the names do not affect assignment compatibility
* ;
*/
private void parseTupleType() {
// TODO : prohibit (a)
assert _at(LPAR);
assert _at(HASH);
PsiBuilder.Marker tuple = mark();
myBuilder.disableNewlines();
advance(); // LPAR
advance(); // HASH
expect(LPAR, "Expecting a tuple type in the form of '#(...)");
if (!at(RPAR)) {
while (true) {
@@ -1456,32 +1520,38 @@ public class JetParsing extends AbstractJetParsing {
/*
* functionType
* : "fun" (type ".")? "(" (parameter | modifiers type){","} ")" (":" type)? // Unit by default
* : (type ".")? "(" (parameter | modifiers type){","} ")" "->" type?
* ;
*/
private void parseFunctionType() {
assert _at(FUN_KEYWORD);
parseFunctionTypeContents().done(FUNCTION_TYPE);
}
private PsiBuilder.Marker parseFunctionTypeContents() {
// assert _at(LPAR) : tt();
if (!_at(LPAR))
System.out.println(myBuilder.getTokenText());
PsiBuilder.Marker functionType = mark();
advance(); // FUN_KEYWORD
int lastLPar = findLastBefore(TokenSet.create(LPAR), TokenSet.create(COLON), false);
if (lastLPar >= 0 && lastLPar > myBuilder.getCurrentOffset()) {
// TODO : -1 is a hack?
createTruncatedBuilder(lastLPar - 1).parseTypeRef();
advance(); // DOT
}
// advance(); // LPAR
//
// int lastLPar = findLastBefore(TokenSet.create(LPAR), TokenSet.create(COLON), false);
// if (lastLPar >= 0 && lastLPar > myBuilder.getCurrentOffset()) {
// TODO : -1 is a hack?
// createTruncatedBuilder(lastLPar - 1).parseTypeRef();
// advance(); // DOT
// }
parseValueParameterList(true, TokenSet.EMPTY);
if (at(COLON)) {
advance(); // COLON // expect(COLON, "Expecting ':' followed by a return type", TYPE_REF_FIRST);
// if (at(COLON)) {
// advance(); // COLON // expect(COLON, "Expecting ':' followed by a return type", TYPE_REF_FIRST);
parseTypeRef();
}
expect(ARROW, "Expecting '->' to specify return type of a function type", TYPE_REF_FIRST);
parseTypeRef();
// }
functionType.done(FUNCTION_TYPE);
return functionType;//.done(FUNCTION_TYPE);
}
/*
@@ -13,6 +13,7 @@ public interface SemanticWhitespaceAwarePsiBuilder extends PsiBuilder {
void enableNewlines();
void restoreNewlinesState();
void restoreJoiningComplexTokensState();
void enableJoiningComplexTokens();
void disableJoiningComplexTokens();
}
@@ -35,6 +35,11 @@ public class SemanticWhitespaceAwarePsiBuilderAdapter extends PsiBuilderAdapter
myBuilder.restoreNewlinesState();
}
@Override
public void restoreJoiningComplexTokensState() {
myBuilder.restoreJoiningComplexTokensState();
}
@Override
public void enableJoiningComplexTokens() {
myBuilder.enableJoiningComplexTokens();
@@ -16,11 +16,15 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
* @author abreslav
*/
public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter implements SemanticWhitespaceAwarePsiBuilder {
private final TokenSet complexTokens = TokenSet.create(SAFE_ACCESS, ELVIS);
private final Stack<Boolean> joinComplexTokens = new Stack<Boolean>();
private final Stack<Boolean> newlinesEnabled = new Stack<Boolean>();
public SemanticWhitespaceAwarePsiBuilderImpl(final PsiBuilder delegate) {
super(delegate);
newlinesEnabled.push(true);
joinComplexTokens.push(true);
}
@Override
@@ -75,22 +79,28 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp
newlinesEnabled.pop();
}
private final TokenSet complexTokens = TokenSet.create(SAFE_ACCESS, ELVIS);
private boolean joinComplexTokens = true;
private boolean joinComplexTokens() {
return joinComplexTokens.peek();
}
@Override
public void restoreJoiningComplexTokensState() {
joinComplexTokens.pop();
}
@Override
public void enableJoiningComplexTokens() {
joinComplexTokens = true;
joinComplexTokens.push(true);
}
@Override
public void disableJoiningComplexTokens() {
joinComplexTokens = false;
joinComplexTokens.push(false);
}
@Override
public IElementType getTokenType() {
if (!joinComplexTokens) return super.getTokenType();
if (!joinComplexTokens()) return super.getTokenType();
return getJoinedTokenType(super.getTokenType(), 1);
}
@@ -105,7 +115,7 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp
@Override
public void advanceLexer() {
if (!joinComplexTokens) {
if (!joinComplexTokens()) {
super.advanceLexer();
return;
}
@@ -123,7 +133,7 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp
@Override
public String getTokenText() {
if (!joinComplexTokens) return super.getTokenText();
if (!joinComplexTokens()) return super.getTokenText();
IElementType tokenType = getTokenType();
if (complexTokens.contains(tokenType)) {
if (tokenType == ELVIS) return "?:";
@@ -134,7 +144,7 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp
@Override
public IElementType lookAhead(int steps) {
if (!joinComplexTokens) return super.lookAhead(steps);
if (!joinComplexTokens()) return super.lookAhead(steps);
if (complexTokens.contains(getTokenType())) {
return super.lookAhead(steps + 1);
@@ -30,7 +30,7 @@ public class JetFunctionLiteral extends JetFunction {
}
public boolean hasParameterSpecification() {
return findChildByType(JetTokens.DOUBLE_ARROW) != null;
return findChildByType(JetTokens.ARROW) != null;
}
@Override
@@ -51,6 +51,6 @@ public class JetFunctionLiteral extends JetFunction {
@Nullable
public ASTNode getArrowNode() {
return getNode().findChildByType(JetTokens.DOUBLE_ARROW);
return getNode().findChildByType(JetTokens.ARROW);
}
}
@@ -7,6 +7,7 @@ import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeTypes;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.ArrayList;
@@ -17,6 +18,9 @@ import java.util.List;
* @author max
*/
public class JetFunctionType extends JetTypeElement {
public static final JetToken RETURN_TYPE_SEPARATOR = JetTokens.ARROW;
public JetFunctionType(@NotNull ASTNode node) {
super(node);
}
@@ -65,7 +69,7 @@ public class JetFunctionType extends JetTypeElement {
PsiElement child = getFirstChild();
while (child != null) {
IElementType tt = child.getNode().getElementType();
if (tt == JetTokens.LPAR || tt == JetTokens.COLON) break;
if (tt == JetTokens.LPAR || tt == RETURN_TYPE_SEPARATOR) break;
if (child instanceof JetTypeReference) {
return (JetTypeReference) child;
}
@@ -81,7 +85,7 @@ public class JetFunctionType extends JetTypeElement {
PsiElement child = getFirstChild();
while (child != null) {
IElementType tt = child.getNode().getElementType();
if (tt == JetTokens.COLON) {
if (tt == RETURN_TYPE_SEPARATOR) {
colonPassed = true;
}
if (colonPassed && child instanceof JetTypeReference) {
@@ -19,6 +19,7 @@ import java.util.Collections;
import java.util.List;
import static org.jetbrains.jet.lang.diagnostics.Errors.UNRESOLVED_REFERENCE;
import static org.jetbrains.jet.lang.diagnostics.Errors.UNSUPPORTED;
import static org.jetbrains.jet.lang.diagnostics.Errors.WRONG_NUMBER_OF_TYPE_ARGUMENTS;
import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
@@ -173,13 +174,17 @@ public class TypeResolver {
@Override
public void visitJetElement(JetElement element) {
throw new IllegalArgumentException("Unsupported type: " + element);
trace.report(UNSUPPORTED.on(element, "Self-types are not supported yet"));
// throw new IllegalArgumentException("Unsupported type: " + element);
}
});
}
if (result[0] == null) {
return ErrorUtils.createErrorType(typeElement == null ? "No type element" : typeElement.getText());
}
if (nullable) {
return TypeUtils.makeNullable(result[0]);
}
return result[0];
}
@@ -161,8 +161,8 @@ LONG_TEMPLATE_ENTRY_END=\}
// TODO: Decide what to do with """ ... """"
{RAW_STRING_LITERAL} { return JetTokens.RAW_STRING_LITERAL; }
"namespace" { return JetTokens.NAMESPACE_KEYWORD ;}
"continue" { return JetTokens.CONTINUE_KEYWORD ;}
"package" { return JetTokens.NAMESPACE_KEYWORD ;}
"return" { return JetTokens.RETURN_KEYWORD ;}
"object" { return JetTokens.OBJECT_KEYWORD ;}
"while" { return JetTokens.WHILE_KEYWORD ;}
@@ -170,12 +170,14 @@ public interface JetTokens {
TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART, RAW_STRING_LITERAL);
TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, MUL, PLUS,
MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, ARROW, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR,
MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR,
SAFE_ACCESS, ELVIS,
// MAP, FILTER,
QUEST, COLON,
RANGE, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ,
NOT_IN, NOT_IS, HASH, IDENTIFIER, LABEL_IDENTIFIER, ATAT, AT);
NOT_IN, NOT_IS,
// HASH,
IDENTIFIER, LABEL_IDENTIFIER, ATAT, AT);
TokenSet AUGMENTED_ASSIGNMENTS = TokenSet.create(PLUSEQ, MINUSEQ, MULTEQ, PERCEQ, DIVEQ);
}
@@ -1,4 +1,4 @@
/* The following code was generated by JFlex 1.4.3 on 12/15/11 8:19 PM */
/* The following code was generated by JFlex 1.4.3 on 12/25/11 2:36 PM */
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/15/11 8:19 PM from the specification file
* <tt>/Users/abreslav/work/jet-clean/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex</tt>
* on 12/25/11 2:36 PM from the specification file
* <tt>/Users/abreslav/work/jet/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex</tt>
*/
class _JetLexer implements FlexLexer {
/** initial size of the lookahead buffer */
@@ -44,10 +44,10 @@ class _JetLexer implements FlexLexer {
"\1\10\1\67\1\65\1\23\1\72\1\73\1\13\1\62\1\76\1\21"+
"\1\17\1\12\1\14\11\1\1\74\1\75\1\63\1\60\1\64\1\61"+
"\1\11\1\2\1\16\2\2\1\20\1\2\11\4\1\22\3\4\1\54"+
"\3\4\1\15\2\4\1\70\1\24\1\71\1\0\1\4\1\6\1\36"+
"\1\45\1\42\1\56\1\40\1\52\1\4\1\32\1\33\1\46\1\51"+
"\1\50\1\37\1\35\1\43\1\41\1\4\1\44\1\34\1\31\1\26"+
"\1\55\1\47\1\15\1\53\1\4\1\27\1\66\1\30\54\0\1\4"+
"\3\4\1\15\2\4\1\70\1\24\1\71\1\0\1\4\1\6\1\42"+
"\1\46\1\35\1\56\1\40\1\52\1\44\1\32\1\33\1\47\1\43"+
"\1\51\1\4\1\37\1\36\1\41\1\4\1\45\1\34\1\31\1\26"+
"\1\55\1\50\1\15\1\53\1\4\1\27\1\66\1\30\54\0\1\4"+
"\12\0\1\4\4\0\1\4\5\0\27\4\1\0\37\4\1\0\u013f\4"+
"\31\0\162\4\4\0\14\4\16\0\5\4\11\0\1\4\213\0\1\4"+
"\13\0\1\4\1\0\3\4\1\0\1\4\1\0\24\4\1\0\54\4"+
@@ -121,27 +121,27 @@ class _JetLexer implements FlexLexer {
private static final String ZZ_ACTION_PACKED_0 =
"\4\0\1\1\1\2\1\3\1\4\2\1\1\5\1\6"+
"\1\7\1\2\1\10\1\11\1\12\1\13\1\14\1\15"+
"\17\3\1\16\1\17\1\20\1\21\1\22\1\23\2\1"+
"\20\3\1\16\1\17\1\20\1\21\1\22\1\23\2\1"+
"\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+
"\1\34\1\35\1\36\1\35\1\0\1\37\1\40\1\0"+
"\1\40\1\41\1\42\1\0\1\43\1\0\1\44\1\0"+
"\1\45\1\0\1\46\1\47\1\50\1\51\1\52\1\43"+
"\2\2\1\43\1\53\1\54\1\55\1\56\2\12\1\0"+
"\3\3\1\57\1\60\1\61\3\3\1\62\14\3\1\63"+
"\3\3\1\57\1\60\1\61\7\3\1\62\10\3\1\63"+
"\1\0\1\64\1\65\1\66\1\67\1\70\1\71\1\72"+
"\1\73\1\74\1\75\1\76\1\0\1\77\2\100\1\0"+
"\1\40\1\101\1\43\1\3\2\0\1\50\1\102\4\0"+
"\1\103\4\3\1\104\4\3\1\105\10\3\1\106\1\3"+
"\1\107\1\3\1\110\1\111\1\112\1\113\1\114\1\115"+
"\2\0\2\40\1\44\1\45\1\0\2\102\1\43\2\0"+
"\1\116\1\3\1\117\1\3\1\120\1\3\1\121\1\3"+
"\1\122\6\3\1\123\1\3\1\124\1\125\1\76\1\0"+
"\1\126\1\50\2\0\1\127\1\130\1\131\2\3\1\132"+
"\2\3\1\133\1\134\1\135\1\0\1\103\2\3\1\136"+
"\1\137\3\3\1\140\1\141";
"\1\103\4\3\1\104\10\3\1\105\4\3\1\106\1\107"+
"\2\3\1\110\1\111\1\112\1\113\1\114\1\115\2\0"+
"\2\40\1\44\1\45\1\0\2\102\1\43\2\0\1\116"+
"\1\3\1\117\1\3\1\120\4\3\1\121\1\122\4\3"+
"\1\123\1\3\1\124\1\125\1\76\1\0\1\126\1\50"+
"\2\0\1\127\1\130\1\131\1\3\1\132\3\3\1\133"+
"\1\134\1\135\1\0\1\103\1\3\1\136\1\3\1\137"+
"\1\3\1\140\1\141";
private static int [] zzUnpackAction() {
int [] result = new int[225];
int [] result = new int[224];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -170,34 +170,33 @@ class _JetLexer implements FlexLexer {
"\0\u0200\0\u0240\0\u0280\0\u02c0\0\u0300\0\u0340\0\u0380\0\u03c0"+
"\0\u0400\0\u0440\0\u0100\0\u0100\0\u0480\0\u04c0\0\u0500\0\u0540"+
"\0\u0580\0\u05c0\0\u0600\0\u0640\0\u0680\0\u06c0\0\u0700\0\u0740"+
"\0\u0780\0\u07c0\0\u0800\0\u0840\0\u0880\0\u0100\0\u08c0\0\u0900"+
"\0\u0940\0\u0980\0\u09c0\0\u0a00\0\u0100\0\u0100\0\u0100\0\u0100"+
"\0\u0100\0\u0100\0\u0100\0\u0100\0\u0a40\0\u0100\0\u0a80\0\u0ac0"+
"\0\u0100\0\u0b00\0\u0b40\0\u0b80\0\u0100\0\u0100\0\u0bc0\0\u0c00"+
"\0\u0c40\0\u0c80\0\u0cc0\0\u0d00\0\u0d40\0\u0100\0\u0d80\0\u0dc0"+
"\0\u0100\0\u0100\0\u0e00\0\u0e40\0\u0e80\0\u0ec0\0\u0100\0\u0100"+
"\0\u0100\0\u0100\0\u0100\0\u0f00\0\u0f40\0\u0f80\0\u0fc0\0\u1000"+
"\0\u0180\0\u0180\0\u0180\0\u1040\0\u1080\0\u10c0\0\u1100\0\u1140"+
"\0\u0780\0\u07c0\0\u0800\0\u0840\0\u0880\0\u08c0\0\u0100\0\u0900"+
"\0\u0940\0\u0980\0\u09c0\0\u0a00\0\u0a40\0\u0100\0\u0100\0\u0100"+
"\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u0a80\0\u0100\0\u0ac0"+
"\0\u0b00\0\u0100\0\u0b40\0\u0b80\0\u0bc0\0\u0100\0\u0100\0\u0c00"+
"\0\u0c40\0\u0c80\0\u0cc0\0\u0d00\0\u0d40\0\u0d80\0\u0100\0\u0dc0"+
"\0\u0e00\0\u0100\0\u0100\0\u0e40\0\u0e80\0\u0ec0\0\u0f00\0\u0100"+
"\0\u0100\0\u0100\0\u0100\0\u0100\0\u0f40\0\u0f80\0\u0fc0\0\u1000"+
"\0\u1040\0\u0180\0\u0180\0\u0180\0\u1080\0\u10c0\0\u1100\0\u1140"+
"\0\u1180\0\u11c0\0\u1200\0\u1240\0\u1280\0\u12c0\0\u1300\0\u1340"+
"\0\u1380\0\u13c0\0\u1400\0\u0180\0\u1440\0\u1480\0\u14c0\0\u0100"+
"\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u1500"+
"\0\u1540\0\u0100\0\u0100\0\u1580\0\u15c0\0\u1600\0\u0100\0\u1640"+
"\0\u0100\0\u1680\0\u16c0\0\u1700\0\u1740\0\u1780\0\u17c0\0\u1800"+
"\0\u1840\0\u1880\0\u18c0\0\u1900\0\u1940\0\u1980\0\u0180\0\u19c0"+
"\0\u1a00\0\u1a40\0\u1a80\0\u0100\0\u1ac0\0\u1b00\0\u1b40\0\u1b80"+
"\0\u1bc0\0\u1c00\0\u1c40\0\u1c80\0\u0180\0\u1cc0\0\u0180\0\u1d00"+
"\0\u0180\0\u0180\0\u1d40\0\u1d40\0\u0100\0\u0100\0\u1d80\0\u1dc0"+
"\0\u0100\0\u1e00\0\u0100\0\u0100\0\u1e40\0\u1e80\0\u0100\0\u1ec0"+
"\0\u1640\0\u1f00\0\u0180\0\u1f40\0\u0180\0\u1f80\0\u0180\0\u1fc0"+
"\0\u0180\0\u2000\0\u0180\0\u2040\0\u2080\0\u20c0\0\u2100\0\u2140"+
"\0\u2180\0\u0180\0\u21c0\0\u0180\0\u0100\0\u0100\0\u2200\0\u0b00"+
"\0\u0100\0\u2240\0\u2280\0\u0180\0\u0180\0\u0180\0\u22c0\0\u2300"+
"\0\u0180\0\u2340\0\u2380\0\u0180\0\u0180\0\u0180\0\u23c0\0\u0100"+
"\0\u2400\0\u2440\0\u0180\0\u0180\0\u2480\0\u24c0\0\u2500\0\u0180"+
"\0\u0180";
"\0\u1380\0\u13c0\0\u1400\0\u1440\0\u0180\0\u1480\0\u14c0\0\u1500"+
"\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100\0\u0100"+
"\0\u1540\0\u1580\0\u0100\0\u0100\0\u15c0\0\u1600\0\u1640\0\u0100"+
"\0\u1680\0\u0100\0\u16c0\0\u1700\0\u1740\0\u1780\0\u17c0\0\u1800"+
"\0\u1840\0\u1880\0\u18c0\0\u1900\0\u1940\0\u1980\0\u19c0\0\u0180"+
"\0\u1a00\0\u1a40\0\u1a80\0\u1ac0\0\u1b00\0\u1b40\0\u1b80\0\u1bc0"+
"\0\u0100\0\u1c00\0\u1c40\0\u1c80\0\u1cc0\0\u0180\0\u0180\0\u1d00"+
"\0\u1d40\0\u0180\0\u0180\0\u1d80\0\u1d80\0\u0100\0\u0100\0\u1dc0"+
"\0\u1e00\0\u0100\0\u1e40\0\u0100\0\u0100\0\u1e80\0\u1ec0\0\u0100"+
"\0\u1f00\0\u1680\0\u1f40\0\u0180\0\u1f80\0\u0180\0\u1fc0\0\u0180"+
"\0\u2000\0\u2040\0\u2080\0\u20c0\0\u0180\0\u0180\0\u2100\0\u2140"+
"\0\u2180\0\u21c0\0\u0180\0\u2200\0\u0180\0\u0100\0\u0100\0\u2240"+
"\0\u0b40\0\u0100\0\u2280\0\u22c0\0\u0180\0\u0180\0\u0180\0\u2300"+
"\0\u0180\0\u2340\0\u2380\0\u23c0\0\u0180\0\u0180\0\u0180\0\u2400"+
"\0\u0100\0\u2440\0\u0180\0\u2480\0\u0180\0\u24c0\0\u0180\0\u0180";
private static int [] zzUnpackRowMap() {
int [] result = new int[225];
int [] result = new int[224];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -223,241 +222,239 @@ class _JetLexer implements FlexLexer {
"\1\5\1\6\1\7\1\10\1\7\1\5\1\11\1\10"+
"\1\12\1\13\1\14\1\15\1\16\2\7\1\17\1\7"+
"\1\20\1\7\1\21\1\5\1\22\1\7\1\23\1\24"+
"\1\25\1\7\1\26\1\27\1\30\1\31\1\7\1\32"+
"\1\7\1\33\1\34\1\35\1\36\1\7\1\37\2\7"+
"\1\40\1\7\1\41\1\42\1\43\1\44\1\45\1\46"+
"\1\47\1\50\1\51\1\52\1\53\1\54\1\55\1\56"+
"\1\57\1\60\1\61\1\62\1\63\1\64\7\65\1\66"+
"\1\67\13\65\1\70\1\71\52\65\2\0\1\72\1\0"+
"\1\72\1\0\1\73\6\0\2\72\1\0\1\72\1\0"+
"\1\72\3\0\1\72\2\0\1\74\25\72\21\0\1\5"+
"\1\25\1\7\1\26\1\27\1\30\1\31\1\32\1\33"+
"\1\34\1\35\2\7\1\36\1\37\1\7\1\40\1\7"+
"\1\41\1\7\1\42\1\43\1\44\1\45\1\46\1\47"+
"\1\50\1\51\1\52\1\53\1\54\1\55\1\56\1\57"+
"\1\60\1\61\1\62\1\63\1\64\1\65\7\66\1\67"+
"\1\70\13\66\1\71\1\72\52\66\2\0\1\73\1\0"+
"\1\73\1\0\1\74\6\0\2\73\1\0\1\73\1\0"+
"\1\73\3\0\1\73\2\0\1\75\25\73\21\0\1\5"+
"\1\6\1\7\1\10\1\7\1\5\1\11\1\10\1\12"+
"\1\13\1\14\1\15\1\16\2\7\1\17\1\7\1\20"+
"\1\7\1\21\1\5\1\22\1\7\1\75\1\76\1\25"+
"\1\7\1\26\1\27\1\30\1\31\1\7\1\32\1\7"+
"\1\33\1\34\1\35\1\36\1\7\1\37\2\7\1\40"+
"\1\7\1\41\1\42\1\43\1\44\1\45\1\46\1\47"+
"\1\50\1\51\1\52\1\53\1\54\1\55\1\56\1\57"+
"\1\60\1\61\1\62\1\63\1\64\101\0\1\6\12\0"+
"\1\6\2\0\1\77\1\100\17\0\1\100\40\0\2\7"+
"\1\7\1\21\1\5\1\22\1\7\1\76\1\77\1\25"+
"\1\7\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+
"\1\35\2\7\1\36\1\37\1\7\1\40\1\7\1\41"+
"\1\7\1\42\1\43\1\44\1\45\1\46\1\47\1\50"+
"\1\51\1\52\1\53\1\54\1\55\1\56\1\57\1\60"+
"\1\61\1\62\1\63\1\64\1\65\101\0\1\6\12\0"+
"\1\6\2\0\1\100\1\101\17\0\1\101\40\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\26\7\24\0\1\10\3\0\1\10"+
"\70\0\6\101\2\0\70\101\2\0\1\102\1\0\1\102"+
"\1\0\1\103\6\0\2\102\1\0\1\102\1\0\1\102"+
"\3\0\1\102\2\0\26\102\23\0\1\104\1\0\1\104"+
"\1\0\1\105\2\0\1\106\3\0\2\104\1\0\1\104"+
"\1\0\1\104\3\0\1\104\2\0\26\104\33\0\1\107"+
"\1\110\44\0\1\111\77\0\1\112\20\0\1\113\12\0"+
"\1\113\1\114\1\115\1\77\1\100\17\0\1\100\4\0"+
"\1\115\33\0\1\116\12\0\1\116\2\0\1\117\101\0"+
"\1\120\36\0\1\121\3\0\1\122\13\0\7\21\1\0"+
"\13\21\1\123\1\124\53\21\25\0\1\125\53\0\2\7"+
"\70\0\6\102\2\0\70\102\2\0\1\103\1\0\1\103"+
"\1\0\1\104\6\0\2\103\1\0\1\103\1\0\1\103"+
"\3\0\1\103\2\0\26\103\23\0\1\105\1\0\1\105"+
"\1\0\1\106\2\0\1\107\3\0\2\105\1\0\1\105"+
"\1\0\1\105\3\0\1\105\2\0\26\105\33\0\1\110"+
"\1\111\44\0\1\112\77\0\1\113\20\0\1\114\12\0"+
"\1\114\1\115\1\116\1\100\1\101\17\0\1\101\5\0"+
"\1\116\32\0\1\117\12\0\1\117\2\0\1\120\101\0"+
"\1\121\36\0\1\122\3\0\1\123\13\0\7\21\1\0"+
"\13\21\1\124\1\125\53\21\25\0\1\126\53\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\1\7\1\126\11\7\1\127\6\7"+
"\1\130\3\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\3\0\1\7\2\0\1\7\1\127\12\7\1\130\5\7"+
"\1\131\3\7\22\0\2\7\1\0\2\7\6\0\3\7"+
"\1\0\1\7\1\0\1\7\3\0\1\7\2\0\3\7"+
"\1\131\1\132\14\7\1\133\4\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\134\2\0\26\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\135\2\0"+
"\5\7\1\136\20\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\3\7\1\137\22\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\17\7\1\140\6\7\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\12\7\1\141\4\7\1\142\6\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\14\7\1\143\11\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\7\7\1\144\16\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\13\7\1\145\12\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\1\7\1\146\24\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\147\2\0\5\7\1\150\4\7\1\151\13\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\1\7\1\152\24\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\5\7\1\153\20\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\12\7\1\154\13\7\54\0"+
"\1\155\24\0\1\156\77\0\1\157\3\0\1\160\73\0"+
"\1\161\1\0\1\162\75\0\1\163\77\0\1\164\104\0"+
"\1\165\100\0\1\166\71\0\1\167\17\0\7\65\2\0"+
"\13\65\2\0\52\65\2\0\1\170\1\0\1\170\1\0"+
"\1\171\6\0\2\170\1\0\1\170\1\0\1\170\3\0"+
"\1\170\1\172\1\0\26\170\21\0\7\173\1\0\16\173"+
"\1\174\51\173\1\0\2\72\1\0\2\72\6\0\3\72"+
"\1\0\1\72\1\0\1\72\3\0\1\72\2\0\26\72"+
"\21\0\6\175\2\0\70\175\1\0\2\72\1\0\2\72"+
"\6\0\3\72\1\0\1\72\1\0\1\72\3\0\1\72"+
"\2\0\1\72\1\176\24\72\22\0\1\116\12\0\1\116"+
"\2\0\1\177\61\0\1\200\12\0\1\200\4\0\1\200"+
"\40\0\1\200\15\0\6\101\1\201\1\0\70\101\1\0"+
"\2\102\1\0\2\102\6\0\3\102\1\0\1\102\1\0"+
"\1\102\3\0\1\102\2\0\26\102\21\0\6\202\2\0"+
"\70\202\1\0\2\104\1\0\2\104\6\0\3\104\1\0"+
"\1\104\1\0\1\104\3\0\1\104\2\0\26\104\21\0"+
"\6\203\2\0\70\203\7\107\1\0\70\107\13\204\1\205"+
"\64\204\1\0\1\113\12\0\1\113\2\0\1\206\1\100"+
"\17\0\1\100\40\0\2\114\11\0\1\114\1\0\1\114"+
"\1\207\1\114\1\0\1\210\13\0\1\114\1\0\1\114"+
"\1\210\1\114\2\0\1\114\4\0\1\114\3\0\1\114"+
"\22\0\1\115\12\0\1\115\2\0\1\211\61\0\1\116"+
"\12\0\1\116\3\0\1\100\17\0\1\100\37\0\7\21"+
"\1\0\70\21\25\0\1\212\53\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\2\7\1\213\10\7\1\214\12\7\22\0\2\7"+
"\1\132\2\7\1\133\12\7\1\134\4\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\215\2\0\5\7\1\216\14\7\1\217\3\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\10\7\1\220\15\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\10\7\1\221\15\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\17\7\1\222\6\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\6\7\1\223\17\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\26\7\2\0\1\224"+
"\17\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\3\7\1\225\22\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\4\7\1\226\21\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\5\7\1\227\20\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\15\7\1\230\10\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\1\231\25\7\22\0"+
"\3\0\1\135\2\0\26\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\5\7\1\136\12\7\1\137\5\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\15\7\1\140\10\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\141\2\0\26\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\20\7\1\142\5\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\11\7\1\143\14\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\3\7\1\144\22\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\7\7\1\145\16\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\14\7\1\146\11\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\1\7\1\147\24\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\150"+
"\2\0\5\7\1\151\3\7\1\152\14\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\1\7\1\153\24\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\11\7\1\154\14\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\5\7\1\155\20\7\54\0\1\156"+
"\24\0\1\157\77\0\1\160\3\0\1\161\73\0\1\162"+
"\1\0\1\163\75\0\1\164\77\0\1\165\104\0\1\166"+
"\100\0\1\167\71\0\1\170\17\0\7\66\2\0\13\66"+
"\2\0\52\66\2\0\1\171\1\0\1\171\1\0\1\172"+
"\6\0\2\171\1\0\1\171\1\0\1\171\3\0\1\171"+
"\1\173\1\0\26\171\21\0\7\174\1\0\16\174\1\175"+
"\51\174\1\0\2\73\1\0\2\73\6\0\3\73\1\0"+
"\1\73\1\0\1\73\3\0\1\73\2\0\26\73\21\0"+
"\6\176\2\0\70\176\1\0\2\73\1\0\2\73\6\0"+
"\3\73\1\0\1\73\1\0\1\73\3\0\1\73\2\0"+
"\1\73\1\177\24\73\22\0\1\117\12\0\1\117\2\0"+
"\1\200\61\0\1\201\12\0\1\201\4\0\1\201\40\0"+
"\1\201\15\0\6\102\1\202\1\0\70\102\1\0\2\103"+
"\1\0\2\103\6\0\3\103\1\0\1\103\1\0\1\103"+
"\3\0\1\103\2\0\26\103\21\0\6\203\2\0\70\203"+
"\1\0\2\105\1\0\2\105\6\0\3\105\1\0\1\105"+
"\1\0\1\105\3\0\1\105\2\0\26\105\21\0\6\204"+
"\2\0\70\204\7\110\1\0\70\110\13\205\1\206\64\205"+
"\1\0\1\114\12\0\1\114\2\0\1\207\1\101\17\0"+
"\1\101\40\0\2\115\11\0\1\115\1\0\1\115\1\210"+
"\1\115\1\0\1\211\12\0\1\115\2\0\1\115\1\211"+
"\1\115\3\0\1\115\3\0\1\115\3\0\1\115\22\0"+
"\1\116\12\0\1\116\2\0\1\212\61\0\1\117\12\0"+
"\1\117\3\0\1\101\17\0\1\101\37\0\7\21\1\0"+
"\70\21\25\0\1\213\53\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\2\7\1\214\11\7\1\215\11\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\216\2\0\11\7\1\217\10\7\1\220\3\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\7\7\1\232\16\7\22\0"+
"\1\7\3\0\1\7\2\0\10\7\1\221\15\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\2\7\1\233\4\7\1\234"+
"\16\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\4\7\1\235"+
"\21\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\17\7\1\236"+
"\6\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\13\7\1\237"+
"\12\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\2\7\1\240"+
"\23\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\13\7\1\241"+
"\3\7\1\242\6\7\55\0\1\243\1\244\122\0\1\245"+
"\77\0\1\246\20\0\2\170\1\0\2\170\6\0\3\170"+
"\1\0\1\170\1\0\1\170\3\0\1\170\2\0\26\170"+
"\21\0\6\247\2\0\70\247\1\0\2\250\11\0\1\250"+
"\1\0\1\250\1\0\1\250\15\0\1\250\1\0\1\250"+
"\1\0\1\250\2\0\1\250\4\0\1\250\3\0\1\250"+
"\21\0\6\175\1\251\1\0\70\175\1\0\2\72\1\0"+
"\2\72\6\0\3\72\1\0\1\72\1\0\1\72\3\0"+
"\1\72\2\0\2\72\1\252\23\72\22\0\1\200\12\0"+
"\1\200\63\0\6\202\1\253\1\0\70\202\6\203\1\254"+
"\1\0\70\203\13\204\1\255\64\204\12\256\1\257\1\205"+
"\64\256\1\0\1\116\12\0\1\116\64\0\2\260\11\0"+
"\1\260\1\0\1\260\1\177\1\260\15\0\1\260\1\0"+
"\1\260\1\0\1\260\2\0\1\260\4\0\1\260\3\0"+
"\1\260\22\0\1\200\12\0\1\200\4\0\1\261\40\0"+
"\1\261\34\0\1\177\60\0\25\212\1\262\52\212\1\0"+
"\1\7\3\0\1\7\2\0\10\7\1\222\15\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\3\7\1\263\22\7\22\0"+
"\1\7\3\0\1\7\2\0\6\7\1\223\17\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\12\7\1\264\13\7\22\0"+
"\1\7\3\0\1\7\2\0\11\7\1\224\14\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\7\7\1\265\16\7\22\0"+
"\1\7\3\0\1\7\2\0\16\7\1\225\7\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\2\7\1\266\23\7\22\0"+
"\1\7\3\0\1\7\2\0\20\7\1\226\5\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\7\7\1\267\16\7\22\0"+
"\1\7\3\0\1\7\2\0\3\7\1\227\22\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\4\7\1\230\21\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\26\7\2\0\1\231\17\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\1\232\25\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\7\7\1\233\16\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\2\7\1\234\4\7\1\235\16\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\6\7\1\236\17\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\14\7\1\237\11\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\20\7\1\240\5\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\2\7\1\241\23\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\14\7\1\242\3\7"+
"\1\243\5\7\55\0\1\244\2\0\1\245\120\0\1\246"+
"\77\0\1\247\20\0\2\171\1\0\2\171\6\0\3\171"+
"\1\0\1\171\1\0\1\171\3\0\1\171\2\0\26\171"+
"\21\0\6\250\2\0\70\250\1\0\2\251\11\0\1\251"+
"\1\0\1\251\1\0\1\251\14\0\1\251\2\0\1\251"+
"\1\0\1\251\3\0\1\251\3\0\1\251\3\0\1\251"+
"\21\0\6\176\1\252\1\0\70\176\1\0\2\73\1\0"+
"\2\73\6\0\3\73\1\0\1\73\1\0\1\73\3\0"+
"\1\73\2\0\2\73\1\253\23\73\22\0\1\201\12\0"+
"\1\201\63\0\6\203\1\254\1\0\70\203\6\204\1\255"+
"\1\0\70\204\13\205\1\256\64\205\12\257\1\260\1\206"+
"\64\257\1\0\1\117\12\0\1\117\64\0\2\261\11\0"+
"\1\261\1\0\1\261\1\200\1\261\14\0\1\261\2\0"+
"\1\261\1\0\1\261\3\0\1\261\3\0\1\261\3\0"+
"\1\261\22\0\1\201\12\0\1\201\4\0\1\262\40\0"+
"\1\262\34\0\1\200\60\0\25\213\1\263\52\213\1\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\3\7\1\264\22\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\5\7\1\265\20\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\7\7\1\266\16\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\2\7\1\267\23\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\7\7\1\270\16\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\17\7\1\271\6\7\22\0"+
"\1\7\3\0\1\7\2\0\7\7\1\271\16\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\7\7\1\272\16\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\7\7\1\273\16\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\1\274\25\7\22\0\2\7"+
"\1\7\3\0\1\7\2\0\1\272\25\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\3\7\1\275\22\7\22\0\2\7"+
"\3\0\1\7\2\0\3\7\1\273\22\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\7\7\1\274\16\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\20\7\1\275\5\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\7\2\0\7\7\1\276\16\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\277\2\0\26\7\22\0\2\7\1\0\2\7"+
"\3\0\1\7\2\0\12\7\1\277\13\7\22\0\2\7"+
"\1\0\2\7\6\0\3\7\1\0\1\7\1\0\1\7"+
"\3\0\1\300\2\0\26\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\5\7\1\300\20\7\22\0\2\7\1\0\2\7"+
"\2\0\11\7\1\301\14\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\17\7\1\301\6\7\22\0\2\7\1\0\2\7"+
"\2\0\20\7\1\302\5\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\4\7\1\302\21\7\22\0\2\7\1\0\2\7"+
"\2\0\6\7\1\303\17\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\3\7\1\303\22\7\22\0\2\7\1\0\2\7"+
"\2\0\3\7\1\304\22\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\3\7\1\304\22\7\22\0\2\305\1\0\2\305"+
"\6\0\3\305\1\0\1\305\1\0\1\305\3\0\1\305"+
"\2\0\26\305\21\0\6\247\1\306\1\0\70\247\1\0"+
"\2\307\11\0\1\307\1\0\1\307\1\0\1\307\15\0"+
"\1\307\1\0\1\307\1\0\1\307\2\0\1\307\4\0"+
"\1\307\3\0\1\307\22\0\2\72\1\0\2\72\6\0"+
"\3\72\1\0\1\72\1\0\1\72\3\0\1\72\2\0"+
"\3\72\1\310\22\72\21\0\12\204\1\311\1\255\64\204"+
"\13\256\1\312\64\256\1\0\2\260\11\0\1\260\1\0"+
"\1\260\1\0\1\260\1\0\1\210\13\0\1\260\1\0"+
"\1\260\1\210\1\260\2\0\1\260\4\0\1\260\3\0"+
"\1\260\21\0\25\212\1\313\52\212\1\0\2\7\1\0"+
"\2\0\3\7\1\305\22\7\22\0\2\306\1\0\2\306"+
"\6\0\3\306\1\0\1\306\1\0\1\306\3\0\1\306"+
"\2\0\26\306\21\0\6\250\1\307\1\0\70\250\1\0"+
"\2\310\11\0\1\310\1\0\1\310\1\0\1\310\14\0"+
"\1\310\2\0\1\310\1\0\1\310\3\0\1\310\3\0"+
"\1\310\3\0\1\310\22\0\2\73\1\0\2\73\6\0"+
"\3\73\1\0\1\73\1\0\1\73\3\0\1\73\2\0"+
"\3\73\1\311\22\73\21\0\12\205\1\312\1\256\64\205"+
"\13\257\1\313\64\257\1\0\2\261\11\0\1\261\1\0"+
"\1\261\1\0\1\261\1\0\1\211\12\0\1\261\2\0"+
"\1\261\1\211\1\261\3\0\1\261\3\0\1\261\3\0"+
"\1\261\21\0\25\213\1\314\52\213\1\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\16\7\1\314\7\7\22\0\2\7\1\0"+
"\1\7\2\0\17\7\1\315\6\7\22\0\2\7\1\0"+
"\2\7\6\0\3\7\1\0\1\7\1\0\1\7\3\0"+
"\1\7\2\0\1\315\25\7\22\0\2\7\1\0\2\7"+
"\1\7\2\0\1\316\25\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\13\7\1\316\12\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\3\7\1\317\22\7\22\0\2\7\1\0\2\7"+
"\2\0\14\7\1\317\11\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\2\7\1\320\23\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\3\7\1\321\22\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\11\7\1\322\14\7\22\0\2\7\1\0\2\7"+
"\2\0\4\7\1\322\21\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\13\7\1\323\12\7\22\0\2\7\1\0\2\7"+
"\2\0\11\7\1\323\14\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\20\7\1\324\5\7\22\0\2\7\1\0\2\7"+
"\2\0\14\7\1\324\11\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\7\7\1\325\16\7\22\0\2\7\1\0\2\7"+
"\2\0\12\7\1\325\13\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\7\7\1\326\16\7\22\0\2\327\11\0\1\327"+
"\1\0\1\327\1\0\1\327\15\0\1\327\1\0\1\327"+
"\1\0\1\327\2\0\1\327\4\0\1\327\3\0\1\327"+
"\21\0\12\256\1\257\1\312\64\256\25\212\1\330\52\212"+
"\2\0\7\7\1\326\16\7\22\0\2\7\1\0\2\7"+
"\6\0\3\7\1\0\1\7\1\0\1\7\3\0\1\7"+
"\2\0\7\7\1\327\16\7\22\0\2\330\11\0\1\330"+
"\1\0\1\330\1\0\1\330\14\0\1\330\2\0\1\330"+
"\1\0\1\330\3\0\1\330\3\0\1\330\3\0\1\330"+
"\21\0\12\257\1\260\1\313\64\257\25\213\1\331\52\213"+
"\1\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\10\7\1\331\15\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\4\7\1\332\21\7"+
"\1\0\1\7\3\0\1\7\2\0\6\7\1\332\17\7"+
"\22\0\2\7\1\0\2\7\6\0\3\7\1\0\1\7"+
"\1\0\1\7\3\0\1\7\2\0\1\333\25\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\4\7\1\334\21\7\22\0"+
"\2\173\11\0\1\173\1\0\1\173\1\0\1\173\15\0"+
"\1\173\1\0\1\173\1\0\1\173\2\0\1\173\4\0"+
"\1\173\3\0\1\173\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\7\2\0"+
"\5\7\1\335\20\7\22\0\2\7\1\0\2\7\6\0"+
"\1\7\3\0\1\7\2\0\13\7\1\334\12\7\22\0"+
"\2\7\1\0\2\7\6\0\3\7\1\0\1\7\1\0"+
"\1\7\3\0\1\7\2\0\6\7\1\335\17\7\22\0"+
"\2\174\11\0\1\174\1\0\1\174\1\0\1\174\14\0"+
"\1\174\2\0\1\174\1\0\1\174\3\0\1\174\3\0"+
"\1\174\3\0\1\174\22\0\2\7\1\0\2\7\6\0"+
"\3\7\1\0\1\7\1\0\1\7\3\0\1\336\2\0"+
"\26\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\11\7\1\337"+
"\14\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\7\7\1\340"+
"\1\7\1\0\1\7\3\0\1\7\2\0\7\7\1\337"+
"\16\7\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+
"\1\7\1\0\1\7\3\0\1\7\2\0\7\7\1\341"+
"\1\7\1\0\1\7\3\0\1\7\2\0\7\7\1\340"+
"\16\7\21\0";
private static int [] zzUnpackTrans() {
int [] result = new int[9536];
int [] result = new int[9472];
int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
@@ -498,18 +495,18 @@ class _JetLexer implements FlexLexer {
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\4\0\1\11\15\1\2\11\21\1\1\11\6\1\10\11"+
"\4\0\1\11\15\1\2\11\22\1\1\11\6\1\10\11"+
"\1\1\1\11\1\1\1\0\1\11\1\1\1\0\1\1"+
"\2\11\1\0\1\1\1\0\1\1\1\0\1\1\1\0"+
"\1\11\2\1\2\11\4\1\5\11\1\1\1\0\27\1"+
"\1\0\2\1\10\11\1\1\1\0\2\11\1\1\1\0"+
"\1\1\1\11\1\1\1\11\2\0\2\1\4\0\12\1"+
"\1\11\20\1\2\11\2\0\1\11\1\1\2\11\1\0"+
"\1\1\1\11\1\1\1\11\2\0\2\1\4\0\16\1"+
"\1\11\14\1\2\11\2\0\1\11\1\1\2\11\1\0"+
"\1\1\1\11\1\1\2\0\22\1\2\11\1\0\1\1"+
"\1\11\2\0\13\1\1\0\1\11\11\1";
"\1\11\2\0\13\1\1\0\1\11\7\1";
private static int [] zzUnpackAttribute() {
int [] result = new int[225];
int [] result = new int[224];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -1025,7 +1022,7 @@ class _JetLexer implements FlexLexer {
{ return JetTokens.MINUSMINUS;
}
case 142: break;
case 96:
case 97:
{ return JetTokens.CONTINUE_KEYWORD ;
}
case 143: break;
@@ -1077,7 +1074,7 @@ class _JetLexer implements FlexLexer {
{ return TokenType.BAD_CHARACTER;
}
case 155: break;
case 97:
case 96:
{ return JetTokens.NAMESPACE_KEYWORD ;
}
case 156: break;