diff --git a/idea/src/org/jetbrains/jet/JetNodeTypes.java b/idea/src/org/jetbrains/jet/JetNodeTypes.java
index e467c62e6ba..9452461955e 100644
--- a/idea/src/org/jetbrains/jet/JetNodeTypes.java
+++ b/idea/src/org/jetbrains/jet/JetNodeTypes.java
@@ -64,6 +64,7 @@ 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");
diff --git a/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java
index dd2b01dd57b..2278761aefd 100644
--- a/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java
+++ b/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java
@@ -153,6 +153,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
if (at(token)) advance(); // token
}
+ // TODO: Migrate to predicates
protected void skipUntil(TokenSet tokenSet) {
boolean stopAtEolOrSemi = tokenSet.contains(EOL_OR_SEMICOLON);
while (!eof() && !tokenSet.contains(tt()) && !(stopAtEolOrSemi && at(EOL_OR_SEMICOLON))) {
@@ -183,10 +184,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
while (!eof()) {
if (pattern.processToken(
myBuilder.getCurrentOffset(),
- openAngleBrackets == 0
- && openBrackets == 0
- && openBraces == 0
- && openParentheses == 0)) {
+ pattern.isTopLevel(openAngleBrackets, openBrackets, openBraces, openParentheses))) {
break;
}
if (at(LPAR)) {
@@ -224,6 +222,8 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
* top-level occurrence of a token from the stopSet
*
* Returns -1 if no occurrence is found
+ *
+ * TODO: Migrate to predictaes
*/
protected int findLastBefore(TokenSet lookFor, TokenSet stopAt, boolean dontStopRightAfterOccurrence) {
return matchTokenStreamPredicate(new LastBefore(new AtSet(lookFor), new AtSet(stopAt), dontStopRightAfterOccurrence));
diff --git a/idea/src/org/jetbrains/jet/lang/parsing/AbstractTokenStreamPattern.java b/idea/src/org/jetbrains/jet/lang/parsing/AbstractTokenStreamPattern.java
index 25f039f8f62..03c7fb86010 100644
--- a/idea/src/org/jetbrains/jet/lang/parsing/AbstractTokenStreamPattern.java
+++ b/idea/src/org/jetbrains/jet/lang/parsing/AbstractTokenStreamPattern.java
@@ -5,11 +5,16 @@ package org.jetbrains.jet.lang.parsing;
*/
public abstract class AbstractTokenStreamPattern implements TokenStreamPattern {
- protected int lastOccurrence = -1;
+ protected int lastOccurrence = -1;
- @Override
- public int result() {
- return lastOccurrence;
- }
+ @Override
+ public int result() {
+ return lastOccurrence;
}
+ @Override
+ public boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses) {
+ return openBraces == 0 && openBrackets == 0 && openParentheses == 0 && openAngleBrackets == 0;
+ }
+}
+
diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java
index 4fba0256880..f1765f0e9f7 100644
--- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java
+++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java
@@ -21,10 +21,10 @@ public class JetExpressionParsing extends AbstractJetParsing {
}
@SuppressWarnings({"UnusedDeclaration"})
- private enum Priority {
+ private enum Precedence {
MEMBER_ACCESS(DOT, HASH, SAFE_ACCESS) {
@Override
- public void parseHigherPriority(JetExpressionParsing parsing) {
+ public void parseHigherPrecedence(JetExpressionParsing parsing) {
parsing.parseAtomicExpression();
}
},
@@ -34,14 +34,14 @@ public class JetExpressionParsing extends AbstractJetParsing {
PREFIX(MINUS, PLUS, MINUSMINUS, PLUSPLUS, EXCL) { // attributes
@Override
- public void parseHigherPriority(JetExpressionParsing parsing) {
+ public void parseHigherPrecedence(JetExpressionParsing parsing) {
throw new IllegalStateException("Don't call this method");
}
},
MULTIPLICATIVE(MUL, DIV, PERC) {
@Override
- public void parseHigherPriority(JetExpressionParsing parsing) {
+ public void parseHigherPrecedence(JetExpressionParsing parsing) {
parsing.parsePrefixExpression();
}
},
@@ -56,26 +56,27 @@ public class JetExpressionParsing extends AbstractJetParsing {
CONJUNCTION(ANDAND),
DISJUNCTION(OROR),
MATCH(MATCH_KEYWORD),
+ // TODO: don't build a binary tree, build a tuple
+ ASSIGNMENT(EQ, PLUSEQ, MINUSEQ, MULTEQ, DIVEQ, PERCEQ),
ARROW(JetTokens.ARROW),
- ASSIGNMENT(EQ, PLUSEQ, MINUSEQ, MULTEQ, DIVEQ, PERCEQ)
;
static {
- Priority[] values = Priority.values();
- for (Priority priority : values) {
- int ordinal = priority.ordinal();
- priority.higher = ordinal > 0 ? values[ordinal - 1] : null;
+ Precedence[] values = Precedence.values();
+ for (Precedence precedence : values) {
+ int ordinal = precedence.ordinal();
+ precedence.higher = ordinal > 0 ? values[ordinal - 1] : null;
}
}
- private Priority higher;
+ private Precedence higher;
private final TokenSet operations;
- Priority(IElementType... operations ) {
+ Precedence(IElementType... operations) {
this.operations = TokenSet.create(operations);
}
- public void parseHigherPriority(JetExpressionParsing parsing) {
+ public void parseHigherPrecedence(JetExpressionParsing parsing) {
assert higher != null;
parsing.parseBinaryExpression(higher);
}
@@ -107,18 +108,23 @@ public class JetExpressionParsing extends AbstractJetParsing {
* ;
*/
public void parseExpression() {
- parseBinaryExpression(Priority.ASSIGNMENT);
+ parseBinaryExpression(Precedence.ASSIGNMENT);
}
- private void parseBinaryExpression(Priority priority) {
-// System.out.println(priority.name() + " at " + tt());
+ /*
+ * expression (operation expression)*
+ *
+ * see the precedence table
+ */
+ private void parseBinaryExpression(Precedence precedence) {
+// System.out.println(precedence.name() + " at " + tt());
PsiBuilder.Marker expression = mark();
- priority.parseHigherPriority(this);
+ precedence.parseHigherPrecedence(this);
- while (!myBuilder.eolInLastWhitespace() && atSet(priority.getOperations())) {
+ while (!myBuilder.eolInLastWhitespace() && atSet(precedence.getOperations())) {
advance(); // operation
- priority.parseHigherPriority(this);
+ precedence.parseHigherPrecedence(this);
expression.done(BINARY_EXPRESSION);
expression = expression.precede();
}
@@ -126,6 +132,9 @@ public class JetExpressionParsing extends AbstractJetParsing {
expression.drop();
}
+ /*
+ * operation? expression
+ */
private void parsePrefixExpression() {
// System.out.println("pre at " + tt());
if (at(LBRACKET)) {
@@ -135,7 +144,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
parsePostfixExpression();
attributes.done(ANNOTATED_EXPRESSION);
}
- } else if (atSet(Priority.PREFIX.getOperations())) {
+ } else if (atSet(Precedence.PREFIX.getOperations())) {
PsiBuilder.Marker expression = mark();
advance(); // operation
parsePostfixExpression();
@@ -145,17 +154,20 @@ public class JetExpressionParsing extends AbstractJetParsing {
}
}
+ /*
+ * expression operation?
+ */
private void parsePostfixExpression() {
// System.out.println("post at " + tt());
PsiBuilder.Marker expression = mark();
- parseBinaryExpression(Priority.MEMBER_ACCESS);
+ parseBinaryExpression(Precedence.MEMBER_ACCESS);
if (myBuilder.eolInLastWhitespace()) {
expression.drop();
} else if (at(LBRACKET)) {
parseArrayAccess();
expression.done(ARRAY_ACCESS_EXPRESSION);
- } else if (atSet(Priority.POSTFIX.getOperations())) {
+ } else if (atSet(Precedence.POSTFIX.getOperations())) {
advance(); // operation
expression.done(POSTFIX_EXPRESSION);
} else if (at(LPAR)) {
@@ -171,7 +183,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
* : tupleLiteral // or parenthesized expression
* : "this" ("<" type ">")?
* : "typeof" "(" expression ")"
- * : "new" constructorInvocation // TODO: Do we need "new"?, see factory methods
+ * : "new" constructorInvocation
* : objectLiteral
* : jump
* : if
@@ -347,7 +359,12 @@ public class JetExpressionParsing extends AbstractJetParsing {
advance(); // LBRACE
- int doubleArrowPos = matchTokenStreamPredicate(new FirstBefore(new At(DOUBLE_ARROW), new At(RBRACE)));
+ 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;
+ }
+ });
if (doubleArrowPos >= 0) {
boolean dontExpectParameters = false;
@@ -460,7 +477,13 @@ public class JetExpressionParsing extends AbstractJetParsing {
public void parseExpressions() {
while (!eof() && !at(RBRACE)) {
parseExpression();
- consumeIf(SEMICOLON);
+ if (at(SEMICOLON)) {
+ advance(); // SEMICOLON
+ } else if (at(RBRACE)) {
+ break;
+ } else if (!myBuilder.eolInLastWhitespace()) {
+ errorUntil("Unexpected tokens (use ';' to separate expressions on the same line", TokenSet.create(EOL_OR_SEMICOLON));
+ }
}
}
diff --git a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java
index 20fcd4361f6..aff01968388 100644
--- a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java
+++ b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java
@@ -37,6 +37,6 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp
@Override
public boolean eolInLastWhitespace() {
- return myEOLInLastWhitespace;
+ return myEOLInLastWhitespace || eof();
}
}
diff --git a/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPattern.java b/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPattern.java
index 9973567b1ec..8035cd652b6 100644
--- a/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPattern.java
+++ b/idea/src/org/jetbrains/jet/lang/parsing/TokenStreamPattern.java
@@ -7,10 +7,8 @@ public interface TokenStreamPattern {
/**
* Called on each token
*
- *
- *
* @param offset
- * @param topLevel indicates if no brackets (of types () [] {} <>) are currently unmatched
+ * @param topLevel see {@link #isTopLevel(int, int, int, int)}
* @return true to stop
*/
boolean processToken(int offset, boolean topLevel);
@@ -19,4 +17,10 @@ public interface TokenStreamPattern {
* @return the position where the predicate has matched, -1 if no match was found
*/
int result();
+
+ /*
+ * Decides if the combination of open bracet counts makes a "top level position"
+ * Straightforward meaning would be: if all counts are zero, then it's a top level
+ */
+ boolean isTopLevel(int openAngleBrackets, int openBrackets, int openBraces, int openParentheses);
}
diff --git a/idea/src/org/jetbrains/jet/lexer/_JetLexer.java b/idea/src/org/jetbrains/jet/lexer/_JetLexer.java
index 093a2cd840c..7d0c5d37b0d 100644
--- a/idea/src/org/jetbrains/jet/lexer/_JetLexer.java
+++ b/idea/src/org/jetbrains/jet/lexer/_JetLexer.java
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.4.3 on 12/29/10 6:25 PM */
+/* The following code was generated by JFlex 1.4.3 on 12/29/10 10:19 PM */
/* It's an automatically generated code. Do not modify it. */
package org.jetbrains.jet.lexer;
@@ -13,7 +13,7 @@ import org.jetbrains.jet.lexer.JetTokens;
/**
* This class is a scanner generated by
* JFlex 1.4.3
- * on 12/29/10 6:25 PM from the specification file
+ * on 12/29/10 10:19 PM from the specification file
* /home/user/work/jet/idea/src/org/jetbrains/jet/lexer/Jet.flex
*/
class _JetLexer implements FlexLexer {
@@ -38,7 +38,7 @@ class _JetLexer implements FlexLexer {
*/
private static final String ZZ_CMAP_PACKED =
"\11\5\1\3\1\10\1\0\1\3\1\0\16\5\4\0\1\3\1\55"+
- "\1\24\1\0\1\4\1\65\1\61\1\22\1\72\1\73\1\7\1\56"+
+ "\1\24\1\76\1\4\1\65\1\61\1\22\1\72\1\73\1\7\1\56"+
"\1\75\1\20\1\16\1\6\1\11\11\1\1\64\1\74\1\57\1\54"+
"\1\60\1\63\1\0\1\2\1\13\1\2\1\15\1\17\1\15\5\4"+
"\1\14\3\4\1\21\7\4\1\12\2\4\1\66\1\23\1\67\1\0"+
@@ -142,23 +142,23 @@ class _JetLexer implements FlexLexer {
"\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\2"+
"\1\7\1\10\1\11\1\12\16\3\1\13\1\14\1\15"+
"\1\16\1\17\2\1\1\20\1\21\1\22\1\23\1\24"+
- "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\3\34"+
- "\1\35\1\36\1\37\1\40\1\0\2\2\1\34\1\41"+
- "\1\42\1\43\1\44\1\45\1\46\2\11\3\12\1\3"+
- "\1\47\13\3\1\50\3\3\1\51\1\52\1\53\6\3"+
- "\1\54\1\55\1\0\1\56\1\57\1\60\1\61\1\62"+
- "\1\63\1\64\1\65\1\66\1\67\1\70\1\34\1\36"+
- "\1\71\1\0\1\33\3\0\1\12\1\72\5\3\1\73"+
- "\3\3\1\74\1\75\3\3\1\76\3\3\1\77\1\3"+
- "\1\100\2\3\1\101\1\102\1\103\1\104\1\105\1\106"+
- "\1\0\2\71\1\0\1\34\2\0\2\3\1\107\6\3"+
- "\1\110\1\111\1\112\1\3\1\113\3\3\1\36\1\0"+
- "\1\34\1\0\3\3\1\114\1\3\1\115\3\3\1\116"+
- "\1\117\1\120\1\121\1\72\3\3\1\122\1\123\1\3"+
- "\1\124\6\3\1\125\2\3\1\126\1\127\1\130";
+ "\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"+
+ "\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\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";
private static int [] zzUnpackAction() {
- int [] result = new int[207];
+ int [] result = new int[208];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -183,35 +183,35 @@ class _JetLexer implements FlexLexer {
private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
private static final String ZZ_ROWMAP_PACKED_0 =
- "\0\0\0\76\0\174\0\272\0\370\0\u0136\0\u0174\0\u01b2"+
- "\0\u01f0\0\u022e\0\u026c\0\u02aa\0\u02e8\0\u0326\0\u0364\0\u03a2"+
- "\0\u03e0\0\u041e\0\u045c\0\u049a\0\u04d8\0\u0516\0\u0554\0\u0592"+
- "\0\u05d0\0\u060e\0\u064c\0\u068a\0\u06c8\0\u0706\0\u0744\0\u0782"+
- "\0\u07c0\0\u07fe\0\76\0\u083c\0\76\0\76\0\76\0\76"+
- "\0\76\0\76\0\76\0\76\0\76\0\76\0\u087a\0\u08b8"+
- "\0\u08f6\0\u0934\0\76\0\76\0\u0972\0\u09b0\0\u09ee\0\u0a2c"+
- "\0\76\0\76\0\76\0\76\0\76\0\76\0\76\0\u0a6a"+
- "\0\u0aa8\0\u0ae6\0\u0b24\0\u0b62\0\272\0\u0ba0\0\u0bde\0\u0c1c"+
- "\0\u0c5a\0\u0c98\0\u0cd6\0\u0d14\0\u0d52\0\u0d90\0\u0dce\0\u0e0c"+
- "\0\272\0\u0e4a\0\u0e88\0\u0ec6\0\272\0\272\0\272\0\u0f04"+
- "\0\u0f42\0\u0f80\0\u0fbe\0\u0ffc\0\u103a\0\u1078\0\76\0\u10b6"+
- "\0\u10f4\0\76\0\76\0\76\0\76\0\76\0\76\0\76"+
- "\0\76\0\76\0\76\0\u1132\0\u1170\0\u11ae\0\u11ec\0\u11ec"+
- "\0\u122a\0\u1268\0\u12a6\0\76\0\u12e4\0\u1322\0\u1360\0\u139e"+
- "\0\u13dc\0\u141a\0\272\0\u1458\0\u1496\0\u14d4\0\272\0\272"+
- "\0\u1512\0\u1550\0\u158e\0\272\0\u15cc\0\u160a\0\u1648\0\272"+
- "\0\u1686\0\272\0\u16c4\0\u1702\0\272\0\272\0\76\0\76"+
- "\0\76\0\76\0\u1740\0\u177e\0\76\0\u17bc\0\u17fa\0\u1838"+
- "\0\u1876\0\u18b4\0\u18f2\0\272\0\u1930\0\u196e\0\u19ac\0\u19ea"+
- "\0\u1a28\0\u1a66\0\272\0\272\0\u1aa4\0\u1ae2\0\272\0\u1b20"+
- "\0\u1b5e\0\u1b9c\0\76\0\u1bda\0\u11ec\0\u1c18\0\u1c56\0\u1c94"+
- "\0\u1cd2\0\272\0\u1d10\0\272\0\u1d4e\0\u1d8c\0\u1dca\0\272"+
- "\0\272\0\272\0\272\0\76\0\u1e08\0\u1e46\0\u1e84\0\272"+
- "\0\272\0\u1ec2\0\272\0\u1f00\0\u1f3e\0\u1f7c\0\u1fba\0\u1ff8"+
- "\0\u2036\0\272\0\u2074\0\u20b2\0\272\0\272\0\272";
+ "\0\0\0\77\0\176\0\275\0\374\0\u013b\0\u017a\0\u01b9"+
+ "\0\u01f8\0\u0237\0\u0276\0\u02b5\0\u02f4\0\u0333\0\u0372\0\u03b1"+
+ "\0\u03f0\0\u042f\0\u046e\0\u04ad\0\u04ec\0\u052b\0\u056a\0\u05a9"+
+ "\0\u05e8\0\u0627\0\u0666\0\u06a5\0\u06e4\0\u0723\0\u0762\0\u07a1"+
+ "\0\u07e0\0\u081f\0\77\0\u085e\0\77\0\77\0\77\0\77"+
+ "\0\77\0\77\0\77\0\77\0\77\0\77\0\77\0\u089d"+
+ "\0\u08dc\0\u091b\0\u095a\0\77\0\77\0\u0999\0\u09d8\0\u0a17"+
+ "\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";
private static int [] zzUnpackRowMap() {
- int [] result = new int[207];
+ int [] result = new int[208];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -240,208 +240,208 @@ class _JetLexer implements FlexLexer {
"\1\22\1\23\1\24\1\4\1\25\1\26\2\4\1\27"+
"\1\30\1\4\1\31\3\4\1\32\1\33\1\34\1\35"+
"\1\36\1\37\1\40\1\41\1\42\1\43\1\44\1\45"+
- "\1\46\1\47\1\50\1\51\1\52\1\53\1\54\77\0"+
- "\1\3\7\0\1\3\2\0\1\55\1\56\1\57\1\60"+
- "\5\0\1\56\1\60\15\0\1\56\4\0\1\55\25\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\27\4\25\0\1\5\4\0\1\5\73\0"+
- "\1\61\1\62\44\0\1\63\75\0\1\64\22\0\1\65"+
- "\7\0\1\65\1\66\1\67\1\55\1\56\1\57\1\60"+
- "\5\0\1\56\1\60\10\0\1\66\4\0\1\56\1\67"+
- "\3\0\1\55\25\0\1\70\5\0\1\71\1\0\1\70"+
- "\4\0\1\72\44\0\1\73\32\0\1\74\33\0\1\75"+
- "\3\0\1\76\15\0\10\13\1\0\11\13\1\77\1\100"+
- "\52\13\10\101\1\0\12\101\1\102\1\103\51\101\1\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\1\4\1\104\1\4\1\105\23\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\12\4\1\106\11\4\1\107\2\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\3\4\1\110\20\4\1\111\2\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\15\4\1\112\2\4\1\113\6\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\11\4\1\114\15\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\1\4\1\115\25\4\23\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"+
- "\7\4\1\117\3\4\1\120\11\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\6\4\1\121\20\4\23\0\2\4\1\0\2\4\3\0"+
- "\5\4\1\0\1\4\1\0\1\4\3\0\7\4\1\122"+
- "\6\4\1\123\4\4\1\124\3\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\6\4\1\125\1\4\1\126\6\4\1\127\7\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\3\4\1\130\5\4\1\131\3\4\1\132"+
- "\11\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+
- "\1\4\1\0\1\4\3\0\7\4\1\133\17\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\23\4\1\134\3\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\11\4\1\135\15\4\76\0\1\136\3\0\1\137\56\0"+
- "\1\140\12\0\1\141\75\0\1\142\1\0\1\143\73\0"+
- "\1\144\75\0\1\145\102\0\1\146\76\0\1\147\31\0"+
- "\1\150\45\0\1\151\65\0\1\152\22\0\1\70\7\0"+
- "\1\70\3\0\1\56\1\153\1\60\5\0\1\56\1\60"+
- "\15\0\1\56\32\0\1\154\7\0\1\154\3\0\1\56"+
- "\2\0\1\154\4\0\1\56\16\0\1\56\11\0\1\154"+
- "\17\0\10\61\1\0\65\61\7\155\1\156\66\155\1\0"+
- "\1\65\7\0\1\65\3\0\1\56\1\70\1\60\5\0"+
- "\1\56\1\60\15\0\1\56\31\0\1\157\2\66\5\157"+
- "\1\0\1\66\1\157\1\66\1\160\1\66\1\161\1\66"+
- "\1\157\1\162\3\157\3\66\2\157\1\162\3\157\1\66"+
- "\5\157\2\66\3\157\1\160\24\157\1\0\1\67\7\0"+
- "\1\67\2\0\1\55\1\0\1\163\32\0\1\55\25\0"+
- "\1\70\7\0\1\70\3\0\1\56\1\0\1\60\5\0"+
- "\1\56\1\60\15\0\1\56\31\0\10\13\1\0\65\13"+
- "\10\101\1\0\12\101\1\102\1\164\61\101\1\0\65\101"+
- "\24\0\1\165\52\0\2\4\1\0\2\4\3\0\5\4"+
- "\1\0\1\4\1\0\1\4\3\0\2\4\1\166\24\4"+
- "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+
- "\1\0\1\4\3\0\13\4\1\167\13\4\23\0\2\4"+
+ "\1\46\1\47\1\50\1\51\1\52\1\53\1\54\1\55"+
+ "\100\0\1\3\7\0\1\3\2\0\1\56\1\57\1\60"+
+ "\1\61\5\0\1\57\1\61\15\0\1\57\4\0\1\56"+
+ "\26\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+
+ "\1\0\1\4\3\0\27\4\26\0\1\5\4\0\1\5"+
+ "\74\0\1\62\1\63\44\0\1\64\76\0\1\65\23\0"+
+ "\1\66\7\0\1\66\1\67\1\70\1\56\1\57\1\60"+
+ "\1\61\5\0\1\57\1\61\10\0\1\67\4\0\1\57"+
+ "\1\70\3\0\1\56\26\0\1\71\5\0\1\72\1\0"+
+ "\1\71\4\0\1\73\44\0\1\74\33\0\1\75\33\0"+
+ "\1\76\3\0\1\77\16\0\10\13\1\0\11\13\1\100"+
+ "\1\101\53\13\10\102\1\0\12\102\1\103\1\104\52\102"+
+ "\1\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+
+ "\1\0\1\4\3\0\1\4\1\105\1\4\1\106\23\4"+
+ "\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"+
+ "\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"+
+ "\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\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+
- "\3\0\6\4\1\170\20\4\23\0\2\4\1\0\2\4"+
- "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\10\4"+
- "\1\171\16\4\23\0\2\4\1\0\2\4\3\0\5\4"+
- "\1\0\1\4\1\0\1\4\3\0\11\4\1\172\15\4"+
- "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+
- "\1\0\1\4\3\0\13\4\1\173\13\4\23\0\2\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\21\4\1\174\5\4\23\0\2\4\1\0\2\4"+
+ "\3\0\6\4\1\122\20\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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\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\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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"+
+ "\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\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\175\13\4\23\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\3\4"+
- "\1\177\7\4\23\0\2\4\1\0\2\4\3\0\5\4"+
- "\1\0\1\4\1\0\1\4\3\0\22\4\1\200\4\4"+
- "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+
- "\1\0\1\4\3\0\4\4\1\201\22\4\23\0\2\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\24\4\1\202\2\4\23\0\2\4\1\0\2\4"+
- "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\15\4"+
- "\1\203\1\204\10\4\23\0\2\4\1\0\2\4\3\0"+
- "\5\4\1\0\1\4\1\0\1\4\3\0\5\4\1\205"+
- "\21\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+
- "\1\4\1\0\1\4\3\0\7\4\1\206\4\4\1\207"+
- "\12\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+
- "\1\4\1\0\1\4\3\0\7\4\1\210\17\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\24\4\1\211\2\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\10\4\1\212\16\4\23\0\2\4\1\0\2\4\3\0"+
- "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\213"+
- "\25\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+
- "\1\4\1\0\1\4\3\0\14\4\1\214\12\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\7\4\1\215\14\4\1\216\2\4\76\0"+
- "\1\217\54\0\1\220\1\0\1\221\114\0\1\222\22\0"+
- "\1\154\7\0\1\154\3\0\1\56\7\0\1\56\16\0"+
- "\1\56\31\0\7\155\1\223\66\155\6\224\1\225\1\156"+
- "\66\224\1\0\2\157\6\0\1\157\1\0\1\157\1\0"+
- "\1\157\1\0\1\157\1\0\1\226\3\0\3\157\2\0"+
- "\1\226\3\0\1\157\5\0\2\157\31\0\2\157\6\0"+
- "\1\157\1\0\1\157\1\0\1\157\1\153\1\157\1\0"+
- "\1\226\3\0\3\157\2\0\1\226\3\0\1\157\5\0"+
- "\2\157\31\0\1\227\1\157\6\0\1\227\1\0\1\157"+
- "\1\0\1\157\1\0\1\157\1\230\1\226\3\0\3\157"+
- "\2\0\1\226\3\0\1\157\5\0\2\157\10\0\1\230"+
- "\35\0\1\153\57\0\24\165\1\231\51\165\1\0\2\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\3\4\1\232\23\4\23\0\2\4\1\0\2\4"+
- "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\1\4"+
- "\1\233\25\4\23\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"+
- "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+
- "\1\0\1\4\3\0\13\4\1\235\13\4\23\0\2\4"+
- "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+
- "\3\0\6\4\1\236\20\4\23\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\23\0\2\4\1\0\2\4\3\0\5\4"+
- "\1\0\1\4\1\0\1\4\3\0\2\4\1\240\24\4"+
- "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+
- "\1\0\1\4\3\0\15\4\1\241\11\4\23\0\2\4"+
- "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+
- "\3\0\1\4\1\242\25\4\23\0\2\4\1\0\2\4"+
- "\3\0\5\4\1\0\1\4\1\0\1\4\3\0\24\4"+
- "\1\243\2\4\23\0\2\4\1\0\2\4\3\0\5\4"+
- "\1\0\1\4\1\0\1\4\3\0\1\4\1\244\25\4"+
- "\23\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\25\4\23\0\2\4"+
- "\1\0\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+
- "\3\0\3\4\1\246\23\4\23\0\2\4\1\0\2\4"+
+ "\3\0\11\4\1\310\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\247\20\4\23\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"+
- "\23\0\2\4\1\0\2\4\3\0\5\4\1\0\1\4"+
- "\1\0\1\4\3\0\11\4\1\251\15\4\23\0\2\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"+
+ "\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\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+
- "\3\0\24\4\1\252\2\4\22\0\6\155\1\253\1\223"+
- "\66\155\7\224\1\254\66\224\1\0\1\154\7\0\1\154"+
- "\6\0\1\230\35\0\1\230\20\0\1\227\1\157\6\0"+
- "\1\227\1\0\1\157\1\0\1\255\1\0\1\157\1\0"+
- "\1\226\3\0\1\255\2\157\2\0\1\226\3\0\1\157"+
- "\5\0\1\255\1\157\31\0\1\154\7\0\1\154\64\0"+
- "\24\165\1\256\51\165\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\257"+
- "\22\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+
- "\1\4\1\0\1\4\3\0\10\4\1\260\16\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\14\4\1\261\12\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\6\4\1\262\20\4\23\0\2\4\1\0\2\4\3\0"+
- "\5\4\1\0\1\4\1\0\1\4\3\0\2\4\1\263"+
- "\24\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+
- "\1\4\1\0\1\4\3\0\23\4\1\264\3\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\7\4\1\265\17\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\6\4\1\266\20\4\23\0\2\4\1\0\2\4\3\0"+
- "\5\4\1\0\1\4\1\0\1\4\3\0\3\4\1\267"+
- "\23\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+
- "\1\4\1\0\1\4\3\0\22\4\1\270\4\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\1\4\1\271\25\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\25\4\1\272\1\4\23\0\2\4\1\0\2\4\3\0"+
- "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\273"+
- "\25\4\22\0\6\224\1\225\1\254\66\224\24\165\1\274"+
- "\51\165\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\275\21\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\6\4\1\276\20\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\10\4\1\277\16\4\23\0\2\4\1\0\2\4\3\0"+
- "\5\4\1\0\1\4\1\0\1\4\3\0\13\4\1\300"+
- "\13\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+
- "\1\4\1\0\1\4\3\0\10\4\1\301\16\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\5\4\1\302\21\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\17\4\1\303\7\4\23\0\2\4\1\0\2\4\3\0"+
- "\5\4\1\0\1\4\1\0\1\4\3\0\3\4\1\304"+
- "\23\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+
- "\1\4\1\0\1\4\3\0\14\4\1\305\12\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\15\4\1\306\11\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\11\4\1\307\15\4\23\0\2\4\1\0\2\4\3\0"+
- "\5\4\1\0\1\4\1\0\1\4\3\0\6\4\1\310"+
- "\20\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+
- "\1\4\1\0\1\4\3\0\3\4\1\311\23\4\23\0"+
- "\2\4\1\0\2\4\3\0\5\4\1\0\1\4\1\0"+
- "\1\4\3\0\1\4\1\312\25\4\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\2\4\1\313\24\4\23\0\2\4\1\0\2\4\3\0"+
- "\5\4\1\0\1\4\1\0\1\4\3\0\1\4\1\314"+
- "\25\4\23\0\2\4\1\0\2\4\3\0\5\4\1\0"+
- "\1\4\1\0\1\4\3\0\10\4\1\315\16\4\23\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\23\0\2\4\1\0"+
- "\2\4\3\0\5\4\1\0\1\4\1\0\1\4\3\0"+
- "\7\4\1\317\17\4\22\0";
+ "\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"+
+ "\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\2\4\3\0\5\4\1\0\1\4\1\0\1\4"+
+ "\3\0\7\4\1\320\17\4\23\0";
private static int [] zzUnpackTrans() {
- int [] result = new int[8432];
+ int [] result = new int[8568];
int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
@@ -482,14 +482,14 @@ class _JetLexer implements FlexLexer {
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
- "\1\0\1\11\40\1\1\11\1\1\12\11\4\1\2\11"+
+ "\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\1\1\0\15\1\1\11\23\1";
private static int [] zzUnpackAttribute() {
- int [] result = new int[207];
+ int [] result = new int[208];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -797,355 +797,359 @@ class _JetLexer implements FlexLexer {
case 3:
{ return JetTokens.IDENTIFIER;
}
- case 89: break;
- case 63:
+ case 90: break;
+ case 64:
{ return JetTokens.FOR_KEYWORD ;
}
- case 90: break;
- case 59:
+ case 91: break;
+ case 60:
{ return JetTokens.OUT_KEYWORD ;
}
- case 91: break;
- case 83:
+ case 92: break;
+ case 84:
{ return JetTokens.RETURN_KEYWORD ;
}
- case 92: break;
- case 72:
+ case 93: break;
+ case 73:
{ return JetTokens.NULL_KEYWORD ;
}
- case 93: break;
+ case 94: break;
case 14:
{ return JetTokens.LT ;
}
- case 94: break;
- case 39:
+ case 95: break;
+ case 40:
{ return JetTokens.DO_KEYWORD ;
}
- case 95: break;
+ case 96: break;
case 13:
{ return JetTokens.PLUS ;
}
- case 96: break;
- case 27:
+ case 97: break;
+ case 28:
{ return JetTokens.LONG_LITERAL;
}
- case 97: break;
- case 58:
+ case 98: break;
+ case 59:
{ return JetTokens.RAW_STRING_LITERAL;
}
- case 98: break;
- case 47:
+ case 99: break;
+ case 48:
{ return JetTokens.PLUSEQ ;
}
- case 99: break;
- case 77:
+ case 100: break;
+ case 78:
{ return JetTokens.MATCH_KEYWORD ;
}
- case 100: break;
+ case 101: break;
case 26:
{ return JetTokens.COMMA ;
}
- case 101: break;
+ case 102: break;
case 15:
{ return JetTokens.GT ;
}
- case 102: break;
+ case 103: break;
case 4:
{ return JetTokens.WHITE_SPACE;
}
- case 103: break;
- case 84:
+ case 104: break;
+ case 85:
{ return JetTokens.TYPEOF_KEYWORD ;
}
- case 104: break;
+ case 105: break;
case 24:
{ return JetTokens.RPAR ;
}
- case 105: break;
- case 45:
+ case 106: break;
+ case 46:
{ return JetTokens.DOUBLE_ARROW;
}
- case 106: break;
- case 73:
+ case 107: break;
+ case 74:
{ return JetTokens.TRUE_KEYWORD ;
}
- case 107: break;
- case 51:
+ case 108: break;
+ case 52:
{ return JetTokens.ANDAND ;
}
- case 108: break;
- case 57:
- { return JetTokens.DOC_COMMENT;
- }
case 109: break;
- case 28:
- { return JetTokens.FLOAT_LITERAL;
+ case 58:
+ { return JetTokens.DOC_COMMENT;
}
case 110: break;
case 29:
- { return JetTokens.EOL_COMMENT;
+ { return JetTokens.FLOAT_LITERAL;
}
case 111: break;
+ case 30:
+ { return JetTokens.EOL_COMMENT;
+ }
+ case 112: break;
case 17:
{ return JetTokens.COLON ;
}
- case 112: break;
- case 49:
+ case 113: break;
+ case 50:
{ return JetTokens.LTEQ ;
}
- case 113: break;
- case 38:
+ case 114: break;
+ case 39:
{ return JetTokens.ARROW ;
}
- case 114: break;
+ case 115: break;
case 19:
{ return JetTokens.LBRACKET ;
}
- case 115: break;
- case 56:
+ case 116: break;
+ case 57:
{ yypushback(2); return JetTokens.INTEGER_LITERAL;
}
- case 116: break;
+ case 117: break;
case 9:
{ return JetTokens.CHARACTER_LITERAL;
}
- case 117: break;
- case 65:
+ case 118: break;
+ case 66:
{ return JetTokens.VAR_KEYWORD ;
}
- case 118: break;
- case 50:
+ case 119: break;
+ case 51:
{ return JetTokens.GTEQ ;
}
- case 119: break;
+ case 120: break;
case 2:
{ return JetTokens.INTEGER_LITERAL;
}
- case 120: break;
+ case 121: break;
case 22:
{ return JetTokens.RBRACE ;
}
- case 121: break;
- case 76:
+ case 122: break;
+ case 77:
{ return JetTokens.CLASS_KEYWORD ;
}
- case 122: break;
+ case 123: break;
case 12:
{ return JetTokens.EXCL ;
}
- case 123: break;
- case 62:
+ case 124: break;
+ case 63:
{ return JetTokens.TRY_KEYWORD ;
}
- case 124: break;
- case 46:
+ case 125: break;
+ case 47:
{ return JetTokens.EXCLEQ ;
}
- case 125: break;
- case 37:
+ case 126: break;
+ case 38:
{ return JetTokens.MINUSEQ ;
}
- case 126: break;
- case 78:
+ case 127: break;
+ case 79:
{ return JetTokens.THROW_KEYWORD ;
}
- case 127: break;
- case 81:
+ case 128: break;
+ case 82:
{ return JetTokens.WHILE_KEYWORD ;
}
- case 128: break;
- case 36:
+ case 129: break;
+ case 37:
{ return JetTokens.MINUSMINUS;
}
- case 129: break;
- case 85:
+ case 130: break;
+ case 86:
{ return JetTokens.CONTINUE_KEYWORD ;
}
- case 130: break;
- case 69:
+ case 131: break;
+ case 70:
{ return JetTokens.NOT_IN;
}
- case 131: break;
+ case 132: break;
case 5:
{ return JetTokens.DIV ;
}
- case 132: break;
- case 54:
+ case 133: break;
+ case 55:
{ return JetTokens.ELVIS ;
}
- case 133: break;
+ case 134: break;
case 16:
{ return JetTokens.QUEST ;
}
- case 134: break;
- case 52:
+ case 135: break;
+ case 53:
{ return JetTokens.OROR ;
}
- case 135: break;
+ case 136: break;
case 18:
{ return JetTokens.PERC ;
}
- case 136: break;
- case 70:
+ case 137: break;
+ case 71:
{ return JetTokens.EXCLEQEQEQ;
}
- case 137: break;
- case 55:
+ case 138: break;
+ case 56:
{ return JetTokens.PERCEQ ;
}
- case 138: break;
- case 34:
+ case 139: break;
+ case 35:
{ return JetTokens.RANGE ;
}
- case 139: break;
+ case 140: break;
case 1:
{ return TokenType.BAD_CHARACTER;
}
- case 140: break;
- case 53:
- { return JetTokens.SAFE_ACCESS;
- }
case 141: break;
- case 87:
- { return JetTokens.NAMESPACE_KEYWORD ;
+ case 54:
+ { return JetTokens.SAFE_ACCESS;
}
case 142: break;
case 88:
- { return JetTokens.DECOMPOSER_KEYWORD ;
+ { return JetTokens.NAMESPACE_KEYWORD ;
}
case 143: break;
- case 68:
- { return JetTokens.NOT_IS;
+ case 89:
+ { return JetTokens.DECOMPOSER_KEYWORD ;
}
case 144: break;
+ case 69:
+ { return JetTokens.NOT_IS;
+ }
+ case 145: break;
case 6:
{ return JetTokens.MUL ;
}
- case 145: break;
+ case 146: break;
case 20:
{ return JetTokens.RBRACKET ;
}
- case 146: break;
- case 48:
+ case 147: break;
+ case 49:
{ return JetTokens.PLUSPLUS ;
}
- case 147: break;
- case 75:
+ case 148: break;
+ case 76:
{ return JetTokens.THIS_KEYWORD ;
}
- case 148: break;
+ case 149: break;
case 7:
{ return JetTokens.DOT ;
}
- case 149: break;
+ case 150: break;
case 25:
{ return JetTokens.SEMICOLON ;
}
- case 150: break;
- case 43:
+ case 151: break;
+ case 44:
{ return JetTokens.IF_KEYWORD ;
}
- case 151: break;
+ case 152: break;
case 11:
{ return JetTokens.EQ ;
}
- case 152: break;
+ case 153: break;
case 23:
{ return JetTokens.LPAR ;
}
- case 153: break;
+ case 154: break;
case 8:
{ return JetTokens.MINUS ;
}
- case 154: break;
- case 79:
+ case 155: break;
+ case 80:
{ return JetTokens.FALSE_KEYWORD ;
}
- case 155: break;
- case 74:
+ case 156: break;
+ case 75:
{ return JetTokens.TYPE_KEYWORD ;
}
- case 156: break;
- case 60:
+ case 157: break;
+ case 61:
{ return JetTokens.REF_KEYWORD ;
}
- case 157: break;
- case 64:
+ case 158: break;
+ case 65:
{ return JetTokens.FUN_KEYWORD ;
}
- case 158: break;
- case 41:
+ case 159: break;
+ case 42:
{ return JetTokens.IS_KEYWORD ;
}
- case 159: break;
- case 31:
+ case 160: break;
+ case 32:
{ return JetTokens.DIVEQ ;
}
- case 160: break;
- case 86:
+ case 161: break;
+ case 87:
{ return JetTokens.EXTENSION_KEYWORD ;
}
- case 161: break;
- case 40:
- { return JetTokens.AS_KEYWORD ;
- }
case 162: break;
- case 71:
+ case 72:
{ return JetTokens.ELSE_KEYWORD ;
}
case 163: break;
- case 42:
- { return JetTokens.IN_KEYWORD ;
+ case 41:
+ { return JetTokens.AS_KEYWORD ;
}
case 164: break;
- case 44:
- { return JetTokens.EQEQ ;
+ case 43:
+ { return JetTokens.IN_KEYWORD ;
}
case 165: break;
- case 66:
- { return JetTokens.VAL_KEYWORD ;
+ case 45:
+ { return JetTokens.EQEQ ;
}
case 166: break;
case 67:
- { return JetTokens.EQEQEQ ;
+ { return JetTokens.VAL_KEYWORD ;
}
case 167: break;
- case 61:
- { return JetTokens.NEW_KEYWORD ;
+ case 68:
+ { return JetTokens.EQEQEQ ;
}
case 168: break;
- case 32:
- { return JetTokens.MULTEQ ;
+ case 62:
+ { return JetTokens.NEW_KEYWORD ;
}
case 169: break;
+ case 33:
+ { return JetTokens.MULTEQ ;
+ }
+ case 170: break;
case 10:
{ return JetTokens.STRING_LITERAL;
}
- case 170: break;
+ case 171: break;
case 21:
{ return JetTokens.LBRACE ;
}
- case 171: break;
- case 82:
+ case 172: break;
+ case 83:
{ return JetTokens.OBJECT_KEYWORD ;
}
- case 172: break;
- case 80:
+ case 173: break;
+ case 81:
{ return JetTokens.BREAK_KEYWORD ;
}
- case 173: break;
- case 30:
+ case 174: break;
+ case 31:
{ return JetTokens.BLOCK_COMMENT;
}
- case 174: break;
- case 35:
+ case 175: break;
+ case 36:
{ return JetTokens.FILTER ;
}
- case 175: break;
- case 33:
+ case 176: break;
+ case 27:
+ { return JetTokens.HASH ;
+ }
+ case 177: break;
+ case 34:
{ return JetTokens.MAP ;
}
- case 176: break;
+ case 178: break;
default:
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true;
diff --git a/idea/testData/psi/FunctionLiterals_ERR.txt b/idea/testData/psi/FunctionLiterals_ERR.txt
index 922ef7aae78..3e7129149a4 100644
--- a/idea/testData/psi/FunctionLiterals_ERR.txt
+++ b/idea/testData/psi/FunctionLiterals_ERR.txt
@@ -42,16 +42,16 @@ JetFile: FunctionLiterals_ERR.jet
PsiWhiteSpace('\n\n ')
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
- BODY
- TUPLE
- PsiElement(LPAR)('(')
+ VALUE_PARAMETER_LIST
+ PsiElement(LPAR)('(')
+ VALUE_PARAMETER
PsiElement(IDENTIFIER)('a')
- PsiErrorElement:Expecting ')'
-
- PsiWhiteSpace(' ')
- PsiErrorElement:Expecting an expression
- PsiElement(DOUBLE_ARROW)('=>')
- PsiWhiteSpace(' ')
+ PsiErrorElement:Expecting ')
+
+ PsiWhiteSpace(' ')
+ PsiElement(DOUBLE_ARROW)('=>')
+ PsiWhiteSpace(' ')
+ BODY
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n ')