From f049d27fa3816b3c50a6c204b050e4cefb7171bd Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 24 Feb 2012 14:25:12 +0400 Subject: [PATCH] KT-1385 support multi line strings with templates --- .../src/org/jetbrains/jet/JetNodeTypes.java | 1 - .../lang/parsing/JetExpressionParsing.java | 7 +- .../BasicExpressionTypingVisitor.java | 3 - .../expressions/ExpressionTypingUtils.java | 3 - .../src/org/jetbrains/jet/lexer/Jet.flex | 35 +- .../org/jetbrains/jet/lexer/JetTokens.java | 4 +- .../org/jetbrains/jet/lexer/_JetLexer.java | 714 +++++++++--------- .../codegen/multilineStringsWithTemplates.jet | 31 + .../tests/MultilineStringTemplates.jet | 43 ++ compiler/testData/psi/SimpleExpressions.txt | 7 +- compiler/testData/psi/When.txt | 7 +- .../jetbrains/jet/codegen/StringsTest.java | 4 + .../jetbrains/jet/plugin/JetHighlighter.java | 1 - 13 files changed, 460 insertions(+), 400 deletions(-) create mode 100644 compiler/testData/codegen/multilineStringsWithTemplates.jet create mode 100644 compiler/testData/diagnostics/tests/MultilineStringTemplates.jet diff --git a/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java b/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java index e8d76b9ef08..8da5c9790c4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java +++ b/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java @@ -87,7 +87,6 @@ public interface JetNodeTypes { JetNodeType BOOLEAN_CONSTANT = new JetNodeType("BOOLEAN_CONSTANT", JetConstantExpression.class); JetNodeType FLOAT_CONSTANT = new JetNodeType("FLOAT_CONSTANT", JetConstantExpression.class); JetNodeType CHARACTER_CONSTANT = new JetNodeType("CHARACTER_CONSTANT", JetConstantExpression.class); - JetNodeType RAW_STRING_CONSTANT = new JetNodeType("STRING_CONSTANT", JetConstantExpression.class); JetNodeType INTEGER_CONSTANT = new JetNodeType("INTEGER_CONSTANT", JetConstantExpression.class); JetNodeType STRING_TEMPLATE = new JetNodeType("STRING_TEMPLATE", JetStringTemplateExpression.class); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index cce5c9d5c73..55b62543698 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -48,7 +48,7 @@ public class JetExpressionParsing extends AbstractJetParsing { } private static final TokenSet TYPE_ARGUMENT_LIST_STOPPERS = TokenSet.create( - INTEGER_LITERAL, FLOAT_LITERAL, CHARACTER_LITERAL, OPEN_QUOTE, RAW_STRING_LITERAL, + INTEGER_LITERAL, FLOAT_LITERAL, CHARACTER_LITERAL, OPEN_QUOTE, PACKAGE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, TRAIT_KEYWORD, CLASS_KEYWORD, THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD, NULL_KEYWORD, TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, @@ -70,7 +70,7 @@ public class JetExpressionParsing extends AbstractJetParsing { // literal constant TRUE_KEYWORD, FALSE_KEYWORD, - OPEN_QUOTE, RAW_STRING_LITERAL, + OPEN_QUOTE, INTEGER_LITERAL, CHARACTER_LITERAL, FLOAT_LITERAL, NULL_KEYWORD, @@ -701,9 +701,6 @@ public class JetExpressionParsing extends AbstractJetParsing { if (at(TRUE_KEYWORD) || at(FALSE_KEYWORD)) { parseOneTokenExpression(BOOLEAN_CONSTANT); } - else if (at(RAW_STRING_LITERAL)) { - parseOneTokenExpression(RAW_STRING_CONSTANT); - } else if (at(INTEGER_LITERAL)) { parseOneTokenExpression(INTEGER_CONSTANT); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index 34cc2cd36f8..504acf5417c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -161,9 +161,6 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { else if (elementType == JetNodeTypes.CHARACTER_CONSTANT) { value = compileTimeConstantResolver.getCharValue(text, context.expectedType); } - else if (elementType == JetNodeTypes.RAW_STRING_CONSTANT) { - value = compileTimeConstantResolver.getRawStringValue(text, context.expectedType); - } else if (elementType == JetNodeTypes.NULL) { value = compileTimeConstantResolver.getNullValue(context.expectedType); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java index 5ae1dcd8b39..1546e41d55a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java @@ -111,9 +111,6 @@ public class ExpressionTypingUtils { else if (constantType == JetNodeTypes.CHARACTER_CONSTANT) { return semanticServices.getStandardLibrary().getCharType(); } - else if (constantType == JetNodeTypes.RAW_STRING_CONSTANT) { - return semanticServices.getStandardLibrary().getStringType(); - } else if (constantType == JetNodeTypes.NULL) { return JetStandardClasses.getNullableNothingType(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex b/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex index 2a8c6c87b75..9efa6ad3bdc 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex +++ b/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex @@ -45,7 +45,7 @@ import org.jetbrains.jet.lexer.JetTokens; %eof{ return; %eof} -%xstate STRING SHORT_TEMPLATE_ENTRY +%xstate STRING RAW_STRING SHORT_TEMPLATE_ENTRY %state LONG_TEMPLATE_ENTRY DIGIT=[0-9] @@ -110,25 +110,31 @@ LONG_TEMPLATE_ENTRY_END=\} // String templates -\" { pushState(STRING); return JetTokens.OPEN_QUOTE; } +{THREE_QUO} { pushState(RAW_STRING); return JetTokens.OPEN_QUOTE; } + \n { return JetTokens.REGULAR_STRING_PART; } + \" { return JetTokens.REGULAR_STRING_PART; } + \\ { return JetTokens.REGULAR_STRING_PART; } + {THREE_QUO} { popState(); return JetTokens.CLOSING_QUOTE; } - \" { popState(); return JetTokens.CLOSING_QUOTE; } - \n { popState(); yypushback(1); return JetTokens.DANGLING_NEWLINE; } - {REGULAR_STRING_PART} { return JetTokens.REGULAR_STRING_PART; } - {ESCAPE_SEQUENCE} { return JetTokens.ESCAPE_SEQUENCE; } - {SHORT_TEMPLATE_ENTRY} { - pushState(SHORT_TEMPLATE_ENTRY); - yypushback(yylength() - 1); - return JetTokens.SHORT_TEMPLATE_ENTRY_START; - } +\" { pushState(STRING); return JetTokens.OPEN_QUOTE; } + \n { popState(); yypushback(1); return JetTokens.DANGLING_NEWLINE; } + \" { popState(); return JetTokens.CLOSING_QUOTE; } + {ESCAPE_SEQUENCE} { return JetTokens.ESCAPE_SEQUENCE; } + + {REGULAR_STRING_PART} { return JetTokens.REGULAR_STRING_PART; } + {SHORT_TEMPLATE_ENTRY} { + pushState(SHORT_TEMPLATE_ENTRY); + yypushback(yylength() - 1); + return JetTokens.SHORT_TEMPLATE_ENTRY_START; + } // Only *this* keyword is itself an expression valid in this position // *null*, *true* and *false* are also keywords and expression, but it does not make sense to put them // in a string template for it'd be easier to just type them in without a dollar "this" { popState(); return JetTokens.THIS_KEYWORD; } {IDENTIFIER} { popState(); return JetTokens.IDENTIFIER; } - {LONELY_DOLLAR} { return JetTokens.REGULAR_STRING_PART; } - {LONG_TEMPLATE_ENTRY_START} { pushState(LONG_TEMPLATE_ENTRY); return JetTokens.LONG_TEMPLATE_ENTRY_START; } + {LONELY_DOLLAR} { return JetTokens.REGULAR_STRING_PART; } + {LONG_TEMPLATE_ENTRY_START} { pushState(LONG_TEMPLATE_ENTRY); return JetTokens.LONG_TEMPLATE_ENTRY_START; } "{" { lBraceCount++; return JetTokens.LBRACE; } "}" { @@ -158,9 +164,6 @@ LONG_TEMPLATE_ENTRY_END=\} {CHARACTER_LITERAL} { return JetTokens.CHARACTER_LITERAL; } //{STRING_LITERAL} { return JetTokens.STRING_LITERAL; } -// TODO: Decide what to do with """ ... """" -{RAW_STRING_LITERAL} { return JetTokens.RAW_STRING_LITERAL; } - "continue" { return JetTokens.CONTINUE_KEYWORD ;} "package" { return JetTokens.PACKAGE_KEYWORD ;} "return" { return JetTokens.RETURN_KEYWORD ;} diff --git a/compiler/frontend/src/org/jetbrains/jet/lexer/JetTokens.java b/compiler/frontend/src/org/jetbrains/jet/lexer/JetTokens.java index 6a89788fd24..8b4a803fb26 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lexer/JetTokens.java +++ b/compiler/frontend/src/org/jetbrains/jet/lexer/JetTokens.java @@ -45,8 +45,6 @@ public interface JetTokens { JetToken LONG_TEMPLATE_ENTRY_END = new JetToken("LONG_TEMPLATE_ENTRY_END"); JetToken DANGLING_NEWLINE = new JetToken("DANGLING_NEWLINE"); - JetToken RAW_STRING_LITERAL = new JetToken("RAW_STRING_LITERAL"); - JetKeywordToken PACKAGE_KEYWORD = JetKeywordToken.keyword("package"); JetKeywordToken AS_KEYWORD = JetKeywordToken.keyword("as"); JetKeywordToken TYPE_KEYWORD = JetKeywordToken.keyword("type"); @@ -185,7 +183,7 @@ public interface JetTokens { TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE); TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT); - TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART, RAW_STRING_LITERAL); + TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART); 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, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR, SAFE_ACCESS, ELVIS, diff --git a/compiler/frontend/src/org/jetbrains/jet/lexer/_JetLexer.java b/compiler/frontend/src/org/jetbrains/jet/lexer/_JetLexer.java index c989eab79cb..16e71556c44 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lexer/_JetLexer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lexer/_JetLexer.java @@ -1,35 +1,20 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* The following code was generated by JFlex 1.4.3 on 1/31/12 3:47 PM */ +/* The following code was generated by JFlex 1.4.3 on 2/24/12 1:22 PM */ package org.jetbrains.jet.lexer; -import com.intellij.lexer.FlexLexer; -import com.intellij.psi.TokenType; +import java.util.*; +import com.intellij.lexer.*; +import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; -import java.util.Stack; +import org.jetbrains.jet.lexer.JetTokens; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 1/31/12 3:47 PM from the specification file - * /home/geevee/jet/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex + * on 2/24/12 1:22 PM from the specification file + * /Users/abreslav/work/jet/compiler/frontend/src/org/jetbrains/jet/lexer/Jet.flex */ class _JetLexer implements FlexLexer { /** initial size of the lookahead buffer */ @@ -38,8 +23,9 @@ class _JetLexer implements FlexLexer { /** lexical states */ public static final int STRING = 2; public static final int YYINITIAL = 0; - public static final int LONG_TEMPLATE_ENTRY = 6; - public static final int SHORT_TEMPLATE_ENTRY = 4; + public static final int LONG_TEMPLATE_ENTRY = 8; + public static final int RAW_STRING = 4; + public static final int SHORT_TEMPLATE_ENTRY = 6; /** * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l @@ -48,7 +34,7 @@ class _JetLexer implements FlexLexer { * l is of the form l = 2*k, k a non negative integer */ private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2, 3, 3 + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 }; /** @@ -134,29 +120,29 @@ class _JetLexer implements FlexLexer { private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\4\0\1\1\1\2\1\3\1\4\2\1\1\5\1\6"+ + "\5\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"+ "\20\3\1\16\1\17\1\20\1\21\1\22\1\23\1\24"+ "\2\1\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\7\3\1\62\10\3\1\63"+ - "\1\0\1\64\1\0\1\65\1\0\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\10\3\1\105\4\3"+ - "\1\106\1\107\2\3\1\110\1\111\1\112\1\113\1\114"+ - "\1\115\1\116\1\117\2\0\2\40\1\44\1\45\1\0"+ - "\2\102\1\43\2\0\1\120\1\3\1\121\1\3\1\122"+ - "\4\3\1\123\1\124\4\3\1\125\1\3\1\126\1\127"+ - "\1\76\1\0\1\130\1\50\2\0\1\131\1\132\1\133"+ - "\1\3\1\134\3\3\1\135\1\136\1\137\1\0\1\103"+ + "\1\34\1\35\1\36\1\35\1\0\1\37\2\35\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\7\3\1\62\10\3"+ + "\1\63\1\0\1\64\1\0\1\65\1\0\1\66\1\67"+ + "\1\70\1\71\1\72\1\73\1\74\1\75\1\76\1\0"+ + "\1\77\2\100\2\0\1\40\1\101\1\43\1\3\2\0"+ + "\1\50\1\102\4\0\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\1\116\1\117\2\0\2\40\1\44\1\45"+ + "\1\0\2\102\1\43\1\0\1\120\1\3\1\121\1\3"+ + "\1\122\4\3\1\123\1\124\4\3\1\125\1\3\1\126"+ + "\1\127\1\76\1\0\1\130\1\50\1\0\1\131\1\132"+ + "\1\133\1\3\1\134\3\3\1\135\1\136\1\137\1\0"+ "\1\3\1\140\1\3\1\141\1\3\1\142\1\143"; private static int [] zzUnpackAction() { - int [] result = new int[228]; + int [] result = new int[229]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -183,36 +169,36 @@ class _JetLexer implements FlexLexer { private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\100\0\200\0\300\0\u0100\0\u0140\0\u0180\0\u01c0"+ "\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\u0400\0\u0440\0\u0480\0\u0140\0\u0140\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\u08c0\0\u0100\0\u0900"+ - "\0\u0940\0\u0100\0\u0980\0\u09c0\0\u0a00\0\u0a40\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\u1440\0\u0180\0\u1480\0\u14c0\0\u1500"+ - "\0\u0100\0\u1540\0\u0100\0\u0100\0\u1580\0\u0100\0\u0100\0\u0100"+ - "\0\u0100\0\u0100\0\u15c0\0\u1600\0\u0100\0\u0100\0\u1640\0\u1680"+ - "\0\u16c0\0\u0100\0\u1700\0\u0100\0\u1740\0\u1780\0\u17c0\0\u1800"+ - "\0\u1840\0\u1880\0\u18c0\0\u1900\0\u1940\0\u1980\0\u19c0\0\u1a00"+ - "\0\u1a40\0\u0180\0\u1a80\0\u1ac0\0\u1b00\0\u1b40\0\u1b80\0\u1bc0"+ - "\0\u1c00\0\u1c40\0\u0100\0\u1c80\0\u1cc0\0\u1d00\0\u1d40\0\u0180"+ - "\0\u0180\0\u1d80\0\u1dc0\0\u0180\0\u0180\0\u1e00\0\u1e00\0\u0100"+ - "\0\u0100\0\u0100\0\u0100\0\u1e40\0\u1e80\0\u0100\0\u1ec0\0\u0100"+ - "\0\u0100\0\u1f00\0\u1f40\0\u0100\0\u1f80\0\u1700\0\u1fc0\0\u0180"+ - "\0\u2000\0\u0180\0\u2040\0\u0180\0\u2080\0\u20c0\0\u2100\0\u2140"+ - "\0\u0180\0\u0180\0\u2180\0\u21c0\0\u2200\0\u2240\0\u0180\0\u2280"+ - "\0\u0180\0\u0100\0\u0100\0\u22c0\0\u0b40\0\u0100\0\u2300\0\u2340"+ - "\0\u0180\0\u0180\0\u0180\0\u2380\0\u0180\0\u23c0\0\u2400\0\u2440"+ - "\0\u0180\0\u0180\0\u0180\0\u2480\0\u0100\0\u24c0\0\u0180\0\u2500"+ - "\0\u0180\0\u2540\0\u0180\0\u0180"; + "\0\u0780\0\u07c0\0\u0800\0\u0840\0\u0880\0\u08c0\0\u0900\0\u0140"+ + "\0\u0940\0\u0980\0\u0140\0\u09c0\0\u0a00\0\u0a40\0\u0a80\0\u0140"+ + "\0\u0140\0\u0140\0\u0140\0\u0140\0\u0140\0\u0140\0\u0ac0\0\u0140"+ + "\0\u0b00\0\u0b40\0\u0140\0\u0140\0\u0b80\0\u0bc0\0\u0c00\0\u0c40"+ + "\0\u0140\0\u0140\0\u0c80\0\u0cc0\0\u0d00\0\u0d40\0\u0d80\0\u0dc0"+ + "\0\u0e00\0\u0140\0\u0e40\0\u0e80\0\u0140\0\u0140\0\u0ec0\0\u0f00"+ + "\0\u0f40\0\u0f80\0\u0140\0\u0140\0\u0140\0\u0140\0\u0140\0\u0fc0"+ + "\0\u1000\0\u1040\0\u1080\0\u10c0\0\u01c0\0\u01c0\0\u01c0\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\u1440\0\u1480\0\u14c0\0\u01c0"+ + "\0\u1500\0\u1540\0\u1580\0\u0140\0\u15c0\0\u0140\0\u0140\0\u1600"+ + "\0\u0140\0\u0140\0\u0140\0\u0140\0\u0140\0\u1640\0\u1680\0\u0140"+ + "\0\u0140\0\u16c0\0\u1700\0\u1740\0\u1780\0\u0140\0\u17c0\0\u0140"+ + "\0\u1800\0\u1840\0\u1880\0\u18c0\0\u1900\0\u1940\0\u1980\0\u19c0"+ + "\0\u0140\0\u1a00\0\u1a40\0\u1a80\0\u1ac0\0\u01c0\0\u1b00\0\u1b40"+ + "\0\u1b80\0\u1bc0\0\u1c00\0\u1c40\0\u1c80\0\u1cc0\0\u0140\0\u1d00"+ + "\0\u1d40\0\u1d80\0\u1dc0\0\u01c0\0\u01c0\0\u1e00\0\u1e40\0\u01c0"+ + "\0\u01c0\0\u1e80\0\u1e80\0\u0140\0\u0140\0\u0140\0\u0140\0\u1ec0"+ + "\0\u1f00\0\u0140\0\u1f40\0\u0140\0\u0140\0\u1f80\0\u1fc0\0\u0140"+ + "\0\u2000\0\u17c0\0\u01c0\0\u2040\0\u01c0\0\u2080\0\u01c0\0\u20c0"+ + "\0\u2100\0\u2140\0\u2180\0\u01c0\0\u01c0\0\u21c0\0\u2200\0\u2240"+ + "\0\u2280\0\u01c0\0\u22c0\0\u01c0\0\u0140\0\u0140\0\u2300\0\u0bc0"+ + "\0\u0140\0\u2340\0\u01c0\0\u01c0\0\u01c0\0\u2380\0\u01c0\0\u23c0"+ + "\0\u2400\0\u2440\0\u01c0\0\u01c0\0\u01c0\0\u2480\0\u24c0\0\u01c0"+ + "\0\u2500\0\u01c0\0\u2540\0\u01c0\0\u01c0"; private static int [] zzUnpackRowMap() { - int [] result = new int[228]; + int [] result = new int[229]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -235,239 +221,239 @@ class _JetLexer implements FlexLexer { private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_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\23\1\24"+ - "\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\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\6\1\7\1\10\1\11\1\10\1\6\1\12\1\11"+ + "\1\13\1\14\1\15\1\16\1\17\2\10\1\20\1\10"+ + "\1\21\1\10\1\22\1\6\1\23\1\10\1\24\1\25"+ + "\1\26\1\10\1\27\1\30\1\31\1\32\1\33\1\34"+ + "\1\35\1\36\2\10\1\37\1\40\1\10\1\41\1\10"+ + "\1\42\1\10\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\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\47\0\1\112\77\0\1\113\15\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\40\0\1\122\1\123\14\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\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\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\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\27\0"+ - "\1\157\75\0\1\160\1\0\1\161\75\0\1\162\1\0"+ - "\1\163\76\0\1\164\1\165\77\0\1\166\1\0\1\167"+ - "\100\0\1\170\100\0\1\171\73\0\1\172\14\0\7\66"+ - "\2\0\13\66\2\0\52\66\2\0\1\173\1\0\1\173"+ - "\1\0\1\174\6\0\2\173\1\0\1\173\1\0\1\173"+ - "\3\0\1\173\1\175\1\0\26\173\21\0\7\176\1\0"+ - "\16\176\1\177\51\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"+ - "\26\73\21\0\6\200\2\0\70\200\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\201\24\73\22\0\1\117\12\0"+ - "\1\117\2\0\1\202\61\0\1\203\12\0\1\203\4\0"+ - "\1\203\43\0\1\203\12\0\6\102\1\204\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\205"+ - "\2\0\70\205\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\206\2\0\70\206\7\110\1\0\70\110\13\207"+ - "\1\210\64\207\1\0\1\114\12\0\1\114\2\0\1\211"+ - "\1\101\17\0\1\101\40\0\2\115\11\0\1\115\1\0"+ - "\1\115\1\212\1\115\1\0\1\213\12\0\1\115\2\0"+ - "\1\115\1\213\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\214\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\215\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\216\11\7\1\217\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\220\2\0\11\7\1\221\10\7\1\222"+ - "\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\223"+ - "\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\224"+ - "\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\6\7\1\225"+ - "\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\11\7\1\226"+ - "\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\16\7\1\227"+ - "\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\20\7\1\230"+ - "\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\3\7\1\231"+ - "\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\232"+ - "\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\5\0"+ - "\1\233\14\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\234\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\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\2\7\1\236\4\7"+ - "\1\237\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\240\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\241\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\242\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\243\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\244\3\7\1\245\5\7\55\0\1\246\2\0\1\247"+ - "\123\0\1\250\74\0\1\251\101\0\1\252\100\0\1\253"+ - "\15\0\2\173\1\0\2\173\6\0\3\173\1\0\1\173"+ - "\1\0\1\173\3\0\1\173\2\0\26\173\21\0\6\254"+ - "\2\0\70\254\1\0\2\255\11\0\1\255\1\0\1\255"+ - "\1\0\1\255\14\0\1\255\2\0\1\255\1\0\1\255"+ - "\3\0\1\255\3\0\1\255\3\0\1\255\21\0\6\200"+ - "\1\256\1\0\70\200\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\257\23\73\22\0\1\203\12\0\1\203\63\0"+ - "\6\205\1\260\1\0\70\205\6\206\1\261\1\0\70\206"+ - "\13\207\1\262\64\207\12\263\1\264\1\210\64\263\1\0"+ - "\1\117\12\0\1\117\64\0\2\265\11\0\1\265\1\0"+ - "\1\265\1\202\1\265\14\0\1\265\2\0\1\265\1\0"+ - "\1\265\3\0\1\265\3\0\1\265\3\0\1\265\22\0"+ - "\1\203\12\0\1\203\4\0\1\266\43\0\1\266\31\0"+ - "\1\202\60\0\25\215\1\267\52\215\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\270\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\271\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\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\2\7\1\273\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\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\7\7\1\275\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\276\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\277\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\300\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\301\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\302\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\12\7\1\303\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\304"+ - "\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\305\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\306\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\6\7"+ - "\1\307\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\310\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\311\22\7\22\0\2\312\1\0\2\312\6\0\3\312"+ - "\1\0\1\312\1\0\1\312\3\0\1\312\2\0\26\312"+ - "\21\0\6\254\1\313\1\0\70\254\1\0\2\314\11\0"+ - "\1\314\1\0\1\314\1\0\1\314\14\0\1\314\2\0"+ - "\1\314\1\0\1\314\3\0\1\314\3\0\1\314\3\0"+ - "\1\314\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\315"+ - "\22\73\21\0\12\207\1\316\1\262\64\207\13\263\1\317"+ - "\64\263\1\0\2\265\11\0\1\265\1\0\1\265\1\0"+ - "\1\265\1\0\1\213\12\0\1\265\2\0\1\265\1\213"+ - "\1\265\3\0\1\265\3\0\1\265\3\0\1\265\21\0"+ - "\25\215\1\320\52\215\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"+ - "\17\7\1\321\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\322\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\14\7"+ - "\1\323\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\324\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\325\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\326\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\11\7"+ - "\1\327\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\14\7"+ - "\1\330\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\12\7"+ - "\1\331\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\332\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\333\16\7\22\0\2\334\11\0\1\334\1\0\1\334"+ - "\1\0\1\334\14\0\1\334\2\0\1\334\1\0\1\334"+ - "\3\0\1\334\3\0\1\334\3\0\1\334\21\0\12\263"+ - "\1\264\1\317\64\263\25\215\1\335\52\215\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\6\7\1\336\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\337\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\340\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\341\17\7\22\0\2\176\11\0"+ - "\1\176\1\0\1\176\1\0\1\176\14\0\1\176\2\0"+ - "\1\176\1\0\1\176\3\0\1\176\3\0\1\176\3\0"+ - "\1\176\22\0\2\7\1\0\2\7\6\0\3\7\1\0"+ - "\1\7\1\0\1\7\3\0\1\342\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\7\7\1\343\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\344\16\7\21\0"; + "\1\61\1\62\1\63\1\64\1\65\1\66\7\67\1\70"+ + "\1\71\13\67\1\72\1\73\61\67\1\74\1\71\13\67"+ + "\1\74\1\75\52\67\2\0\1\76\1\0\1\76\1\0"+ + "\1\77\6\0\2\76\1\0\1\76\1\0\1\76\3\0"+ + "\1\76\2\0\1\100\25\76\21\0\1\6\1\7\1\10"+ + "\1\11\1\10\1\6\1\12\1\11\1\13\1\14\1\15"+ + "\1\16\1\17\2\10\1\20\1\10\1\21\1\10\1\22"+ + "\1\6\1\23\1\10\1\101\1\102\1\26\1\10\1\27"+ + "\1\30\1\31\1\32\1\33\1\34\1\35\1\36\2\10"+ + "\1\37\1\40\1\10\1\41\1\10\1\42\1\10\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\1\66\101\0\1\7\12\0\1\7\2\0"+ + "\1\103\1\104\17\0\1\104\40\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\26\10\24\0\1\11\3\0\1\11\70\0\6\105"+ + "\2\0\70\105\2\0\1\106\1\0\1\106\1\0\1\107"+ + "\6\0\2\106\1\0\1\106\1\0\1\106\3\0\1\106"+ + "\2\0\26\106\23\0\1\110\1\0\1\110\1\0\1\111"+ + "\2\0\1\112\3\0\2\110\1\0\1\110\1\0\1\110"+ + "\3\0\1\110\2\0\26\110\33\0\1\113\1\114\47\0"+ + "\1\115\77\0\1\116\15\0\1\117\12\0\1\117\1\120"+ + "\1\121\1\103\1\104\17\0\1\104\5\0\1\121\32\0"+ + "\1\122\12\0\1\122\2\0\1\123\101\0\1\124\40\0"+ + "\1\125\1\126\14\0\7\22\1\0\13\22\1\127\1\130"+ + "\53\22\25\0\1\131\53\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\1\10\1\132\12\10\1\133\5\10\1\134\3\10\22\0"+ + "\2\10\1\0\2\10\6\0\3\10\1\0\1\10\1\0"+ + "\1\10\3\0\1\10\2\0\3\10\1\135\2\10\1\136"+ + "\12\10\1\137\4\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\140\2\0"+ + "\26\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\5\10\1\141"+ + "\12\10\1\142\5\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\15\10\1\143\10\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\144\2\0"+ + "\26\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\20\10\1\145"+ + "\5\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\11\10\1\146"+ + "\14\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\3\10\1\147"+ + "\22\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\7\10\1\150"+ + "\16\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\14\10\1\151"+ + "\11\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\1\10\1\152"+ + "\24\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\153\2\0\5\10\1\154"+ + "\3\10\1\155\14\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\1\10\1\156\24\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\11\10\1\157\14\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\5\10\1\160\20\10\54\0\1\161\27\0\1\162\75\0"+ + "\1\163\1\0\1\164\75\0\1\165\1\0\1\166\76\0"+ + "\1\167\1\170\77\0\1\171\1\0\1\172\100\0\1\173"+ + "\100\0\1\174\73\0\1\175\14\0\7\67\2\0\13\67"+ + "\2\0\52\67\2\0\1\176\1\0\1\176\1\0\1\177"+ + "\6\0\2\176\1\0\1\176\1\0\1\176\3\0\1\176"+ + "\1\200\1\0\26\176\21\0\7\201\1\0\16\201\1\202"+ + "\51\201\25\0\1\203\53\0\2\76\1\0\2\76\6\0"+ + "\3\76\1\0\1\76\1\0\1\76\3\0\1\76\2\0"+ + "\26\76\21\0\6\204\2\0\70\204\1\0\2\76\1\0"+ + "\2\76\6\0\3\76\1\0\1\76\1\0\1\76\3\0"+ + "\1\76\2\0\1\76\1\205\24\76\22\0\1\122\12\0"+ + "\1\122\2\0\1\206\61\0\1\207\12\0\1\207\4\0"+ + "\1\207\43\0\1\207\12\0\6\105\1\210\1\0\70\105"+ + "\1\0\2\106\1\0\2\106\6\0\3\106\1\0\1\106"+ + "\1\0\1\106\3\0\1\106\2\0\26\106\21\0\6\211"+ + "\2\0\70\211\1\0\2\110\1\0\2\110\6\0\3\110"+ + "\1\0\1\110\1\0\1\110\3\0\1\110\2\0\26\110"+ + "\21\0\6\212\2\0\70\212\7\113\1\0\70\113\13\213"+ + "\1\214\64\213\1\0\1\117\12\0\1\117\2\0\1\215"+ + "\1\104\17\0\1\104\40\0\2\120\11\0\1\120\1\0"+ + "\1\120\1\216\1\120\1\0\1\217\12\0\1\120\2\0"+ + "\1\120\1\217\1\120\3\0\1\120\3\0\1\120\3\0"+ + "\1\120\22\0\1\121\12\0\1\121\2\0\1\220\61\0"+ + "\1\122\12\0\1\122\3\0\1\104\17\0\1\104\37\0"+ + "\7\22\1\0\70\22\25\0\1\221\53\0\2\10\1\0"+ + "\2\10\6\0\3\10\1\0\1\10\1\0\1\10\3\0"+ + "\1\10\2\0\2\10\1\222\11\10\1\223\11\10\22\0"+ + "\2\10\1\0\2\10\6\0\3\10\1\0\1\10\1\0"+ + "\1\10\3\0\1\224\2\0\11\10\1\225\10\10\1\226"+ + "\3\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\10\10\1\227"+ + "\15\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\10\10\1\230"+ + "\15\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\6\10\1\231"+ + "\17\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\11\10\1\232"+ + "\14\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\16\10\1\233"+ + "\7\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\20\10\1\234"+ + "\5\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\3\10\1\235"+ + "\22\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\4\10\1\236"+ + "\21\10\22\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\26\10\5\0"+ + "\1\237\14\0\2\10\1\0\2\10\6\0\3\10\1\0"+ + "\1\10\1\0\1\10\3\0\1\10\2\0\1\240\25\10"+ + "\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+ + "\1\0\1\10\3\0\1\10\2\0\7\10\1\241\16\10"+ + "\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+ + "\1\0\1\10\3\0\1\10\2\0\2\10\1\242\4\10"+ + "\1\243\16\10\22\0\2\10\1\0\2\10\6\0\3\10"+ + "\1\0\1\10\1\0\1\10\3\0\1\10\2\0\6\10"+ + "\1\244\17\10\22\0\2\10\1\0\2\10\6\0\3\10"+ + "\1\0\1\10\1\0\1\10\3\0\1\10\2\0\14\10"+ + "\1\245\11\10\22\0\2\10\1\0\2\10\6\0\3\10"+ + "\1\0\1\10\1\0\1\10\3\0\1\10\2\0\20\10"+ + "\1\246\5\10\22\0\2\10\1\0\2\10\6\0\3\10"+ + "\1\0\1\10\1\0\1\10\3\0\1\10\2\0\2\10"+ + "\1\247\23\10\22\0\2\10\1\0\2\10\6\0\3\10"+ + "\1\0\1\10\1\0\1\10\3\0\1\10\2\0\14\10"+ + "\1\250\3\10\1\251\5\10\55\0\1\252\2\0\1\253"+ + "\123\0\1\254\74\0\1\255\101\0\1\256\100\0\1\257"+ + "\15\0\2\176\1\0\2\176\6\0\3\176\1\0\1\176"+ + "\1\0\1\176\3\0\1\176\2\0\26\176\21\0\6\260"+ + "\2\0\70\260\1\0\2\261\11\0\1\261\1\0\1\261"+ + "\1\0\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\46\0\1\73"+ + "\52\0\6\204\1\262\1\0\70\204\1\0\2\76\1\0"+ + "\2\76\6\0\3\76\1\0\1\76\1\0\1\76\3\0"+ + "\1\76\2\0\2\76\1\263\23\76\22\0\1\207\12\0"+ + "\1\207\63\0\6\211\1\264\1\0\70\211\6\212\1\265"+ + "\1\0\70\212\13\213\1\266\64\213\12\267\1\270\1\214"+ + "\64\267\1\0\1\122\12\0\1\122\64\0\2\271\11\0"+ + "\1\271\1\0\1\271\1\206\1\271\14\0\1\271\2\0"+ + "\1\271\1\0\1\271\3\0\1\271\3\0\1\271\3\0"+ + "\1\271\22\0\1\207\12\0\1\207\4\0\1\272\43\0"+ + "\1\272\31\0\1\206\61\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\3\10\1\273\22\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\5\10\1\274\20\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\7\10\1\275\16\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\2\10\1\276\23\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\7\10\1\277\16\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\7\10\1\300\16\10\22\0\2\10\1\0\2\10\6\0"+ + "\3\10\1\0\1\10\1\0\1\10\3\0\1\10\2\0"+ + "\1\301\25\10\22\0\2\10\1\0\2\10\6\0\3\10"+ + "\1\0\1\10\1\0\1\10\3\0\1\10\2\0\3\10"+ + "\1\302\22\10\22\0\2\10\1\0\2\10\6\0\3\10"+ + "\1\0\1\10\1\0\1\10\3\0\1\10\2\0\7\10"+ + "\1\303\16\10\22\0\2\10\1\0\2\10\6\0\3\10"+ + "\1\0\1\10\1\0\1\10\3\0\1\10\2\0\20\10"+ + "\1\304\5\10\22\0\2\10\1\0\2\10\6\0\3\10"+ + "\1\0\1\10\1\0\1\10\3\0\1\10\2\0\7\10"+ + "\1\305\16\10\22\0\2\10\1\0\2\10\6\0\3\10"+ + "\1\0\1\10\1\0\1\10\3\0\1\10\2\0\12\10"+ + "\1\306\13\10\22\0\2\10\1\0\2\10\6\0\3\10"+ + "\1\0\1\10\1\0\1\10\3\0\1\307\2\0\26\10"+ + "\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+ + "\1\0\1\10\3\0\1\10\2\0\11\10\1\310\14\10"+ + "\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+ + "\1\0\1\10\3\0\1\10\2\0\20\10\1\311\5\10"+ + "\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+ + "\1\0\1\10\3\0\1\10\2\0\6\10\1\312\17\10"+ + "\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+ + "\1\0\1\10\3\0\1\10\2\0\3\10\1\313\22\10"+ + "\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+ + "\1\0\1\10\3\0\1\10\2\0\3\10\1\314\22\10"+ + "\22\0\2\315\1\0\2\315\6\0\3\315\1\0\1\315"+ + "\1\0\1\315\3\0\1\315\2\0\26\315\21\0\6\260"+ + "\1\316\1\0\70\260\1\0\2\317\11\0\1\317\1\0"+ + "\1\317\1\0\1\317\14\0\1\317\2\0\1\317\1\0"+ + "\1\317\3\0\1\317\3\0\1\317\3\0\1\317\22\0"+ + "\2\76\1\0\2\76\6\0\3\76\1\0\1\76\1\0"+ + "\1\76\3\0\1\76\2\0\3\76\1\320\22\76\21\0"+ + "\12\213\1\321\1\266\64\213\13\267\1\322\64\267\1\0"+ + "\2\271\11\0\1\271\1\0\1\271\1\0\1\271\1\0"+ + "\1\217\12\0\1\271\2\0\1\271\1\217\1\271\3\0"+ + "\1\271\3\0\1\271\3\0\1\271\22\0\2\10\1\0"+ + "\2\10\6\0\3\10\1\0\1\10\1\0\1\10\3\0"+ + "\1\10\2\0\17\10\1\323\6\10\22\0\2\10\1\0"+ + "\2\10\6\0\3\10\1\0\1\10\1\0\1\10\3\0"+ + "\1\10\2\0\1\324\25\10\22\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\14\10\1\325\11\10\22\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\2\10\1\326\23\10\22\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\3\10\1\327\22\10\22\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\4\10\1\330\21\10\22\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\11\10\1\331\14\10\22\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\14\10\1\332\11\10\22\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\12\10\1\333\13\10\22\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\7\10\1\334\16\10\22\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\7\10\1\335\16\10\22\0\2\336\11\0\1\336"+ + "\1\0\1\336\1\0\1\336\14\0\1\336\2\0\1\336"+ + "\1\0\1\336\3\0\1\336\3\0\1\336\3\0\1\336"+ + "\21\0\12\267\1\270\1\322\64\267\1\0\2\10\1\0"+ + "\2\10\6\0\3\10\1\0\1\10\1\0\1\10\3\0"+ + "\1\10\2\0\6\10\1\337\17\10\22\0\2\10\1\0"+ + "\2\10\6\0\3\10\1\0\1\10\1\0\1\10\3\0"+ + "\1\10\2\0\1\340\25\10\22\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\13\10\1\341\12\10\22\0\2\10\1\0\2\10"+ + "\6\0\3\10\1\0\1\10\1\0\1\10\3\0\1\10"+ + "\2\0\6\10\1\342\17\10\22\0\2\201\11\0\1\201"+ + "\1\0\1\201\1\0\1\201\14\0\1\201\2\0\1\201"+ + "\1\0\1\201\3\0\1\201\3\0\1\201\3\0\1\201"+ + "\22\0\2\10\1\0\2\10\6\0\3\10\1\0\1\10"+ + "\1\0\1\10\3\0\1\343\2\0\26\10\22\0\2\10"+ + "\1\0\2\10\6\0\3\10\1\0\1\10\1\0\1\10"+ + "\3\0\1\10\2\0\7\10\1\344\16\10\22\0\2\10"+ + "\1\0\2\10\6\0\3\10\1\0\1\10\1\0\1\10"+ + "\3\0\1\10\2\0\7\10\1\345\16\10\21\0"; private static int [] zzUnpackTrans() { int [] result = new int[9600]; @@ -511,19 +497,19 @@ 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\22\1\1\11\2\1\1\11"+ - "\4\1\7\11\1\1\1\11\1\1\1\0\1\11\1\1"+ + "\5\0\1\11\15\1\2\11\22\1\1\11\2\1\1\11"+ + "\4\1\7\11\1\1\1\11\1\1\1\0\2\11\2\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\1\1\1\0\1\11\1\0\2\11"+ - "\1\1\5\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\16\1\1\11"+ - "\14\1\4\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\7\1"; + "\1\1\5\11\1\1\1\0\2\11\1\1\2\0\1\1"+ + "\1\11\1\1\1\11\2\0\2\1\4\0\1\11\15\1"+ + "\1\11\14\1\4\11\2\0\1\11\1\1\2\11\1\0"+ + "\1\1\1\11\1\1\1\0\22\1\2\11\1\0\1\1"+ + "\1\11\1\0\13\1\1\0\7\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[228]; + int [] result = new int[229]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -895,73 +881,73 @@ class _JetLexer implements FlexLexer { { return JetTokens.PLUS ; } case 108: break; - case 67: - { return JetTokens.RAW_STRING_LITERAL; - } - case 109: break; case 57: { return JetTokens.PLUSEQ ; } - case 110: break; + case 109: break; case 88: { popState(); return JetTokens.THIS_KEYWORD; } - case 111: break; + case 110: break; case 28: { return JetTokens.COMMA ; } - case 112: break; + case 111: break; case 17: { return JetTokens.GT ; } - case 113: break; + case 112: break; case 4: { return JetTokens.WHITE_SPACE; } - case 114: break; + case 113: break; case 25: { return JetTokens.RPAR ; } - case 115: break; + case 114: break; case 55: { return JetTokens.DOUBLE_ARROW; } - case 116: break; + case 115: break; case 81: { return JetTokens.TRUE_KEYWORD ; } - case 117: break; + case 116: break; case 77: { return JetTokens.IDE_TEMPLATE_START ; } - case 118: break; + case 117: break; case 36: { return JetTokens.FIELD_IDENTIFIER; } - case 119: break; + case 118: break; case 59: { return JetTokens.ANDAND ; } - case 120: break; + case 119: break; case 63: { pushState(LONG_TEMPLATE_ENTRY); return JetTokens.LONG_TEMPLATE_ENTRY_START; } - case 121: break; + case 120: break; case 66: { return JetTokens.DOC_COMMENT; } - case 122: break; + case 121: break; case 35: { return JetTokens.FLOAT_LITERAL; } - case 123: break; + case 122: break; case 39: { return JetTokens.EOL_COMMENT; } - case 124: break; + case 123: break; case 85: { return JetTokens.WHEN_KEYWORD ; } + case 124: break; + case 67: + { pushState(RAW_STRING); return JetTokens.OPEN_QUOTE; + } case 125: break; case 26: { return JetTokens.COLON ; @@ -1103,135 +1089,135 @@ class _JetLexer implements FlexLexer { { return TokenType.BAD_CHARACTER; } case 160: break; + case 62: + { pushState(SHORT_TEMPLATE_ENTRY); + yypushback(yylength() - 1); + return JetTokens.SHORT_TEMPLATE_ENTRY_START; + } + case 161: break; case 74: { return JetTokens.NOT_IS; } - case 161: break; + case 162: break; case 7: { return JetTokens.MUL ; } - case 162: break; + case 163: break; case 23: { return JetTokens.RBRACKET ; } - case 163: break; + case 164: break; case 58: { return JetTokens.PLUSPLUS ; } - case 164: break; + case 165: break; case 80: { return JetTokens.THIS_KEYWORD ; } - case 165: break; + case 166: break; case 8: { return JetTokens.DOT ; } - case 166: break; + case 167: break; case 27: { return JetTokens.SEMICOLON ; } - case 167: break; + case 168: break; case 49: { return JetTokens.IF_KEYWORD ; } - case 168: break; + case 169: break; case 64: { return JetTokens.ESCAPE_SEQUENCE; } - case 169: break; + case 170: break; case 31: { popState(); return JetTokens.CLOSING_QUOTE; } - case 170: break; + case 171: break; case 18: { return JetTokens.EQ ; } - case 171: break; + case 172: break; case 5: { return JetTokens.AT ; } - case 172: break; + case 173: break; case 69: { return JetTokens.AS_SAFE; } - case 173: break; + case 174: break; case 24: { return JetTokens.LPAR ; } - case 174: break; + case 175: break; case 9: { return JetTokens.MINUS ; } - case 175: break; + case 176: break; case 95: { return JetTokens.FALSE_KEYWORD ; } - case 176: break; + case 177: break; case 82: { return JetTokens.TYPE_KEYWORD ; } - case 177: break; + case 178: break; case 70: { return JetTokens.FUN_KEYWORD ; } - case 178: break; + case 179: break; case 47: { return JetTokens.IS_KEYWORD ; } - case 179: break; + case 180: break; case 30: { popState(); yypushback(1); return JetTokens.DANGLING_NEWLINE; } - case 180: break; + case 181: break; case 33: { lBraceCount++; return JetTokens.LBRACE; } - case 181: break; + case 182: break; case 87: { yypushback(3); return JetTokens.EXCL; } - case 182: break; + case 183: break; case 41: { return JetTokens.DIVEQ ; } - case 183: break; + case 184: break; case 84: { return JetTokens.ELSE_KEYWORD ; } - case 184: break; + case 185: break; case 50: { return JetTokens.AS_KEYWORD ; } - case 185: break; + case 186: break; case 48: { return JetTokens.IN_KEYWORD ; } - case 186: break; + case 187: break; case 56: { return JetTokens.EQEQ ; } - case 187: break; + case 188: break; case 79: { return JetTokens.EQEQEQ ; } - case 188: break; + case 189: break; case 73: { return JetTokens.VAL_KEYWORD ; } - case 189: break; + case 190: break; case 86: { return JetTokens.CAPITALIZED_THIS_KEYWORD ; } - case 190: break; + case 191: break; case 42: { return JetTokens.MULTEQ ; } - case 191: break; - case 62: - { pushState(SHORT_TEMPLATE_ENTRY); - yypushback(yylength() - 1); - return JetTokens.SHORT_TEMPLATE_ENTRY_START; - } case 192: break; case 12: { return JetTokens.LBRACE ; diff --git a/compiler/testData/codegen/multilineStringsWithTemplates.jet b/compiler/testData/codegen/multilineStringsWithTemplates.jet new file mode 100644 index 00000000000..38e661755cd --- /dev/null +++ b/compiler/testData/codegen/multilineStringsWithTemplates.jet @@ -0,0 +1,31 @@ +fun box() : String { + val s = "abc" + val test1 = """$s""" + if (test1 != "abc") return "Fail 1: $test1" + + val test2 = """${s}""" + if (test2 != "abc") return "Fail 2: $test2" + + val test3 = """ "$s" """ + if (test3 != " \"abc\" ") return "Fail 3: $test3" + + val test4 = """ "${s}" """ + if (test4 != " \"abc\" ") return "Fail 4: $test4" + + val test5 = +""" + ${s.length} +""" + if (test5 != "\n 3\n") return "Fail 5: $test5" + + val test6 = """\n""" + if (test6 != "\\n") return "Fail 6: $test6" + + val test7 = """\${'$'}foo""" + if (test7 != "\\\$foo") return "Fail 7: $test7" + + val test8 = """$ foo""" + if (test8 != "$ foo") return "Fail 8: $test8" + + return "OK" +} diff --git a/compiler/testData/diagnostics/tests/MultilineStringTemplates.jet b/compiler/testData/diagnostics/tests/MultilineStringTemplates.jet new file mode 100644 index 00000000000..715007c246c --- /dev/null +++ b/compiler/testData/diagnostics/tests/MultilineStringTemplates.jet @@ -0,0 +1,43 @@ +fun box() : String { + val s = "abc" + val test1 = """$s""" + if (test1 != "abc") return "Fail 1: $test1" + + val test2 = """${s}""" + if (test2 != "abc") return "Fail 2: $test2" + + val test3 = """ "$s" """ + if (test3 != " \"abc\" ") return "Fail 3: $test3" + + val test4 = """ "${s}" """ + if (test4 != " \"abc\" ") return "Fail 4: $test4" + + val test5 = +""" + ${s.length} +""" + if (test5 != "\n 3\n") return "Fail 5: $test5" + + val test6 = """\n""" + if (test6 != "\\n") return "Fail 6: $test6" + + val test7 = """\${'$'}foo""" + if (test7 != "\\\$foo") return "Fail 7: $test7" + + val test8 = """$ foo""" + if (test8 != "$ foo") return "Fail 8: $test8" + + return "OK" +} + + +fun new() : String { + return """ + sdfasdf + ${a} + ds"asdfas + $b + asgfaf + """ + +} diff --git a/compiler/testData/psi/SimpleExpressions.txt b/compiler/testData/psi/SimpleExpressions.txt index 80ddc9338ef..99333f8a1b8 100644 --- a/compiler/testData/psi/SimpleExpressions.txt +++ b/compiler/testData/psi/SimpleExpressions.txt @@ -105,8 +105,11 @@ JetFile: SimpleExpressions.jet PsiWhiteSpace(' ') PsiElement(EQ)('=') PsiWhiteSpace(' ') - STRING_CONSTANT - PsiElement(RAW_STRING_LITERAL)('"""dsf"""') + STRING_TEMPLATE + PsiElement(OPEN_QUOTE)('"""') + LITERAL_STRING_TEMPLATE_ENTRY + PsiElement(REGULAR_STRING_PART)('dsf') + PsiElement(CLOSING_QUOTE)('"""') PsiElement(COMMA)(',') PsiWhiteSpace('\n ') VALUE_PARAMETER diff --git a/compiler/testData/psi/When.txt b/compiler/testData/psi/When.txt index b4cb01ee56c..23b4319b95d 100644 --- a/compiler/testData/psi/When.txt +++ b/compiler/testData/psi/When.txt @@ -259,8 +259,11 @@ JetFile: When.jet PsiElement(is)('is') PsiWhiteSpace(' ') EXPRESSION_PATTERN - STRING_CONSTANT - PsiElement(RAW_STRING_LITERAL)('"""ddd"""') + STRING_TEMPLATE + PsiElement(OPEN_QUOTE)('"""') + LITERAL_STRING_TEMPLATE_ENTRY + PsiElement(REGULAR_STRING_PART)('ddd') + PsiElement(CLOSING_QUOTE)('"""') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') diff --git a/compiler/tests/org/jetbrains/jet/codegen/StringsTest.java b/compiler/tests/org/jetbrains/jet/codegen/StringsTest.java index ff259aa6867..73793d9083e 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/StringsTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/StringsTest.java @@ -73,6 +73,10 @@ public class StringsTest extends CodegenTestCase { blackBoxFile("rawStrings.jet"); } + public void testMultilineStringsWithTemplates() throws Exception { + blackBoxFile("multilineStringsWithTemplates.jet"); + } + public void testKt881() throws Exception { blackBoxFile("regressions/kt881.jet"); } diff --git a/idea/src/org/jetbrains/jet/plugin/JetHighlighter.java b/idea/src/org/jetbrains/jet/plugin/JetHighlighter.java index 8779c9369df..15c6f57e089 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetHighlighter.java +++ b/idea/src/org/jetbrains/jet/plugin/JetHighlighter.java @@ -192,7 +192,6 @@ public class JetHighlighter extends SyntaxHighlighterBase { keys1.put(JetTokens.ESCAPE_SEQUENCE, JET_STRING_ESCAPE); keys1.put(JetTokens.CHARACTER_LITERAL, JET_STRING); - keys1.put(JetTokens.RAW_STRING_LITERAL, JET_STRING); keys1.put(JetTokens.EOL_COMMENT, JET_COMMENT); keys1.put(JetTokens.BLOCK_COMMENT, JET_COMMENT);