From a7919fdc1db453fd228739a94652ebf2ae8a6159 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Fri, 10 Dec 2010 21:27:19 +0300 Subject: [PATCH] lexer/highlighting initial --- .idea/ant.xml | 8 + .idea/inspectionProfiles/Project_Default.xml | 350 +++++ .../inspectionProfiles/profiles_settings.xml | 7 + .idea/misc.xml | 2 +- .idea/projectCodeStyle.xml | 42 + idea/META-INF/plugin.xml | 22 + idea/buildLexer.xml | 43 + idea/idea.iml | 5 +- .../jetbrains/jet/lang/JetFileFactory.java | 15 + .../org/jetbrains/jet/lang/JetFileType.java | 38 + .../jetbrains/jet/lang/JetHighlighter.java | 86 ++ .../org/jetbrains/jet/lang/JetLanguage.java | 26 + idea/src/org/jetbrains/jet/lexer/Jet.flex | 282 ++-- .../src/org/jetbrains/jet/lexer/JetLexer.java | 15 + .../src/org/jetbrains/jet/lexer/JetToken.java | 17 + .../org/jetbrains/jet/lexer/JetTokens.java | 132 ++ .../org/jetbrains/jet/lexer/_JetLexer.java | 1132 +++++++++++++++++ 17 files changed, 2038 insertions(+), 184 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/projectCodeStyle.xml create mode 100644 idea/META-INF/plugin.xml create mode 100644 idea/buildLexer.xml create mode 100644 idea/src/org/jetbrains/jet/lang/JetFileFactory.java create mode 100644 idea/src/org/jetbrains/jet/lang/JetFileType.java create mode 100644 idea/src/org/jetbrains/jet/lang/JetHighlighter.java create mode 100644 idea/src/org/jetbrains/jet/lang/JetLanguage.java create mode 100644 idea/src/org/jetbrains/jet/lexer/JetLexer.java create mode 100644 idea/src/org/jetbrains/jet/lexer/JetToken.java create mode 100644 idea/src/org/jetbrains/jet/lexer/JetTokens.java create mode 100644 idea/src/org/jetbrains/jet/lexer/_JetLexer.java diff --git a/.idea/ant.xml b/.idea/ant.xml index 2581ca3fe84..dca320aa923 100644 --- a/.idea/ant.xml +++ b/.idea/ant.xml @@ -2,6 +2,14 @@ + + + + + + + + diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000000..22221267f8b --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,350 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000000..3b312839bf2 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 6159fa0c023..045cd2dcb39 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -23,7 +23,7 @@ http://www.w3.org/1999/xhtml - + diff --git a/.idea/projectCodeStyle.xml b/.idea/projectCodeStyle.xml new file mode 100644 index 00000000000..d2909863543 --- /dev/null +++ b/.idea/projectCodeStyle.xml @@ -0,0 +1,42 @@ + + + + + + + diff --git a/idea/META-INF/plugin.xml b/idea/META-INF/plugin.xml new file mode 100644 index 00000000000..9584e7bc7b5 --- /dev/null +++ b/idea/META-INF/plugin.xml @@ -0,0 +1,22 @@ + + Jet + Jet Language support + 1.0 + JetBrains + + + + + + + + + + + + + + + + + diff --git a/idea/buildLexer.xml b/idea/buildLexer.xml new file mode 100644 index 00000000000..5f9bb7afa20 --- /dev/null +++ b/idea/buildLexer.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idea/idea.iml b/idea/idea.iml index 60a321a1ac4..5da9bde713e 100644 --- a/idea/idea.iml +++ b/idea/idea.iml @@ -1,11 +1,12 @@ - + + - + diff --git a/idea/src/org/jetbrains/jet/lang/JetFileFactory.java b/idea/src/org/jetbrains/jet/lang/JetFileFactory.java new file mode 100644 index 00000000000..2f162c1dcb2 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/JetFileFactory.java @@ -0,0 +1,15 @@ +/* + * @author max + */ +package org.jetbrains.jet.lang; + +import com.intellij.openapi.fileTypes.FileTypeConsumer; +import com.intellij.openapi.fileTypes.FileTypeFactory; +import org.jetbrains.annotations.NotNull; + +public class JetFileFactory extends FileTypeFactory { + @Override + public void createFileTypes(@NotNull FileTypeConsumer consumer) { + consumer.consume(JetFileType.INSTANCE, "jet;jetl;jets"); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/JetFileType.java b/idea/src/org/jetbrains/jet/lang/JetFileType.java new file mode 100644 index 00000000000..2865a7fd09a --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/JetFileType.java @@ -0,0 +1,38 @@ +/* + * @author max + */ +package org.jetbrains.jet.lang; + +import com.intellij.lang.Language; +import com.intellij.openapi.fileTypes.LanguageFileType; +import com.intellij.util.Icons; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; + +public class JetFileType extends LanguageFileType { + public static final JetFileType INSTANCE = new JetFileType(); + + private JetFileType() { + super(JetLanguage.INSTANCE); + } + + @NotNull + public String getName() { + return "jet"; + } + + @NotNull + public String getDescription() { + return "Jet Language"; + } + + @NotNull + public String getDefaultExtension() { + return "jet"; + } + + public Icon getIcon() { + return Icons.PROJECT_ICON; + } +} diff --git a/idea/src/org/jetbrains/jet/lang/JetHighlighter.java b/idea/src/org/jetbrains/jet/lang/JetHighlighter.java new file mode 100644 index 00000000000..c884d9ed437 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/JetHighlighter.java @@ -0,0 +1,86 @@ +/* + * @author max + */ +package org.jetbrains.jet.lang; + +import com.intellij.lexer.Lexer; +import com.intellij.openapi.editor.HighlighterColors; +import com.intellij.openapi.editor.SyntaxHighlighterColors; +import com.intellij.openapi.editor.colors.TextAttributesKey; +import com.intellij.openapi.fileTypes.SyntaxHighlighterBase; +import com.intellij.psi.tree.IElementType; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lexer.JetLexer; +import org.jetbrains.jet.lexer.JetTokens; + +import java.util.HashMap; +import java.util.Map; + +public class JetHighlighter extends SyntaxHighlighterBase { + private static final Map keys1; + private static final Map keys2; + + static final TextAttributesKey JET_KEYWORD = TextAttributesKey.createTextAttributesKey( + "JET.KEYWORD", + SyntaxHighlighterColors.KEYWORD.getDefaultAttributes() + ); + + static final TextAttributesKey JET_SOFT_KEYWORD = TextAttributesKey.createTextAttributesKey( + "JET.SOFT.KEYWORD", + SyntaxHighlighterColors.KEYWORD.getDefaultAttributes() + ); + + static final TextAttributesKey JET_NUMBER = TextAttributesKey.createTextAttributesKey( + "JET.NUMBER", + SyntaxHighlighterColors.NUMBER.getDefaultAttributes() + ); + + static final TextAttributesKey JET_STRING = TextAttributesKey.createTextAttributesKey( + "JET.STRING", + SyntaxHighlighterColors.STRING.getDefaultAttributes() + ); + + static final TextAttributesKey JET_COMMENT = TextAttributesKey.createTextAttributesKey( + "JET.COMMENT", + SyntaxHighlighterColors.LINE_COMMENT.getDefaultAttributes() + ); + + static final TextAttributesKey JET_BAD_CHARACTER = TextAttributesKey.createTextAttributesKey( + "JET.BADCHARACTER", + HighlighterColors.BAD_CHARACTER.getDefaultAttributes() + ); + + + + + + + @NotNull + public Lexer getHighlightingLexer() { + return new JetLexer(); + } + + @NotNull + public TextAttributesKey[] getTokenHighlights(IElementType tokenType) { + return pack(keys1.get(tokenType), keys2.get(tokenType)); + } + + static { + keys1 = new HashMap(); + keys2 = new HashMap(); + + + fillMap(keys1, JetTokens.KEYWORDS, JET_KEYWORD); + + keys1.put(JetTokens.INTEGER_LITERAL, JET_NUMBER); + keys1.put(JetTokens.FLOAT_LITERAL, JET_NUMBER); + + keys1.put(JetTokens.STRING_LITERAL, JET_STRING); + 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); + keys1.put(JetTokens.DOC_COMMENT, JET_COMMENT); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/JetLanguage.java b/idea/src/org/jetbrains/jet/lang/JetLanguage.java new file mode 100644 index 00000000000..e91f287972f --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/JetLanguage.java @@ -0,0 +1,26 @@ +/* + * @author max + */ +package org.jetbrains.jet.lang; + +import com.intellij.lang.Language; +import com.intellij.openapi.fileTypes.SingleLazyInstanceSyntaxHighlighterFactory; +import com.intellij.openapi.fileTypes.SyntaxHighlighter; +import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; + +public class JetLanguage extends Language { + public static JetLanguage INSTANCE = new JetLanguage(); + + private JetLanguage() { + super("jet"); + + SyntaxHighlighterFactory.LANGUAGE_FACTORY.addExplicitExtension(this, new SingleLazyInstanceSyntaxHighlighterFactory() { + @NotNull + protected SyntaxHighlighter createHighlighter() { + return new JetHighlighter(); + } + }); + } +} diff --git a/idea/src/org/jetbrains/jet/lexer/Jet.flex b/idea/src/org/jetbrains/jet/lexer/Jet.flex index c6377c9d7b6..8c9bc6d8541 100644 --- a/idea/src/org/jetbrains/jet/lexer/Jet.flex +++ b/idea/src/org/jetbrains/jet/lexer/Jet.flex @@ -5,6 +5,7 @@ import com.intellij.lexer.*; import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; +import org.jetbrains.jet.lexer.JetTokens; %% @@ -19,216 +20,135 @@ import com.intellij.psi.tree.IElementType; DIGIT=[0-9] HEX_DIGIT=[0-9A-Fa-f] WHITE_SPACE_CHAR=[\ \n\t\f] -BINARY_DIGIT=[0-1] IDENTIFIER=[:jletter:] [:jletterdigit:]* -EOL_ESC=\\[\ \t]*\n -NON_EOL=[^\n]|{EOL_ESC} - -BLOCK_COMMENT=("/*" {COMMENT_TAIL})|"/*" +BLOCK_COMMENT=("/*"[^"*"]{COMMENT_TAIL})|"/*" +DOC_COMMENT="/*""*"+("/"|([^"/""*"]{COMMENT_TAIL}))? COMMENT_TAIL=([^"*"]*("*"+[^"*""/"])?)*("*"+"/")? -EOL_COMMENT="/""/"{NON_EOL}* +EOL_COMMENT="/""/"[^\n]* -INTEGER_LITERAL=({DECIMAL_INTEGER_LITERAL}|{HEX_INTEGER_LITERAL}|{BINARY_INTEGER_LITERAL}) +INTEGER_LITERAL={DECIMAL_INTEGER_LITERAL}|{HEX_INTEGER_LITERAL}|{BIN_INTEGER_LITERAL} DECIMAL_INTEGER_LITERAL=(0|([1-9]({DIGIT})*)) HEX_INTEGER_LITERAL=0[Xx]({HEX_DIGIT})* -BINARY_INTEGER_LITERAL=0[Bb]({BINARY_DIGIT})+ +BIN_INTEGER_LITERAL=0[Bb]({DIGIT})* +LONG_LITERAL=({INTEGER_LITERAL})[Ll] FLOAT_LITERAL=(({FLOATING_POINT_LITERAL1})[Ff])|(({FLOATING_POINT_LITERAL2})[Ff])|(({FLOATING_POINT_LITERAL3})[Ff])|(({FLOATING_POINT_LITERAL4})[Ff]) -DOUBLE_LITERAL=(({FLOATING_POINT_LITERAL1})[Ll]?)|(({FLOATING_POINT_LITERAL2})[Ll]?)|(({FLOATING_POINT_LITERAL3})[Ll]?)|(({FLOATING_POINT_LITERAL4})[Ll]) +DOUBLE_LITERAL=(({FLOATING_POINT_LITERAL1})[Dd]?)|(({FLOATING_POINT_LITERAL2})[Dd]?)|(({FLOATING_POINT_LITERAL3})[Dd]?)|(({FLOATING_POINT_LITERAL4})[Dd]) FLOATING_POINT_LITERAL1=({DIGIT})+"."({DIGIT})*({EXPONENT_PART})? FLOATING_POINT_LITERAL2="."({DIGIT})+({EXPONENT_PART})? FLOATING_POINT_LITERAL3=({DIGIT})+({EXPONENT_PART}) FLOATING_POINT_LITERAL4=({DIGIT})+ EXPONENT_PART=[Ee]["+""-"]?({DIGIT})* -HEX_FLOAT_LITERAL={HEX_SIGNIFICANT}{BINARY_EXPONENT}[Ff] -HEX_DOUBLE_LITERAL={HEX_SIGNIFICANT}{BINARY_EXPONENT}[Ll]? +HEX_FLOAT_LITERAL={HEX_SIGNIFICAND}{BINARY_EXPONENT}[Ff] +HEX_DOUBLE_LITERAL={HEX_SIGNIFICAND}{BINARY_EXPONENT}[Dd]? BINARY_EXPONENT=[Pp][+-]?{DIGIT}+ -HEX_SIGNIFICANT={HEX_INTEGER_LITERAL}|{HEX_INTEGER_LITERAL}.|0[Xx]{HEX_DIGIT}*.{HEX_DIGIT}+ +HEX_SIGNIFICAND={HEX_INTEGER_LITERAL}|{HEX_INTEGER_LITERAL}.|0[Xx]{HEX_DIGIT}*.{HEX_DIGIT}+ -CHARACTER_LITERAL=[L]?"'"([^\\\'\n]|{ESCAPE_SEQUENCE})*("'"|\\)? +CHARACTER_LITERAL="'"([^\\\'\n]|{ESCAPE_SEQUENCE})*("'"|\\)? STRING_LITERAL=\"([^\\\"\n]|{ESCAPE_SEQUENCE})*(\"|\\)? -ESCAPE_SEQUENCE=\\[^\n]|{EOL_ESC} +ESCAPE_SEQUENCE=\\[^\n] -NON_EOL_WS=[\ \t]|{EOL_ESC} -PRP=# {NON_EOL_WS}* - -DIRECTIVE_CONTENT=({NON_EOL}|{BLOCK_COMMENT})* - -%state DIRECTIVE +// ANY_ESCAPE_SEQUENCE = \\[^] +THREE_QUO = (\"\"\") +ONE_TWO_QUO = (\"[^\"]) | (\"\"[^\"]) +QUO_STRING_CHAR = [^\"] | {ONE_TWO_QUO} +RAW_STRING_LITERAL = {THREE_QUO} {QUO_STRING_CHAR}* {THREE_QUO}? %% + {BLOCK_COMMENT} { return JetTokens.BLOCK_COMMENT; } + {DOC_COMMENT} { return JetTokens.DOC_COMMENT; } - {BLOCK_COMMENT} { return OCTokenTypes.BLOCK_COMMENT; } + ({WHITE_SPACE_CHAR})+ { return JetTokens.WHITE_SPACE; } - {DIRECTIVE_CONTENT} {return OCTokenTypes.DIRECTIVE_CONTENT; } - ({WHITE_SPACE_CHAR}|{EOL_ESC})+ { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; } + {EOL_COMMENT} { return JetTokens.EOL_COMMENT; } - {EOL_COMMENT} { return OCTokenTypes.EOL_COMMENT; } + {INTEGER_LITERAL} { return JetTokens.INTEGER_LITERAL; } - {INTEGER_LITERAL} { return OCTokenTypes.INTEGER_LITERAL; } + {FLOAT_LITERAL} { return JetTokens.FLOAT_LITERAL; } + {HEX_FLOAT_LITERAL} { return JetTokens.FLOAT_LITERAL; } + {DOUBLE_LITERAL} { return JetTokens.FLOAT_LITERAL; } + {HEX_DOUBLE_LITERAL} { return JetTokens.FLOAT_LITERAL; } - {FLOAT_LITERAL} { return OCTokenTypes.FLOAT_LITERAL; } - {HEX_FLOAT_LITERAL} { return OCTokenTypes.FLOAT_LITERAL; } - {DOUBLE_LITERAL} { return OCTokenTypes.FLOAT_LITERAL; } - {HEX_DOUBLE_LITERAL} { return OCTokenTypes.FLOAT_LITERAL; } + {CHARACTER_LITERAL} { return JetTokens.CHARACTER_LITERAL; } + {STRING_LITERAL} { return JetTokens.STRING_LITERAL; } + {RAW_STRING_LITERAL} { return JetTokens.RAW_STRING_LITERAL; } - {CHARACTER_LITERAL} { return OCTokenTypes.CHARACTER_LITERAL; } - "@" {STRING_LITERAL} { return OCTokenTypes.NSSTRING_LITERAL; } - {STRING_LITERAL} { return OCTokenTypes.STRING_LITERAL; } + "namespace" { return JetTokens.NAMESPACE_KEYWORD ;} + "import" { return JetTokens.IMPORT_KEYWORD ;} + "as" { return JetTokens.AS_KEYWORD ;} + "type" { return JetTokens.TYPE_KEYWORD ;} + "class" { return JetTokens.CLASS_KEYWORD ;} + "this" { return JetTokens.THIS_KEYWORD ;} + "val" { return JetTokens.VAL_KEYWORD ;} + "var" { return JetTokens.VAR_KEYWORD ;} + "fun" { return JetTokens.FUN_KEYWORD ;} + "decomposer" { return JetTokens.DECOMPOSER_KEYWORD ;} + "extension" { return JetTokens.EXTENSION_KEYWORD ;} + "for" { return JetTokens.FOR_KEYWORD ;} + "null" { return JetTokens.NULL_KEYWORD ;} + "typeof" { return JetTokens.TYPEOF_KEYWORD ;} + "new" { return JetTokens.NEW_KEYWORD ;} + "true" { return JetTokens.TRUE_KEYWORD ;} + "false" { return JetTokens.FALSE_KEYWORD ;} + "is" { return JetTokens.IS_KEYWORD ;} + "isnot" { return JetTokens.ISNOT_KEYWORD ;} + "in" { return JetTokens.IN_KEYWORD ;} + "throw" { return JetTokens.THROW_KEYWORD ;} + "return" { return JetTokens.RETURN_KEYWORD ;} + "break" { return JetTokens.BREAK_KEYWORD ;} + "continue" { return JetTokens.CONTINUE_KEYWORD ;} + "object" { return JetTokens.OBJECT_KEYWORD ;} + "if" { return JetTokens.IF_KEYWORD ;} + "else" { return JetTokens.ELSE_KEYWORD ;} + "while" { return JetTokens.WHILE_KEYWORD ;} + "do" { return JetTokens.DO_KEYWORD ;} + "match" { return JetTokens.MATCH_KEYWORD ;} - {PRP} "if" { yybegin(DIRECTIVE); return OCTokenTypes.IF_DIRECTIVE ;} - {PRP} "ifdef" { yybegin(DIRECTIVE); return OCTokenTypes.IFDEF_DIRECTIVE ;} - {PRP} "ifndef" { yybegin(DIRECTIVE); return OCTokenTypes.IFNDEF_DIRECTIVE ;} - {PRP} "elif" { yybegin(DIRECTIVE); return OCTokenTypes.ELIF_DIRECTIVE ;} - {PRP} "else" { yybegin(DIRECTIVE); return OCTokenTypes.ELSE_DIRECTIVE ;} - {PRP} "endif" { yybegin(DIRECTIVE); return OCTokenTypes.ENDIF_DIRECTIVE ;} - {PRP} "include" { yybegin(DIRECTIVE); return OCTokenTypes.INCLUDE_DIRECTIVE;} - {PRP} "include_next" { yybegin(DIRECTIVE); return OCTokenTypes.INCLUDE_NEXT_DIRECTIVE;} - {PRP} "import" { yybegin(DIRECTIVE); return OCTokenTypes.IMPORT_DIRECTIVE ;} - {PRP} "define" { yybegin(DIRECTIVE); return OCTokenTypes.DEFINE_DIRECTIVE ;} - {PRP} "undef" { yybegin(DIRECTIVE); return OCTokenTypes.UNDEF_DIRECTIVE ;} - {PRP} "line" { yybegin(DIRECTIVE); return OCTokenTypes.LINE_DIRECTIVE ;} - {PRP} "error" { yybegin(DIRECTIVE); return OCTokenTypes.ERROR_DIRECTIVE ;} - {PRP} "warning" { yybegin(DIRECTIVE); return OCTokenTypes.WARNING_DIRECTIVE ;} - {PRP} "pragma" { yybegin(DIRECTIVE); return OCTokenTypes.PRAGMA_DIRECTIVE ;} - "#" {IDENTIFIER} { return OCTokenTypes.UNKNOWN_DIRECTIVE; } - "auto" { return OCTokenTypes.AUTO_KEYWORD; } - "break" { return OCTokenTypes.BREAK_KEYWORD; } - "case" { return OCTokenTypes.CASE_KEYWORD; } - "char" { return OCTokenTypes.CHAR_KEYWORD; } - "continue" { return OCTokenTypes.CONTINUE_KEYWORD; } - "default" { return OCTokenTypes.DEFAULT_KEYWORD; } - "do" { return OCTokenTypes.DO_KEYWORD; } - "double" { return OCTokenTypes.DOUBLE_KEYWORD; } - "else" { return OCTokenTypes.ELSE_KEYWORD; } - "enum" { return OCTokenTypes.ENUM_KEYWORD; } - "extern" { return OCTokenTypes.EXTERN_KEYWORD; } - "float" { return OCTokenTypes.FLOAT_KEYWORD; } - "for" { return OCTokenTypes.FOR_KEYWORD; } - "goto" { return OCTokenTypes.GOTO_KEYWORD; } - "if" { return OCTokenTypes.IF_KEYWORD; } + {IDENTIFIER} { return JetTokens.IDENTIFIER; } - "const" { return OCTokenTypes.CONST_KEYWORD; } - "__const" { return OCTokenTypes.CONST_KEYWORD; } - "__const__" { return OCTokenTypes.CONST_KEYWORD; } + "[" { return JetTokens.LBRACKET ; } + "]" { return JetTokens.RBRACKET ; } + "{" { return JetTokens.LBRACE ; } + "}" { return JetTokens.RBRACE ; } + "(" { return JetTokens.LPAR ; } + ")" { return JetTokens.RPAR ; } + "." { return JetTokens.DOT ; } + "++" { return JetTokens.PLUSPLUS ; } + "--" { return JetTokens.MINUSMINUS; } + "*" { return JetTokens.MUL ; } + "+" { return JetTokens.PLUS ; } + "-" { return JetTokens.MINUS ; } + "!" { return JetTokens.EXCL ; } + "/" { return JetTokens.DIV ; } + "%" { return JetTokens.PERC ; } + "<" { return JetTokens.LT ; } + ">" { return JetTokens.GT ; } + "<=" { return JetTokens.LTEQ ; } + ">=" { return JetTokens.GTEQ ; } + "===" { return JetTokens.EQEQEQ ; } + "==" { return JetTokens.EQEQ ; } + "!=" { return JetTokens.EXCLEQ ; } + "&&" { return JetTokens.ANDAND ; } + "||" { return JetTokens.OROR ; } + "?." { return JetTokens.SAFE_ACCESS;} + "?:" { return JetTokens.ELVIS ; } + ".*" { return JetTokens.MAP ; } + ".?" { return JetTokens.FILTER ; } + "?" { return JetTokens.QUEST ; } + ":" { return JetTokens.COLON ; } + ";" { return JetTokens.SEMICOLON ; } + ".." { return JetTokens.RANGE ; } + "=" { return JetTokens.EQ ; } + "*=" { return JetTokens.MULTEQ ; } + "/=" { return JetTokens.DIVEQ ; } + "%=" { return JetTokens.PERCEQ ; } + "+=" { return JetTokens.PLUSEQ ; } + "-=" { return JetTokens.MINUSEQ ; } + "," { return JetTokens.COMMA ; } - "inline" { return OCTokenTypes.INLINE_KEYWORD; } - "__inline" { return OCTokenTypes.INLINE_KEYWORD; } - "__inline__" { return OCTokenTypes.INLINE_KEYWORD; } - - "signed" { return OCTokenTypes.SIGNED_KEYWORD; } - "__signed" { return OCTokenTypes.SIGNED_KEYWORD; } - "__signed__" { return OCTokenTypes.SIGNED_KEYWORD; } - - "volatile" { return OCTokenTypes.VOLATILE_KEYWORD; } - "__volatile" { return OCTokenTypes.VOLATILE_KEYWORD; } - "__volatile__" { return OCTokenTypes.VOLATILE_KEYWORD; } - - "int" { return OCTokenTypes.INT_KEYWORD; } - "long" { return OCTokenTypes.LONG_KEYWORD; } - "register" { return OCTokenTypes.REGISTER_KEYWORD; } - "restrict" { return OCTokenTypes.RESTRICT_KEYWORD; } - "__strong" { return OCTokenTypes.STRONG_KEYWORD; } - "__weak" { return OCTokenTypes.WEAK_KEYWORD; } - "__block" { return OCTokenTypes.BLOCK_KEYWORD; } - "return" { return OCTokenTypes.RETURN_KEYWORD; } - "short" { return OCTokenTypes.SHORT_KEYWORD; } - "sizeof" { return OCTokenTypes.SIZEOF_KEYWORD; } - "__alignof__" { return OCTokenTypes.ALIGNOF_KEYWORD; } - "__typeof__" { return OCTokenTypes.TYPEOF_KEYWORD; } - "static" { return OCTokenTypes.STATIC_KEYWORD; } - "struct" { return OCTokenTypes.STRUCT_KEYWORD; } - "switch" { return OCTokenTypes.SWITCH_KEYWORD; } - "typedef" { return OCTokenTypes.TYPEDEF_KEYWORD; } - "union" { return OCTokenTypes.UNION_KEYWORD; } - "unsigned" { return OCTokenTypes.UNSIGNED_KEYWORD; } - "void" { return OCTokenTypes.VOID_KEYWORD; } - "while" { return OCTokenTypes.WHILE_KEYWORD; } - "_Bool" { return OCTokenTypes._BOOL_KEYWORD; } - "_Complex" { return OCTokenTypes._COMPLEX_KEYWORD; } - "_Imaginary" { return OCTokenTypes._IMAGINARY_KEYWORD; } - "__attribute__" { return OCTokenTypes.__ATTRIBUTE_KEYWORD; } - "__asm" { return OCTokenTypes.__ASM_KEYWORD; } - - "@interface" { return OCTokenTypes.INTERFACE_KEYWORD ; } - "@implementation" { return OCTokenTypes.IMPLEMENTATION_KEYWORD; } - "@protocol" { return OCTokenTypes.PROTOCOL_KEYWORD ; } - "@end" { return OCTokenTypes.END_KEYWORD ; } - "@private" { return OCTokenTypes.PRIVATE_KEYWORD ; } - "@protected" { return OCTokenTypes.PROTECTED_KEYWORD ; } - "@public" { return OCTokenTypes.PUBLIC_KEYWORD ; } - "@package" { return OCTokenTypes.PACKAGE_KEYWORD ; } - "@optional" { return OCTokenTypes.OPTIONAL_KEYWORD ; } - "@required" { return OCTokenTypes.REQUIRED_KEYWORD ; } - "@try" { return OCTokenTypes.TRY_KEYWORD ; } - "@throw" { return OCTokenTypes.THROW_KEYWORD ; } - "@catch" { return OCTokenTypes.CATCH_KEYWORD ; } - "@finally" { return OCTokenTypes.FINALLY_KEYWORD ; } - "@class" { return OCTokenTypes.CLASS_KEYWORD ; } - "@selector" { return OCTokenTypes.SELECTOR_KEYWORD ; } - "@encode" { return OCTokenTypes.ENCODE_KEYWORD ; } - "@synchronized" { return OCTokenTypes.SYNCHRONIZED_KEYWORD ; } - "@property" { return OCTokenTypes.PROPERTY_KEYWORD ; } - "@synthesize" { return OCTokenTypes.SYNTHESIZE_KEYWORD ; } - "@dynamic" { return OCTokenTypes.DYNAMIC_KEYWORD ; } - "@" {IDENTIFIER} { return OCTokenTypes.UNKNOWN_AT_KEYWORD ; } - - {IDENTIFIER} { return OCTokenTypes.IDENTIFIER; } - - "[" { return OCTokenTypes.LBRACKET ; } - "]" { return OCTokenTypes.RBRACKET ; } - "{" { return OCTokenTypes.LBRACE ; } - "}" { return OCTokenTypes.RBRACE ; } - "(" { return OCTokenTypes.LPAR ; } - ")" { return OCTokenTypes.RPAR ; } - "." { return OCTokenTypes.DOT ; } - "->" { return OCTokenTypes.DEREF ; } - "++" { return OCTokenTypes.PLUSPLUS ; } - "--" { return OCTokenTypes.MINUSMINUS; } - "&" { return OCTokenTypes.AND ; } - "*" { return OCTokenTypes.MUL ; } - "+" { return OCTokenTypes.PLUS ; } - "-" { return OCTokenTypes.MINUS ; } - "~" { return OCTokenTypes.TILDE ; } - "!" { return OCTokenTypes.EXCL ; } - "/" { return OCTokenTypes.DIV ; } - "%" { return OCTokenTypes.PERC ; } - "<<" { return OCTokenTypes.LTLT ; } - ">>" { return OCTokenTypes.GTGT ; } - "<" { return OCTokenTypes.LT ; } - ">" { return OCTokenTypes.GT ; } - "<=" { return OCTokenTypes.LTEQ ; } - ">=" { return OCTokenTypes.GTEQ ; } - "==" { return OCTokenTypes.EQEQ ; } - "!=" { return OCTokenTypes.EXCLEQ ; } - "^" { return OCTokenTypes.XOR ; } - "|" { return OCTokenTypes.OR ; } - "&&" { return OCTokenTypes.ANDAND ; } - "||" { return OCTokenTypes.OROR ; } - "?" { return OCTokenTypes.QUEST ; } - ":" { return OCTokenTypes.COLON ; } - ";" { return OCTokenTypes.SEMICOLON ; } - "..." { return OCTokenTypes.ELLIPSIS ; } - "=" { return OCTokenTypes.EQ ; } - "*=" { return OCTokenTypes.MULTEQ ; } - "/=" { return OCTokenTypes.DIVEQ ; } - "%=" { return OCTokenTypes.PERCEQ ; } - "+=" { return OCTokenTypes.PLUSEQ ; } - "-=" { return OCTokenTypes.MINUSEQ ; } - "<<=" { return OCTokenTypes.LTLTEQ ; } - ">>=" { return OCTokenTypes.GTGTEQ ; } - "&=" { return OCTokenTypes.ANDEQ ; } - "^=" { return OCTokenTypes.XOREQ ; } - "|=" { return OCTokenTypes.OREQ ; } - "," { return OCTokenTypes.COMMA ; } - "#" { return OCTokenTypes.HASH ; } - "<#" { return OCTokenTypes.TEMPLATE_START_MARK; } - "#>" { return OCTokenTypes.TEMPLATE_STOP_MARK; } - "##" { return OCTokenTypes.HASHHASH ; } - - . { yybegin(YYINITIAL); return TokenType.BAD_CHARACTER; } + . { return TokenType.BAD_CHARACTER; } diff --git a/idea/src/org/jetbrains/jet/lexer/JetLexer.java b/idea/src/org/jetbrains/jet/lexer/JetLexer.java new file mode 100644 index 00000000000..675a4c556ed --- /dev/null +++ b/idea/src/org/jetbrains/jet/lexer/JetLexer.java @@ -0,0 +1,15 @@ +/* + * @author max + */ +package org.jetbrains.jet.lexer; + +import com.intellij.lexer.FlexAdapter; +import com.intellij.lexer.FlexLexer; + +import java.io.Reader; + +public class JetLexer extends FlexAdapter { + public JetLexer() { + super(new _JetLexer((Reader) null)); + } +} diff --git a/idea/src/org/jetbrains/jet/lexer/JetToken.java b/idea/src/org/jetbrains/jet/lexer/JetToken.java new file mode 100644 index 00000000000..a928a4d8818 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lexer/JetToken.java @@ -0,0 +1,17 @@ +/* + * @author max + */ +package org.jetbrains.jet.lexer; + +import com.intellij.lang.Language; +import com.intellij.psi.tree.IElementType; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.JetLanguage; + +public class JetToken extends IElementType { + public JetToken(@NotNull @NonNls String debugName) { + super(debugName, JetLanguage.INSTANCE); + } +} diff --git a/idea/src/org/jetbrains/jet/lexer/JetTokens.java b/idea/src/org/jetbrains/jet/lexer/JetTokens.java new file mode 100644 index 00000000000..283afeaf663 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lexer/JetTokens.java @@ -0,0 +1,132 @@ +/* + * @author max + */ +package org.jetbrains.jet.lexer; + +import com.intellij.psi.TokenType; +import com.intellij.psi.tree.IElementType; +import com.intellij.psi.tree.TokenSet; +import gnu.trove.THashSet; + +import java.util.Arrays; +import java.util.Set; + +public interface JetTokens { + JetToken BLOCK_COMMENT = new JetToken("BLOCK_COMMENT"); + JetToken DOC_COMMENT = new JetToken("DOC_COMMENT"); + JetToken EOL_COMMENT = new JetToken("EOL_COMMENT"); + + IElementType WHITE_SPACE = TokenType.WHITE_SPACE; + + JetToken INTEGER_LITERAL = new JetToken("INTEGER_LITERAL"); + JetToken FLOAT_LITERAL = new JetToken("FLOAT_LITERAL"); + JetToken CHARACTER_LITERAL = new JetToken("CHARACTER_LITERAL"); + JetToken STRING_LITERAL = new JetToken("STRING_LITERAL"); + JetToken RAW_STRING_LITERAL = new JetToken("RAW_STRING_LITERAL"); + + JetToken NAMESPACE_KEYWORD = new JetToken("NAMESPACE_KEYWORD"); + JetToken IMPORT_KEYWORD = new JetToken("IMPORT_KEYWORD"); + JetToken AS_KEYWORD = new JetToken("AS_KEYWORD"); + JetToken TYPE_KEYWORD = new JetToken("TYPE_KEYWORD"); + JetToken CLASS_KEYWORD = new JetToken("CLASS_KEYWORD"); + JetToken THIS_KEYWORD = new JetToken("THIS_KEYWORD"); + JetToken VAL_KEYWORD = new JetToken("VAL_KEYWORD"); + JetToken VAR_KEYWORD = new JetToken("VAR_KEYWORD"); + JetToken FUN_KEYWORD = new JetToken("FUN_KEYWORD"); + JetToken DECOMPOSER_KEYWORD = new JetToken("DECOMPOSER_KEYWORD"); + JetToken EXTENSION_KEYWORD = new JetToken("EXTENSION_KEYWORD"); + JetToken FOR_KEYWORD = new JetToken("FOR_KEYWORD"); + JetToken NULL_KEYWORD = new JetToken("NULL_KEYWORD"); + JetToken TYPEOF_KEYWORD = new JetToken("TYPEOF_KEYWORD"); + JetToken NEW_KEYWORD = new JetToken("NEW_KEYWORD"); + JetToken TRUE_KEYWORD = new JetToken("TRUE_KEYWORD"); + JetToken FALSE_KEYWORD = new JetToken("FALSE_KEYWORD"); + JetToken IS_KEYWORD = new JetToken("IS_KEYWORD"); + JetToken ISNOT_KEYWORD = new JetToken("ISNOT_KEYWORD"); + JetToken IN_KEYWORD = new JetToken("IN_KEYWORD"); + JetToken THROW_KEYWORD = new JetToken("THROW_KEYWORD"); + JetToken RETURN_KEYWORD = new JetToken("RETURN_KEYWORD"); + JetToken BREAK_KEYWORD = new JetToken("BREAK_KEYWORD"); + JetToken CONTINUE_KEYWORD = new JetToken("CONTINUE_KEYWORD"); + JetToken OBJECT_KEYWORD = new JetToken("OBJECT_KEYWORD"); + JetToken IF_KEYWORD = new JetToken("IF_KEYWORD"); + JetToken ELSE_KEYWORD = new JetToken("ELSE_KEYWORD"); + JetToken WHILE_KEYWORD = new JetToken("WHILE_KEYWORD"); + JetToken DO_KEYWORD = new JetToken("DO_KEYWORD"); + JetToken MATCH_KEYWORD = new JetToken("MATCH_KEYWORD"); + + + JetToken IDENTIFIER = new JetToken("IDENTIFIER"); + + JetToken LBRACKET = new JetToken("LBRACKET"); + JetToken RBRACKET = new JetToken("RBRACKET"); + JetToken LBRACE = new JetToken("LBRACE"); + JetToken RBRACE = new JetToken("RBRACE"); + JetToken LPAR = new JetToken("LPAR"); + JetToken RPAR = new JetToken("RPAR"); + JetToken DOT = new JetToken("DOT"); + JetToken PLUSPLUS = new JetToken("PLUSPLUS"); + JetToken MINUSMINUS = new JetToken("MINUSMINUS"); + JetToken MUL = new JetToken("MUL"); + JetToken PLUS = new JetToken("PLUS"); + JetToken MINUS = new JetToken("MINUS"); + JetToken EXCL = new JetToken("EXCL"); + JetToken DIV = new JetToken("DIV"); + JetToken PERC = new JetToken("PERC"); + JetToken LT = new JetToken("LT"); + JetToken GT = new JetToken("GT"); + JetToken LTEQ = new JetToken("LTEQ"); + JetToken GTEQ = new JetToken("GTEQ"); + JetToken EQEQEQ = new JetToken("EQEQEQ"); + JetToken EQEQ = new JetToken("EQEQ"); + JetToken EXCLEQ = new JetToken("EXCLEQ"); + JetToken ANDAND = new JetToken("ANDAND"); + JetToken OROR = new JetToken("OROR"); + JetToken SAFE_ACCESS = new JetToken("SAFE_ACCESS"); + JetToken ELVIS = new JetToken("ELVIS"); + JetToken MAP = new JetToken("MAP"); + JetToken FILTER = new JetToken("FILTER"); + JetToken QUEST = new JetToken("QUEST"); + JetToken COLON = new JetToken("COLON"); + JetToken SEMICOLON = new JetToken("SEMICOLON"); + JetToken RANGE = new JetToken("RANGE"); + JetToken EQ = new JetToken("EQ"); + JetToken MULTEQ = new JetToken("MULTEQ"); + JetToken DIVEQ = new JetToken("DIVEQ"); + JetToken PERCEQ = new JetToken("PERCEQ"); + JetToken PLUSEQ = new JetToken("PLUSEQ"); + JetToken MINUSEQ = new JetToken("MINUSEQ"); + JetToken COMMA = new JetToken("COMMA"); + + JetToken WRAPS_KEYWORD = new JetToken("wraps"); + JetToken WHERE_KEYWORD = new JetToken("where"); + JetToken BY_KEYWORD = new JetToken("by"); + JetToken LAZY_KEYWORD = new JetToken("lazy"); + JetToken GET_KEYWORD = new JetToken("get"); + JetToken SET_KEYWORD = new JetToken("set"); + JetToken ABSTRACT_KEYWORD = new JetToken("abstract"); + JetToken VIRTUAL_KEYWORD = new JetToken("virtual"); + JetToken ENUM_KEYWORD = new JetToken("enum"); + JetToken OPEN_KEYWORD = new JetToken("open"); + JetToken ATTRIBUTE_KEYWORD = new JetToken("attribute"); + JetToken OVERRIDE_KEYWORD = new JetToken("override"); + JetToken PRIVATE_KEYWORD = new JetToken("private"); + JetToken PUBLIC_KEYWORD = new JetToken("public"); + JetToken INTERNAL_KEYWORD = new JetToken("internal"); + JetToken PROTECTED_KEYWORD = new JetToken("protected"); + JetToken OUT_KEYWORD = new JetToken("out"); + JetToken REF_KEYWORD = new JetToken("ref"); + + TokenSet KEYWORDS = TokenSet.create(NAMESPACE_KEYWORD, IMPORT_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD, + THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, DECOMPOSER_KEYWORD, EXTENSION_KEYWORD, FOR_KEYWORD, + NULL_KEYWORD, TYPEOF_KEYWORD, NEW_KEYWORD, TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, ISNOT_KEYWORD, + IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD, + ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, MATCH_KEYWORD + ); + + TokenSet SOFT_KEYWORDS = TokenSet.create(WRAPS_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, LAZY_KEYWORD, GET_KEYWORD, + SET_KEYWORD, ABSTRACT_KEYWORD, VIRTUAL_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, ATTRIBUTE_KEYWORD, + OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD, OUT_KEYWORD, + REF_KEYWORD + ); +} diff --git a/idea/src/org/jetbrains/jet/lexer/_JetLexer.java b/idea/src/org/jetbrains/jet/lexer/_JetLexer.java new file mode 100644 index 00000000000..7d569480545 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lexer/_JetLexer.java @@ -0,0 +1,1132 @@ +/* The following code was generated by JFlex 1.4.3 on 12/10/10 9:22 PM */ + +/* It's an automatically generated code. Do not modify it. */ +package org.jetbrains.jet.lexer; + +import com.intellij.lexer.*; +import com.intellij.psi.*; +import com.intellij.psi.tree.IElementType; + +import org.jetbrains.jet.lexer.JetTokens; + + +/** + * This class is a scanner generated by + * JFlex 1.4.3 + * on 12/10/10 9:22 PM from the specification file + * /Users/max/Projects/jet/idea/src/org/jetbrains/jet/lexer/Jet.flex + */ +class _JetLexer implements FlexLexer { + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; + + /** lexical states */ + public static final int YYINITIAL = 0; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0 + }; + + /** + * Translates characters to character classes + */ + 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\62"+ + "\1\23\1\0\1\4\1\63\1\67\1\21\1\57\1\60\1\7\1\61"+ + "\1\74\1\17\1\15\1\6\1\11\11\1\1\72\1\73\1\64\1\66"+ + "\1\65\1\71\1\0\1\2\1\13\1\2\1\14\1\16\1\14\5\4"+ + "\1\4\3\4\1\20\7\4\1\12\2\4\1\53\1\22\1\54\1\0"+ + "\1\4\1\0\1\25\1\50\1\32\1\45\1\27\1\43\1\4\1\41"+ + "\1\33\1\52\1\51\1\40\1\26\1\24\1\34\1\31\1\4\1\35"+ + "\1\30\1\36\1\44\1\42\1\47\1\46\1\37\1\4\1\55\1\70"+ + "\1\56\1\0\41\5\2\0\4\4\4\0\1\4\2\0\1\5\7\0"+ + "\1\4\4\0\1\4\5\0\27\4\1\0\37\4\1\0\u013f\4\31\0"+ + "\162\4\4\0\14\4\16\0\5\4\11\0\1\4\21\0\130\5\5\0"+ + "\23\5\12\0\1\4\13\0\1\4\1\0\3\4\1\0\1\4\1\0"+ + "\24\4\1\0\54\4\1\0\46\4\1\0\5\4\4\0\202\4\1\0"+ + "\4\5\3\0\105\4\1\0\46\4\2\0\2\4\6\0\20\4\41\0"+ + "\46\4\2\0\1\4\7\0\47\4\11\0\21\5\1\0\27\5\1\0"+ + "\3\5\1\0\1\5\1\0\2\5\1\0\1\5\13\0\33\4\5\0"+ + "\3\4\15\0\4\5\14\0\6\5\13\0\32\4\5\0\13\4\16\5"+ + "\7\0\12\5\4\0\2\4\1\5\143\4\1\0\1\4\10\5\1\0"+ + "\6\5\2\4\2\5\1\0\4\5\2\4\12\5\3\4\2\0\1\4"+ + "\17\0\1\5\1\4\1\5\36\4\33\5\2\0\3\4\60\0\46\4"+ + "\13\5\1\4\u014f\0\3\5\66\4\2\0\1\5\1\4\20\5\2\0"+ + "\1\4\4\5\3\0\12\4\2\5\2\0\12\5\21\0\3\5\1\0"+ + "\10\4\2\0\2\4\2\0\26\4\1\0\7\4\1\0\1\4\3\0"+ + "\4\4\2\0\1\5\1\4\7\5\2\0\2\5\2\0\3\5\11\0"+ + "\1\5\4\0\2\4\1\0\3\4\2\5\2\0\12\5\4\4\15\0"+ + "\3\5\1\0\6\4\4\0\2\4\2\0\26\4\1\0\7\4\1\0"+ + "\2\4\1\0\2\4\1\0\2\4\2\0\1\5\1\0\5\5\4\0"+ + "\2\5\2\0\3\5\13\0\4\4\1\0\1\4\7\0\14\5\3\4"+ + "\14\0\3\5\1\0\11\4\1\0\3\4\1\0\26\4\1\0\7\4"+ + "\1\0\2\4\1\0\5\4\2\0\1\5\1\4\10\5\1\0\3\5"+ + "\1\0\3\5\2\0\1\4\17\0\2\4\2\5\2\0\12\5\1\0"+ + "\1\4\17\0\3\5\1\0\10\4\2\0\2\4\2\0\26\4\1\0"+ + "\7\4\1\0\2\4\1\0\5\4\2\0\1\5\1\4\6\5\3\0"+ + "\2\5\2\0\3\5\10\0\2\5\4\0\2\4\1\0\3\4\4\0"+ + "\12\5\1\0\1\4\20\0\1\5\1\4\1\0\6\4\3\0\3\4"+ + "\1\0\4\4\3\0\2\4\1\0\1\4\1\0\2\4\3\0\2\4"+ + "\3\0\3\4\3\0\10\4\1\0\3\4\4\0\5\5\3\0\3\5"+ + "\1\0\4\5\11\0\1\5\17\0\11\5\11\0\1\4\7\0\3\5"+ + "\1\0\10\4\1\0\3\4\1\0\27\4\1\0\12\4\1\0\5\4"+ + "\4\0\7\5\1\0\3\5\1\0\4\5\7\0\2\5\11\0\2\4"+ + "\4\0\12\5\22\0\2\5\1\0\10\4\1\0\3\4\1\0\27\4"+ + "\1\0\12\4\1\0\5\4\2\0\1\5\1\4\7\5\1\0\3\5"+ + "\1\0\4\5\7\0\2\5\7\0\1\4\1\0\2\4\4\0\12\5"+ + "\22\0\2\5\1\0\10\4\1\0\3\4\1\0\27\4\1\0\20\4"+ + "\4\0\6\5\2\0\3\5\1\0\4\5\11\0\1\5\10\0\2\4"+ + "\4\0\12\5\22\0\2\5\1\0\22\4\3\0\30\4\1\0\11\4"+ + "\1\0\1\4\2\0\7\4\3\0\1\5\4\0\6\5\1\0\1\5"+ + "\1\0\10\5\22\0\2\5\15\0\60\4\1\5\2\4\7\5\4\0"+ + "\10\4\10\5\1\0\12\5\47\0\2\4\1\0\1\4\2\0\2\4"+ + "\1\0\1\4\2\0\1\4\6\0\4\4\1\0\7\4\1\0\3\4"+ + "\1\0\1\4\1\0\1\4\2\0\2\4\1\0\4\4\1\5\2\4"+ + "\6\5\1\0\2\5\1\4\2\0\5\4\1\0\1\4\1\0\6\5"+ + "\2\0\12\5\2\0\2\4\42\0\1\4\27\0\2\5\6\0\12\5"+ + "\13\0\1\5\1\0\1\5\1\0\1\5\4\0\2\5\10\4\1\0"+ + "\42\4\6\0\24\5\1\0\2\5\4\4\4\0\10\5\1\0\44\5"+ + "\11\0\1\5\71\0\42\4\1\0\5\4\1\0\2\4\1\0\7\5"+ + "\3\0\4\5\6\0\12\5\6\0\6\4\4\5\106\0\46\4\12\0"+ + "\51\4\7\0\132\4\5\0\104\4\5\0\122\4\6\0\7\4\1\0"+ + "\77\4\1\0\1\4\1\0\4\4\2\0\7\4\1\0\1\4\1\0"+ + "\4\4\2\0\47\4\1\0\1\4\1\0\4\4\2\0\37\4\1\0"+ + "\1\4\1\0\4\4\2\0\7\4\1\0\1\4\1\0\4\4\2\0"+ + "\7\4\1\0\7\4\1\0\27\4\1\0\37\4\1\0\1\4\1\0"+ + "\4\4\2\0\7\4\1\0\47\4\1\0\23\4\16\0\11\5\56\0"+ + "\125\4\14\0\u026c\4\2\0\10\4\12\0\32\4\5\0\113\4\3\0"+ + "\3\4\17\0\15\4\1\0\4\4\3\5\13\0\22\4\3\5\13\0"+ + "\22\4\2\5\14\0\15\4\1\0\3\4\1\0\2\5\14\0\64\4"+ + "\40\5\3\0\1\4\3\0\2\4\1\5\2\0\12\5\41\0\3\5"+ + "\2\0\12\5\6\0\130\4\10\0\51\4\1\5\126\0\35\4\3\0"+ + "\14\5\4\0\14\5\12\0\12\5\36\4\2\0\5\4\u038b\0\154\4"+ + "\224\0\234\4\4\0\132\4\6\0\26\4\2\0\6\4\2\0\46\4"+ + "\2\0\6\4\2\0\10\4\1\0\1\4\1\0\1\4\1\0\1\4"+ + "\1\0\37\4\2\0\65\4\1\0\7\4\1\0\1\4\3\0\3\4"+ + "\1\0\7\4\3\0\4\4\2\0\6\4\4\0\15\4\5\0\3\4"+ + "\1\0\7\4\17\0\4\5\32\0\5\5\20\0\2\4\23\0\1\4"+ + "\13\0\4\5\6\0\6\5\1\0\1\4\15\0\1\4\40\0\22\4"+ + "\36\0\15\5\4\0\1\5\3\0\6\5\27\0\1\4\4\0\1\4"+ + "\2\0\12\4\1\0\1\4\3\0\5\4\6\0\1\4\1\0\1\4"+ + "\1\0\1\4\1\0\4\4\1\0\3\4\1\0\7\4\3\0\3\4"+ + "\5\0\5\4\26\0\44\4\u0e81\0\3\4\31\0\11\4\6\5\1\0"+ + "\5\4\2\0\5\4\4\0\126\4\2\0\2\5\2\0\3\4\1\0"+ + "\137\4\5\0\50\4\4\0\136\4\21\0\30\4\70\0\20\4\u0200\0"+ + "\u19b6\4\112\0\u51a6\4\132\0\u048d\4\u0773\0\u2ba4\4\u215c\0\u012e\4\2\0"+ + "\73\4\225\0\7\4\14\0\5\4\5\0\1\4\1\5\12\4\1\0"+ + "\15\4\1\0\5\4\1\0\1\4\1\0\2\4\1\0\2\4\1\0"+ + "\154\4\41\0\u016b\4\22\0\100\4\2\0\66\4\50\0\15\4\3\0"+ + "\20\5\20\0\4\5\17\0\2\4\30\0\3\4\31\0\1\4\6\0"+ + "\5\4\1\0\207\4\2\0\1\5\4\0\1\4\13\0\12\5\7\0"+ + "\32\4\4\0\1\4\1\0\32\4\12\0\132\4\3\0\6\4\2\0"+ + "\6\4\2\0\6\4\2\0\3\4\3\0\2\4\3\0\2\4\22\0"+ + "\3\5\4\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\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\1\20\1\21\1\22\1\23\1\24\1\25"+ + "\1\26\2\1\1\27\1\30\1\31\1\32\3\33\1\34"+ + "\1\35\1\36\1\37\1\0\2\2\1\40\1\41\1\42"+ + "\1\43\1\44\2\11\3\12\3\3\1\45\5\3\1\46"+ + "\1\3\1\47\1\50\12\3\1\51\2\3\1\52\1\53"+ + "\1\54\1\55\1\56\1\57\1\60\1\61\1\62\1\63"+ + "\1\64\1\33\1\35\1\65\2\0\1\12\1\66\1\3"+ + "\1\67\16\3\1\70\1\71\1\3\1\72\1\73\3\3"+ + "\1\74\1\0\2\65\1\0\1\33\2\0\1\3\1\75"+ + "\1\3\1\76\7\3\1\77\1\100\1\101\5\3\1\35"+ + "\1\0\1\33\1\0\1\3\1\102\2\3\1\103\1\3"+ + "\1\104\3\3\1\105\1\106\1\3\1\107\1\110\1\66"+ + "\3\3\1\111\1\112\1\113\1\114\7\3\1\115\1\3"+ + "\1\116\1\117\1\3\1\120"; + + private static int [] zzUnpackAction() { + int [] result = new int[199]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\75\0\172\0\267\0\364\0\u0131\0\u016e\0\u01ab"+ + "\0\u01e8\0\u0225\0\u0262\0\u029f\0\u02dc\0\u0319\0\u0356\0\u0393"+ + "\0\u03d0\0\u040d\0\u044a\0\u0487\0\u04c4\0\u0501\0\u053e\0\u057b"+ + "\0\u05b8\0\u05f5\0\75\0\75\0\75\0\75\0\75\0\75"+ + "\0\u0632\0\u066f\0\u06ac\0\u06e9\0\u0726\0\u0763\0\u07a0\0\u07dd"+ + "\0\u081a\0\75\0\75\0\75\0\75\0\u0857\0\u0894\0\u08d1"+ + "\0\u090e\0\75\0\75\0\u094b\0\u0988\0\u09c5\0\75\0\75"+ + "\0\75\0\75\0\75\0\75\0\u0a02\0\u0a3f\0\u0a7c\0\u0ab9"+ + "\0\u0af6\0\u0b33\0\u0b70\0\267\0\u0bad\0\u0bea\0\u0c27\0\u0c64"+ + "\0\u0ca1\0\267\0\u0cde\0\u0d1b\0\267\0\u0d58\0\u0d95\0\u0dd2"+ + "\0\u0e0f\0\u0e4c\0\u0e89\0\u0ec6\0\u0f03\0\u0f40\0\u0f7d\0\267"+ + "\0\u0fba\0\u0ff7\0\75\0\75\0\75\0\75\0\75\0\75"+ + "\0\u1034\0\75\0\75\0\75\0\75\0\u1071\0\u10ae\0\u10eb"+ + "\0\u1128\0\u1165\0\75\0\u11a2\0\u11df\0\267\0\u121c\0\u1259"+ + "\0\u1296\0\u12d3\0\u1310\0\u134d\0\u138a\0\u13c7\0\u1404\0\u1441"+ + "\0\u147e\0\u14bb\0\u14f8\0\u1535\0\267\0\267\0\u1572\0\267"+ + "\0\267\0\u15af\0\u15ec\0\u1629\0\75\0\u1666\0\u16a3\0\75"+ + "\0\u16e0\0\u171d\0\u175a\0\u1797\0\u17d4\0\267\0\u1811\0\267"+ + "\0\u184e\0\u188b\0\u18c8\0\u1905\0\u1942\0\u197f\0\u19bc\0\267"+ + "\0\u19f9\0\267\0\u1a36\0\u1a73\0\u1ab0\0\u1aed\0\u1b2a\0\75"+ + "\0\u1b67\0\u1128\0\u1ba4\0\u1be1\0\267\0\u1c1e\0\u1c5b\0\267"+ + "\0\u1c98\0\267\0\u1cd5\0\u1d12\0\u1d4f\0\267\0\267\0\u1d8c"+ + "\0\267\0\267\0\75\0\u1dc9\0\u1e06\0\u1e43\0\267\0\267"+ + "\0\267\0\267\0\u1e80\0\u1ebd\0\u1efa\0\u1f37\0\u1f74\0\u1fb1"+ + "\0\u1fee\0\267\0\u202b\0\267\0\267\0\u2068\0\267"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[199]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\2\1\3\1\4\1\5\1\4\1\2\1\6\1\7"+ + "\1\5\1\10\3\4\1\11\1\4\1\12\1\4\1\13"+ + "\1\2\1\14\1\15\1\16\1\17\1\20\2\4\1\21"+ + "\1\22\1\23\1\24\1\25\3\4\1\26\1\27\1\4"+ + "\1\30\1\4\1\31\1\32\2\4\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\76\0"+ + "\1\3\7\0\1\3\2\0\1\55\1\56\1\57\10\0"+ + "\1\57\13\0\1\55\1\0\1\55\30\0\2\4\1\0"+ + "\2\4\3\0\4\4\1\0\1\4\1\0\1\4\3\0"+ + "\27\4\25\0\1\5\4\0\1\5\72\0\1\60\1\61"+ + "\56\0\1\62\74\0\1\63\7\0\1\64\7\0\1\64"+ + "\1\65\1\66\1\55\1\56\1\57\10\0\1\57\13\0"+ + "\1\55\1\0\1\55\1\65\1\0\1\66\25\0\1\56"+ + "\5\0\1\67\1\0\1\56\3\0\1\70\53\0\1\71"+ + "\22\0\1\72\46\0\1\73\6\0\10\13\1\0\10\13"+ + "\1\74\1\75\52\13\10\76\1\0\11\76\1\77\1\100"+ + "\51\76\1\0\2\4\1\0\2\4\3\0\4\4\1\0"+ + "\1\4\1\0\1\4\3\0\1\4\1\101\1\4\1\102"+ + "\14\4\1\103\6\4\23\0\2\4\1\0\2\4\3\0"+ + "\4\4\1\0\1\4\1\0\1\4\3\0\4\4\1\104"+ + "\22\4\23\0\2\4\1\0\2\4\3\0\4\4\1\0"+ + "\1\4\1\0\1\4\3\0\1\4\1\105\25\4\23\0"+ + "\2\4\1\0\2\4\3\0\4\4\1\0\1\4\1\0"+ + "\1\4\3\0\14\4\1\106\5\4\1\107\4\4\23\0"+ + "\2\4\1\0\2\4\3\0\4\4\1\0\1\4\1\0"+ + "\1\4\3\0\10\4\1\110\3\4\1\111\12\4\23\0"+ + "\2\4\1\0\2\4\3\0\4\4\1\0\1\4\1\0"+ + "\1\4\3\0\1\112\1\4\1\113\1\4\1\114\12\4"+ + "\1\115\7\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\24\4\1\116\2\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\3\4\1\117\23\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\11\4\1\120\1\4\1\121\1\4\1\122\11\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\1\4\1\123\25\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\1\4\1\124\6\4\1\125\7\4\1\126\6\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\3\4\1\127\4\4\1\130\16\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\15\4\1\131\11\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\11\4\1\132\15\4\103\0\1\133\4\0\1\134"+ + "\74\0\1\135\74\0\1\136\74\0\1\137\74\0\1\140"+ + "\74\0\1\141\75\0\1\142\75\0\1\143\21\0\1\144"+ + "\54\0\1\145\3\0\1\56\7\0\1\56\2\0\1\55"+ + "\1\0\1\57\10\0\1\57\13\0\1\55\1\0\1\55"+ + "\30\0\1\146\7\0\1\146\2\0\1\55\2\0\1\146"+ + "\23\0\1\55\1\0\1\55\13\0\1\146\13\0\10\60"+ + "\1\0\64\60\7\147\1\150\65\147\1\0\1\64\7\0"+ + "\1\64\2\0\1\55\1\56\1\57\10\0\1\57\13\0"+ + "\1\55\1\0\1\55\27\0\1\151\2\65\5\151\1\0"+ + "\1\65\1\151\2\65\1\151\1\65\1\151\1\152\4\151"+ + "\1\65\1\151\1\65\1\151\1\152\1\65\10\151\1\65"+ + "\1\151\1\65\2\151\1\65\24\151\1\0\1\66\7\0"+ + "\1\66\63\0\10\13\1\0\64\13\10\76\1\0\11\76"+ + "\1\77\1\153\61\76\1\0\64\76\23\0\1\154\52\0"+ + "\2\4\1\0\2\4\3\0\4\4\1\0\1\4\1\0"+ + "\1\4\3\0\2\4\1\155\24\4\23\0\2\4\1\0"+ + "\2\4\3\0\4\4\1\0\1\4\1\0\1\4\3\0"+ + "\23\4\1\156\3\4\23\0\2\4\1\0\2\4\3\0"+ + "\4\4\1\0\1\4\1\0\1\4\3\0\14\4\1\157"+ + "\12\4\23\0\2\4\1\0\2\4\3\0\4\4\1\0"+ + "\1\4\1\0\1\4\3\0\12\4\1\160\14\4\23\0"+ + "\2\4\1\0\2\4\3\0\4\4\1\0\1\4\1\0"+ + "\1\4\3\0\4\4\1\161\22\4\23\0\2\4\1\0"+ + "\2\4\3\0\4\4\1\0\1\4\1\0\1\4\3\0"+ + "\12\4\1\162\14\4\23\0\2\4\1\0\2\4\3\0"+ + "\4\4\1\0\1\4\1\0\1\4\3\0\1\163\26\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\1\4\1\164\25\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\5\4\1\165\21\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\1\166"+ + "\26\4\23\0\2\4\1\0\2\4\3\0\4\4\1\0"+ + "\1\4\1\0\1\4\3\0\26\4\1\167\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\12\4\1\170\14\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\20\4"+ + "\1\171\6\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\5\4\1\172\21\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\7\4\1\173\1\4\1\174\15\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\11\4\1\175\2\4\1\176\12\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\14\4\1\177\12\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\11\4\1\200\15\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\1\201"+ + "\26\4\23\0\2\4\1\0\2\4\3\0\4\4\1\0"+ + "\1\4\1\0\1\4\3\0\6\4\1\202\20\4\23\0"+ + "\2\4\1\0\2\4\3\0\4\4\1\0\1\4\1\0"+ + "\1\4\3\0\7\4\1\203\17\4\23\0\2\4\1\0"+ + "\2\4\3\0\4\4\1\0\1\4\1\0\1\4\3\0"+ + "\3\4\1\204\23\4\110\0\1\205\7\0\1\146\7\0"+ + "\1\146\2\0\1\55\26\0\1\55\1\0\1\55\27\0"+ + "\7\147\1\206\65\147\6\207\1\210\1\150\65\207\1\0"+ + "\2\151\6\0\1\151\1\0\2\151\1\0\1\151\1\0"+ + "\1\211\4\0\1\151\1\0\1\151\1\0\1\211\1\151"+ + "\10\0\1\151\1\0\1\151\2\0\1\151\25\0\1\212"+ + "\1\151\6\0\1\212\1\0\2\151\1\0\1\151\1\213"+ + "\1\211\4\0\1\151\1\0\1\151\1\0\1\211\1\151"+ + "\10\0\1\151\1\0\1\151\2\0\1\151\10\0\1\213"+ + "\13\0\23\154\1\214\51\154\1\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\3\4"+ + "\1\215\23\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\14\4\1\216\12\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\6\4\1\217\20\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\3\4\1\220\23\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\3\4"+ + "\1\221\23\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\12\4\1\222\14\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\4\4\1\223\22\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\10\4\1\224\16\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\10\4"+ + "\1\225\16\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\3\4\1\226\23\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\20\4\1\227\6\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\3\4\1\230\23\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\3\4"+ + "\1\231\23\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\4\4\1\232\22\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\10\4\1\233\16\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\4\4\1\234\22\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\10\4"+ + "\1\235\16\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\14\4\1\236\12\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\1\4\1\237\25\4\22\0\6\147"+ + "\1\240\1\206\65\147\7\207\1\241\65\207\1\0\1\146"+ + "\7\0\1\146\5\0\1\213\41\0\1\213\14\0\1\212"+ + "\1\151\6\0\1\212\1\0\1\151\1\242\1\0\1\151"+ + "\1\0\1\211\4\0\1\151\1\0\1\151\1\0\1\211"+ + "\1\151\10\0\1\242\1\0\1\242\2\0\1\151\25\0"+ + "\1\146\7\0\1\146\63\0\23\154\1\243\51\154\1\0"+ + "\2\4\1\0\2\4\3\0\4\4\1\0\1\4\1\0"+ + "\1\4\3\0\4\4\1\244\22\4\23\0\2\4\1\0"+ + "\2\4\3\0\4\4\1\0\1\4\1\0\1\4\3\0"+ + "\15\4\1\245\11\4\23\0\2\4\1\0\2\4\3\0"+ + "\4\4\1\0\1\4\1\0\1\4\3\0\1\246\26\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\7\4\1\247\17\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\4\4\1\250\22\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\11\4"+ + "\1\251\15\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\12\4\1\252\14\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\6\4\1\253\20\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\11\4\1\254\15\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\10\4"+ + "\1\255\16\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\23\4\1\256\3\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\3\4\1\257\23\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\2\4\1\260\24\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\3\4"+ + "\1\261\23\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\25\4\1\262\1\4"+ + "\22\0\6\207\1\210\1\241\65\207\23\154\1\263\51\154"+ + "\1\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\5\4\1\264\21\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\4\4\1\265\22\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\1\266"+ + "\26\4\23\0\2\4\1\0\2\4\3\0\4\4\1\0"+ + "\1\4\1\0\1\4\3\0\12\4\1\267\14\4\23\0"+ + "\2\4\1\0\2\4\3\0\4\4\1\0\1\4\1\0"+ + "\1\4\3\0\12\4\1\270\14\4\23\0\2\4\1\0"+ + "\2\4\3\0\4\4\1\0\1\4\1\0\1\4\3\0"+ + "\1\271\26\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\17\4\1\272\7\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\5\4\1\273\21\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\1\4\1\274\25\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\4\1\0\1\4\1\0\1\4\3\0\7\4"+ + "\1\275\17\4\23\0\2\4\1\0\2\4\3\0\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\20\4\1\276\6\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\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\4\4\1\0\1\4\1\0\1\4"+ + "\3\0\6\4\1\300\20\4\23\0\2\4\1\0\2\4"+ + "\3\0\4\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\4\4"+ + "\1\0\1\4\1\0\1\4\3\0\3\4\1\302\23\4"+ + "\23\0\2\4\1\0\2\4\3\0\4\4\1\0\1\4"+ + "\1\0\1\4\3\0\4\4\1\303\22\4\23\0\2\4"+ + "\1\0\2\4\3\0\4\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\4\4\1\0\1\4\1\0\1\4\3\0\1\305"+ + "\26\4\23\0\2\4\1\0\2\4\3\0\4\4\1\0"+ + "\1\4\1\0\1\4\3\0\3\4\1\306\23\4\23\0"+ + "\2\4\1\0\2\4\3\0\4\4\1\0\1\4\1\0"+ + "\1\4\3\0\11\4\1\307\15\4\22\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[8357]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + private static final char[] EMPTY_BUFFER = new char[0]; + private static final int YYEOF = -1; + private static java.io.Reader zzReader = null; // Fake + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\1\0\1\11\30\1\6\11\11\1\4\11\4\1\2\11"+ + "\1\0\2\1\6\11\36\1\6\11\1\1\4\11\3\1"+ + "\2\0\1\11\31\1\1\11\1\0\1\1\1\11\1\0"+ + "\1\1\2\0\23\1\1\11\1\0\1\1\1\0\17\1"+ + "\1\11\24\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[199]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private CharSequence zzBuffer = ""; + + /** this buffer may contains the current text array to be matched when it is cheap to acquire it */ + private char[] zzBufferArray; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the textposition at the last state to be included in yytext */ + private int zzPushbackPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; + + + _JetLexer(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + _JetLexer(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 1784) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + public final int getTokenStart(){ + return zzStartRead; + } + + public final int getTokenEnd(){ + return getTokenStart() + yylength(); + } + + public void reset(CharSequence buffer, int start, int end,int initialState){ + zzBuffer = buffer; + zzBufferArray = com.intellij.util.text.CharArrayUtil.fromSequenceWithoutCopying(buffer); + zzCurrentPos = zzMarkedPos = zzStartRead = start; + zzPushbackPos = 0; + zzAtEOF = false; + zzAtBOL = true; + zzEndRead = end; + yybegin(initialState); + } + + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + return true; + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final CharSequence yytext() { + return zzBuffer.subSequence(zzStartRead, zzMarkedPos); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBufferArray != null ? zzBufferArray[zzStartRead+pos]:zzBuffer.charAt(zzStartRead+pos); + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Contains user EOF-code, which will be executed exactly once, + * when the end of file is reached + */ + private void zzDoEOF() { + if (!zzEOFDone) { + zzEOFDone = true; + + } + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public IElementType advance() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + CharSequence zzBufferL = zzBuffer; + char[] zzBufferArrayL = zzBufferArray; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++]:zzBufferL.charAt(zzCurrentPosL++); + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++]:zzBufferL.charAt(zzCurrentPosL++); + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 3: + { return JetTokens.IDENTIFIER; + } + case 81: break; + case 58: + { return JetTokens.FOR_KEYWORD ; + } + case 82: break; + case 75: + { return JetTokens.RETURN_KEYWORD ; + } + case 83: break; + case 61: + { return JetTokens.NULL_KEYWORD ; + } + case 84: break; + case 20: + { return JetTokens.LT ; + } + case 85: break; + case 41: + { return JetTokens.DO_KEYWORD ; + } + case 86: break; + case 17: + { return JetTokens.PLUS ; + } + case 87: break; + case 54: + { return JetTokens.RAW_STRING_LITERAL; + } + case 88: break; + case 43: + { return JetTokens.PLUSEQ ; + } + case 89: break; + case 26: + { return JetTokens.COMMA ; + } + case 90: break; + case 66: + { return JetTokens.MATCH_KEYWORD ; + } + case 91: break; + case 21: + { return JetTokens.GT ; + } + case 92: break; + case 4: + { return JetTokens.WHITE_SPACE; + } + case 93: break; + case 76: + { return JetTokens.TYPEOF_KEYWORD ; + } + case 94: break; + case 16: + { return JetTokens.RPAR ; + } + case 95: break; + case 63: + { return JetTokens.TRUE_KEYWORD ; + } + case 96: break; + case 49: + { return JetTokens.ANDAND ; + } + case 97: break; + case 53: + { return JetTokens.DOC_COMMENT; + } + case 98: break; + case 27: + { return JetTokens.FLOAT_LITERAL; + } + case 99: break; + case 28: + { return JetTokens.EOL_COMMENT; + } + case 100: break; + case 24: + { return JetTokens.COLON ; + } + case 101: break; + case 46: + { return JetTokens.LTEQ ; + } + case 102: break; + case 73: + { return JetTokens.IMPORT_KEYWORD ; + } + case 103: break; + case 11: + { return JetTokens.LBRACKET ; + } + case 104: break; + case 9: + { return JetTokens.CHARACTER_LITERAL; + } + case 105: break; + case 56: + { return JetTokens.VAR_KEYWORD ; + } + case 106: break; + case 47: + { return JetTokens.GTEQ ; + } + case 107: break; + case 2: + { return JetTokens.INTEGER_LITERAL; + } + case 108: break; + case 14: + { return JetTokens.RBRACE ; + } + case 109: break; + case 67: + { return JetTokens.CLASS_KEYWORD ; + } + case 110: break; + case 18: + { return JetTokens.EXCL ; + } + case 111: break; + case 44: + { return JetTokens.EXCLEQ ; + } + case 112: break; + case 36: + { return JetTokens.MINUSEQ ; + } + case 113: break; + case 69: + { return JetTokens.THROW_KEYWORD ; + } + case 114: break; + case 71: + { return JetTokens.WHILE_KEYWORD ; + } + case 115: break; + case 35: + { return JetTokens.MINUSMINUS; + } + case 116: break; + case 77: + { return JetTokens.CONTINUE_KEYWORD ; + } + case 117: break; + case 5: + { return JetTokens.DIV ; + } + case 118: break; + case 52: + { return JetTokens.ELVIS ; + } + case 119: break; + case 23: + { return JetTokens.QUEST ; + } + case 120: break; + case 50: + { return JetTokens.OROR ; + } + case 121: break; + case 19: + { return JetTokens.PERC ; + } + case 122: break; + case 45: + { return JetTokens.PERCEQ ; + } + case 123: break; + case 33: + { return JetTokens.RANGE ; + } + case 124: break; + case 1: + { return TokenType.BAD_CHARACTER; + } + case 125: break; + case 51: + { return JetTokens.SAFE_ACCESS; + } + case 126: break; + case 78: + { return JetTokens.NAMESPACE_KEYWORD ; + } + case 127: break; + case 80: + { return JetTokens.DECOMPOSER_KEYWORD ; + } + case 128: break; + case 6: + { return JetTokens.MUL ; + } + case 129: break; + case 12: + { return JetTokens.RBRACKET ; + } + case 130: break; + case 42: + { return JetTokens.PLUSPLUS ; + } + case 131: break; + case 65: + { return JetTokens.THIS_KEYWORD ; + } + case 132: break; + case 7: + { return JetTokens.DOT ; + } + case 133: break; + case 25: + { return JetTokens.SEMICOLON ; + } + case 134: break; + case 40: + { return JetTokens.IF_KEYWORD ; + } + case 135: break; + case 22: + { return JetTokens.EQ ; + } + case 136: break; + case 15: + { return JetTokens.LPAR ; + } + case 137: break; + case 8: + { return JetTokens.MINUS ; + } + case 138: break; + case 70: + { return JetTokens.FALSE_KEYWORD ; + } + case 139: break; + case 64: + { return JetTokens.TYPE_KEYWORD ; + } + case 140: break; + case 59: + { return JetTokens.FUN_KEYWORD ; + } + case 141: break; + case 39: + { return JetTokens.IS_KEYWORD ; + } + case 142: break; + case 30: + { return JetTokens.DIVEQ ; + } + case 143: break; + case 79: + { return JetTokens.EXTENSION_KEYWORD ; + } + case 144: break; + case 37: + { return JetTokens.AS_KEYWORD ; + } + case 145: break; + case 62: + { return JetTokens.ELSE_KEYWORD ; + } + case 146: break; + case 38: + { return JetTokens.IN_KEYWORD ; + } + case 147: break; + case 48: + { return JetTokens.EQEQ ; + } + case 148: break; + case 57: + { return JetTokens.VAL_KEYWORD ; + } + case 149: break; + case 60: + { return JetTokens.EQEQEQ ; + } + case 150: break; + case 55: + { return JetTokens.NEW_KEYWORD ; + } + case 151: break; + case 31: + { return JetTokens.MULTEQ ; + } + case 152: break; + case 10: + { return JetTokens.STRING_LITERAL; + } + case 153: break; + case 13: + { return JetTokens.LBRACE ; + } + case 154: break; + case 68: + { return JetTokens.ISNOT_KEYWORD ; + } + case 155: break; + case 74: + { return JetTokens.OBJECT_KEYWORD ; + } + case 156: break; + case 72: + { return JetTokens.BREAK_KEYWORD ; + } + case 157: break; + case 29: + { return JetTokens.BLOCK_COMMENT; + } + case 158: break; + case 34: + { return JetTokens.FILTER ; + } + case 159: break; + case 32: + { return JetTokens.MAP ; + } + case 160: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + zzDoEOF(); + return null; + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +}