blob: 21d90886def287c256e5aa44534309a963bdd8bb [file] [log] [blame]
/*
* Copyright 2000-2014 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.
*/
package org.jetbrains.plugins.groovy.lang.lexer;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.containers.Stack;
import org.jetbrains.plugins.groovy.lang.groovydoc.parser.GroovyDocElementTypes;
%%
%class _GroovyLexer
%implements FlexLexer
%unicode
%public
%function advance
%type IElementType
%eof{ return;
%eof}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// User code //////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
%{
private Stack <IElementType> gStringStack = new Stack<IElementType>();
private Stack <IElementType> blockStack = new Stack<IElementType>();
private int afterComment = YYINITIAL;
private void clearStacks(){
gStringStack.clear();
blockStack.clear();
}
private Stack<IElementType> braceCount = new Stack <IElementType>();
%}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////// NewLines and spaces /////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
mONE_NL = \r | \n | \r\n // NewLines
WHITE_SPACE = " " | \t | \f | \\ {mONE_NL} // Whitespaces
mNLS = {mONE_NL}({mONE_NL}|{WHITE_SPACE})*
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////// Comments ////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
C_STYLE_COMMENT=("/*" [^"*"] {COMMENT_TAIL} ) | "/*"
COMMENT_TAIL=( [^"*"]* ("*"+ [^"*""/"] )? )* ("*" | "*"+"/")?
mSH_COMMENT = "#!"[^\r\n]*
mSL_COMMENT = "/""/"[^\r\n]*
mML_COMMENT = {C_STYLE_COMMENT}
mDOC_COMMENT="/*" "*"+ ( "/" | ( [^"/""*"] {COMMENT_TAIL} ) )?
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////// integers and floats /////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
mHEX_DIGIT = [0-9A-Fa-f]
mDIGIT = [0-9]
mBIG_SUFFIX = g | G
mFLOAT_SUFFIX = f | F
mLONG_SUFFIX = l | L
mINT_SUFFIX = i | I
mDOUBLE_SUFFIX = d | D
mEXPONENT = (e | E)("+" | "-")? [0-9] ("_"? [0-9])*
mNUM_BIN = 0 (b | B) [0-1] ("_"* [0-1])*
mNUM_HEX= 0(x | X) {mHEX_DIGIT} ("_"* {mHEX_DIGIT})*
mNUM_OCT = 0[0-7] ("_"* [0-7])*
mNUM_DEC = {mDIGIT} ("_"* {mDIGIT})*
mNUM_INT_PART = {mNUM_BIN} | {mNUM_HEX} | {mNUM_OCT} | {mNUM_DEC}
// Integer
mNUM_INT = {mNUM_INT_PART} {mINT_SUFFIX}?
// Long
mNUM_LONG = {mNUM_INT_PART} {mLONG_SUFFIX}
// BigInteger
mNUM_BIG_INT = {mNUM_INT_PART} {mBIG_SUFFIX}
//Float
mNUM_FLOAT = {mNUM_DEC} ("." {mNUM_DEC})? {mEXPONENT}? {mFLOAT_SUFFIX}
// Double
mNUM_DOUBLE = {mNUM_DEC} ("." {mNUM_DEC})? {mEXPONENT}? {mDOUBLE_SUFFIX}
// BigDecimal
mNUM_BIG_DECIMAL = {mNUM_DEC} (
({mEXPONENT} {mBIG_SUFFIX}?) |
("." {mNUM_DEC} {mEXPONENT}? {mBIG_SUFFIX}?) |
{mBIG_SUFFIX}
)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////// identifiers ////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
mLETTER = [:letter:] | "_"
mIDENT = ({mLETTER}|\$) ({mLETTER} | {mDIGIT} | \$)*
mIDENT_NOBUCKS = {mLETTER} ({mLETTER} | {mDIGIT})*
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////// String & regexprs ///////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
mSTRING_NL = {mONE_NL}
mSTRING_ESC = \\ [^] | \\ ({WHITE_SPACE})+ (\n|\r)
mREGEX_ESC = \\ "/"
| "\\""u"{mHEX_DIGIT}{4}
| "\\" [0..3] ([0..7] ([0..7])?)?
| "\\" [4..7] ([0..7])?
| "\\" ({WHITE_SPACE})* {mONE_NL}
/// Regexes ////////////////////////////////////////////////////////////////
mREGEX_CONTENT = ({mREGEX_ESC} | [^"/""$"])+
mDOLLAR_SLASH_REGEX_CONTENT = ([^\/\$] | \$\$ | \$\/ | \/[^\/\$] )+
////////////////////////////////////////////////////////////////////////////
mSINGLE_QUOTED_STRING_BEGIN = "\'" ( {mSTRING_ESC}
| "\""
| [^\\\'\r\n]
| "$")*
mSINGLE_QUOTED_STRING = {mSINGLE_QUOTED_STRING_BEGIN} \'
mTRIPLE_QUOTED_STRING = "\'\'\'" ({mSTRING_ESC}
| \"
| "$"
| [^\']
| {mSTRING_NL}
| \'(\')?[^\'] )* (\'\'\' | \\)?
mSTRING_LITERAL = {mTRIPLE_QUOTED_STRING}
| {mSINGLE_QUOTED_STRING}
// Single-double-quoted GStrings
mGSTRING_SINGLE_CONTENT = ({mSTRING_ESC}
| [^\\\"\r\n"$"]
| "\'" )+
// Triple-double-quoted GStrings
mGSTRING_TRIPLE_CONTENT = ({mSTRING_ESC}
| \'
| \" (\")? [^\""$"\\]
| [^\\\""$"]
| {mSTRING_NL})+
mGSTRING_TRIPLE_CTOR_END = {mGSTRING_TRIPLE_CONTENT} \"\"\"
mGSTRING_LITERAL = \"\"
| \" ([^\\\"\n\r"$"] | {mSTRING_ESC})? {mGSTRING_SINGLE_CONTENT} \"
| \"\"\" {mGSTRING_TRIPLE_CTOR_END}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////// states ///////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
%xstate IN_SINGLE_GSTRING_DOLLAR
%xstate IN_TRIPLE_GSTRING_DOLLAR
%xstate IN_SINGLE_GSTRING
%xstate IN_TRIPLE_GSTRING
%xstate IN_SINGLE_IDENT
%xstate IN_SINGLE_DOT
%xstate IN_TRIPLE_IDENT
%xstate IN_TRIPLE_DOT
%xstate IN_TRIPLE_NLS
%state IN_INNER_BLOCK
%xstate WAIT_FOR_REGEX
%xstate IN_REGEX_DOLLAR
%xstate IN_REGEX
%xstate IN_REGEX_IDENT
%xstate IN_REGEX_DOT
%xstate IN_DOLLAR_SLASH_REGEX_DOLLAR
%xstate IN_DOLLAR_SLASH_REGEX
%xstate IN_DOLLAR_SLASH_REGEX_IDENT
%xstate IN_DOLLAR_SLASH_REGEX_DOT
// Not to separate NewLine sequence by comments
%xstate NLS_AFTER_COMMENT
// Special hacks for IDEA formatter
%xstate NLS_AFTER_LBRACE
%xstate NLS_AFTER_NLS
%state BRACE_COUNT
%%
<NLS_AFTER_COMMENT>{
{mSL_COMMENT} { return GroovyTokenTypes.mSL_COMMENT; }
{mML_COMMENT} { return GroovyTokenTypes.mML_COMMENT; }
{mDOC_COMMENT} { return GroovyDocElementTypes.GROOVY_DOC_COMMENT; }
({mNLS}|{WHITE_SPACE})+ { return TokenType.WHITE_SPACE; }
[^] { yypushback(1);
yybegin(afterComment); }
}
<NLS_AFTER_LBRACE>{
({mNLS}|{WHITE_SPACE})+ { return TokenType.WHITE_SPACE; }
[^] { yypushback(1);
yybegin(WAIT_FOR_REGEX); }
}
<NLS_AFTER_NLS>{
({mNLS}|{WHITE_SPACE})+ { return TokenType.WHITE_SPACE; }
[^] { yypushback(1);
yybegin(NLS_AFTER_COMMENT); }
}
// Single double-quoted GString
<IN_SINGLE_IDENT>{
{mIDENT_NOBUCKS} { yybegin(IN_SINGLE_DOT);
return GroovyTokenTypes.mIDENT; }
[^] { yypushback(1);
yybegin(IN_SINGLE_GSTRING); }
}
<IN_SINGLE_DOT>{
"." /{mIDENT_NOBUCKS} { yybegin(IN_SINGLE_IDENT);
return GroovyTokenTypes.mDOT; }
[^] { yypushback(1);
yybegin(IN_SINGLE_GSTRING); }
}
<IN_SINGLE_GSTRING_DOLLAR> {
"package" { return ( GroovyTokenTypes.kPACKAGE ); }
"strictfp" { return ( GroovyTokenTypes.kSTRICTFP ); }
"import" { return ( GroovyTokenTypes.kIMPORT ); }
"static" { return ( GroovyTokenTypes.kSTATIC ); }
"def" { return ( GroovyTokenTypes.kDEF ); }
"class" { return ( GroovyTokenTypes.kCLASS ); }
"interface" { return ( GroovyTokenTypes.kINTERFACE ); }
"enum" { return ( GroovyTokenTypes.kENUM ); }
"trait" { return ( GroovyTokenTypes.kTRAIT ); }
"extends" { return ( GroovyTokenTypes.kEXTENDS ); }
"super" { return ( GroovyTokenTypes.kSUPER ); }
"void" { return ( GroovyTokenTypes.kVOID ); }
"boolean" { return ( GroovyTokenTypes.kBOOLEAN ); }
"byte" { return ( GroovyTokenTypes.kBYTE ); }
"char" { return ( GroovyTokenTypes.kCHAR ); }
"short" { return ( GroovyTokenTypes.kSHORT ); }
"int" { return ( GroovyTokenTypes.kINT ); }
"float" { return ( GroovyTokenTypes.kFLOAT ); }
"long" { return ( GroovyTokenTypes.kLONG ); }
"double" { return ( GroovyTokenTypes.kDOUBLE ); }
"as" { return ( GroovyTokenTypes.kAS ); }
"private" { return ( GroovyTokenTypes.kPRIVATE ); }
"abstract" { return ( GroovyTokenTypes.kABSTRACT ); }
"public" { return ( GroovyTokenTypes.kPUBLIC ); }
"protected" { return ( GroovyTokenTypes.kPROTECTED ); }
"transient" { return ( GroovyTokenTypes.kTRANSIENT ); }
"native" { return ( GroovyTokenTypes.kNATIVE ); }
"synchronized" { return ( GroovyTokenTypes.kSYNCHRONIZED ); }
"volatile" { return ( GroovyTokenTypes.kVOLATILE ); }
"default" { return ( GroovyTokenTypes.kDEFAULT ); }
"do" { return ( GroovyTokenTypes.kDO ); }
"throws" { return ( GroovyTokenTypes.kTHROWS ); }
"implements" { return ( GroovyTokenTypes.kIMPLEMENTS ); }
"this" { return ( GroovyTokenTypes.kTHIS ); }
"if" { return ( GroovyTokenTypes.kIF ); }
"else" { return ( GroovyTokenTypes.kELSE ); }
"while" { return ( GroovyTokenTypes.kWHILE ); }
"switch" { return ( GroovyTokenTypes.kSWITCH ); }
"for" { return ( GroovyTokenTypes.kFOR ); }
"in" { return ( GroovyTokenTypes.kIN ); }
"return" { return ( GroovyTokenTypes.kRETURN ); }
"break" { return ( GroovyTokenTypes.kBREAK ); }
"continue" { return ( GroovyTokenTypes.kCONTINUE ); }
"throw" { return ( GroovyTokenTypes.kTHROW ); }
"assert" { return ( GroovyTokenTypes.kASSERT ); }
"case" { return ( GroovyTokenTypes.kCASE ); }
"try" { return ( GroovyTokenTypes.kTRY ); }
"finally" { return ( GroovyTokenTypes.kFINALLY ); }
"catch" { return ( GroovyTokenTypes.kCATCH ); }
"instanceof" { return ( GroovyTokenTypes.kINSTANCEOF ); }
"new" { return ( GroovyTokenTypes.kNEW ); }
"true" { return ( GroovyTokenTypes.kTRUE ); }
"false" { return ( GroovyTokenTypes.kFALSE ); }
"null" { return ( GroovyTokenTypes.kNULL ); }
"final" { return ( GroovyTokenTypes.kFINAL ); }
{mIDENT_NOBUCKS} { yybegin(IN_SINGLE_DOT);
return GroovyTokenTypes.mIDENT; }
"{" { blockStack.push(GroovyTokenTypes.mLPAREN);
braceCount.push(GroovyTokenTypes.mLCURLY);
yybegin(NLS_AFTER_LBRACE);
return GroovyTokenTypes.mLCURLY; }
[^] { yypushback(1);
yybegin(IN_SINGLE_GSTRING); }
}
<IN_SINGLE_GSTRING> {
{mGSTRING_SINGLE_CONTENT} (\\)? { return GroovyTokenTypes.mGSTRING_CONTENT; }
\\ { return GroovyTokenTypes.mGSTRING_CONTENT; }
\" { if (!gStringStack.isEmpty()) {
gStringStack.pop();
}
if (blockStack.isEmpty()){
yybegin(YYINITIAL);
} else {
yybegin(IN_INNER_BLOCK);
}
return GroovyTokenTypes.mGSTRING_END; }
"$" { yybegin(IN_SINGLE_GSTRING_DOLLAR);
return GroovyTokenTypes.mDOLLAR;
}
{mNLS} { clearStacks();
yybegin(NLS_AFTER_NLS);
afterComment = YYINITIAL;
return GroovyTokenTypes.mNLS; }
}
<IN_INNER_BLOCK>{
"{" { blockStack.push(GroovyTokenTypes.mLCURLY);
braceCount.push(GroovyTokenTypes.mLCURLY);
yybegin(NLS_AFTER_LBRACE);
return (GroovyTokenTypes.mLCURLY); }
"}" { if (!blockStack.isEmpty()) {
IElementType br = blockStack.pop();
if (br.equals(GroovyTokenTypes.mLPAREN)) yybegin(IN_SINGLE_GSTRING);
if (br.equals(GroovyTokenTypes.mLBRACK)) yybegin(IN_TRIPLE_GSTRING);
if (br.equals(GroovyTokenTypes.mDIV)) yybegin(IN_REGEX);
if (br.equals(GroovyTokenTypes.mDOLLAR)) yybegin(IN_DOLLAR_SLASH_REGEX);
}
while (!braceCount.isEmpty() && GroovyTokenTypes.mLCURLY != braceCount.peek()) {
braceCount.pop();
}
if (!braceCount.isEmpty() && GroovyTokenTypes.mLCURLY == braceCount.peek()) {
braceCount.pop();
}
return GroovyTokenTypes.mRCURLY; }
}
// Triple double-quoted GString
<IN_TRIPLE_IDENT>{
{mIDENT_NOBUCKS} { yybegin(IN_TRIPLE_DOT);
return GroovyTokenTypes.mIDENT; }
[^] { yypushback(1);
yybegin(IN_TRIPLE_GSTRING); }
}
<IN_TRIPLE_DOT>{
"." /{mIDENT_NOBUCKS} { yybegin(IN_TRIPLE_NLS);
return GroovyTokenTypes.mDOT; }
[^] { yypushback(1);
yybegin(IN_TRIPLE_GSTRING); }
}
<IN_TRIPLE_NLS>{
{mNLS} { yybegin(NLS_AFTER_NLS);
afterComment = IN_TRIPLE_IDENT;
return GroovyTokenTypes.mNLS; }
[^] { yypushback(1);
yybegin(IN_TRIPLE_IDENT); }
}
<IN_TRIPLE_GSTRING_DOLLAR> {
"package" { return ( GroovyTokenTypes.kPACKAGE ); }
"strictfp" { return ( GroovyTokenTypes.kSTRICTFP ); }
"import" { return ( GroovyTokenTypes.kIMPORT ); }
"static" { return ( GroovyTokenTypes.kSTATIC ); }
"def" { return ( GroovyTokenTypes.kDEF ); }
"class" { return ( GroovyTokenTypes.kCLASS ); }
"interface" { return ( GroovyTokenTypes.kINTERFACE ); }
"enum" { return ( GroovyTokenTypes.kENUM ); }
"trait" { return ( GroovyTokenTypes.kTRAIT ); }
"extends" { return ( GroovyTokenTypes.kEXTENDS ); }
"super" { return ( GroovyTokenTypes.kSUPER ); }
"void" { return ( GroovyTokenTypes.kVOID ); }
"boolean" { return ( GroovyTokenTypes.kBOOLEAN ); }
"byte" { return ( GroovyTokenTypes.kBYTE ); }
"char" { return ( GroovyTokenTypes.kCHAR ); }
"short" { return ( GroovyTokenTypes.kSHORT ); }
"int" { return ( GroovyTokenTypes.kINT ); }
"float" { return ( GroovyTokenTypes.kFLOAT ); }
"long" { return ( GroovyTokenTypes.kLONG ); }
"double" { return ( GroovyTokenTypes.kDOUBLE ); }
"as" { return ( GroovyTokenTypes.kAS ); }
"private" { return ( GroovyTokenTypes.kPRIVATE ); }
"abstract" { return ( GroovyTokenTypes.kABSTRACT ); }
"public" { return ( GroovyTokenTypes.kPUBLIC ); }
"protected" { return ( GroovyTokenTypes.kPROTECTED ); }
"transient" { return ( GroovyTokenTypes.kTRANSIENT ); }
"native" { return ( GroovyTokenTypes.kNATIVE ); }
"synchronized" { return ( GroovyTokenTypes.kSYNCHRONIZED ); }
"volatile" { return ( GroovyTokenTypes.kVOLATILE ); }
"default" { return ( GroovyTokenTypes.kDEFAULT ); }
"do" { return ( GroovyTokenTypes.kDO ); }
"throws" { return ( GroovyTokenTypes.kTHROWS ); }
"implements" { return ( GroovyTokenTypes.kIMPLEMENTS ); }
"this" { return ( GroovyTokenTypes.kTHIS ); }
"if" { return ( GroovyTokenTypes.kIF ); }
"else" { return ( GroovyTokenTypes.kELSE ); }
"while" { return ( GroovyTokenTypes.kWHILE ); }
"switch" { return ( GroovyTokenTypes.kSWITCH ); }
"for" { return ( GroovyTokenTypes.kFOR ); }
"in" { return ( GroovyTokenTypes.kIN ); }
"return" { return ( GroovyTokenTypes.kRETURN ); }
"break" { return ( GroovyTokenTypes.kBREAK ); }
"continue" { return ( GroovyTokenTypes.kCONTINUE ); }
"throw" { return ( GroovyTokenTypes.kTHROW ); }
"assert" { return ( GroovyTokenTypes.kASSERT ); }
"case" { return ( GroovyTokenTypes.kCASE ); }
"try" { return ( GroovyTokenTypes.kTRY ); }
"finally" { return ( GroovyTokenTypes.kFINALLY ); }
"catch" { return ( GroovyTokenTypes.kCATCH ); }
"instanceof" { return ( GroovyTokenTypes.kINSTANCEOF ); }
"new" { return ( GroovyTokenTypes.kNEW ); }
"true" { return ( GroovyTokenTypes.kTRUE ); }
"false" { return ( GroovyTokenTypes.kFALSE ); }
"null" { return ( GroovyTokenTypes.kNULL ); }
"final" { return ( GroovyTokenTypes.kFINAL ); }
{mIDENT_NOBUCKS} { yybegin(IN_TRIPLE_DOT);
return GroovyTokenTypes.mIDENT; }
"{" { blockStack.push(GroovyTokenTypes.mLBRACK);
braceCount.push(GroovyTokenTypes.mLCURLY);
yybegin(NLS_AFTER_LBRACE);
return GroovyTokenTypes.mLCURLY; }
[^] { yypushback(1);
yybegin(IN_TRIPLE_GSTRING); }
}
<IN_TRIPLE_GSTRING> {
{mGSTRING_TRIPLE_CONTENT} /(\"\"\")? { return GroovyTokenTypes.mGSTRING_CONTENT; }
{mGSTRING_TRIPLE_CONTENT}?
(\" (\")? | \\) { return GroovyTokenTypes.mGSTRING_CONTENT; }
"$" { yybegin(IN_TRIPLE_GSTRING_DOLLAR);
return GroovyTokenTypes.mDOLLAR;}
\"\"\" { if (!gStringStack.isEmpty()){
gStringStack.pop();
}
if (blockStack.isEmpty()){
yybegin(YYINITIAL);
} else {
yybegin(IN_INNER_BLOCK);
}
return GroovyTokenTypes.mGSTRING_END; }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////// regexes //////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
<WAIT_FOR_REGEX> {
{WHITE_SPACE} { afterComment = YYINITIAL;
return (TokenType.WHITE_SPACE); }
{mSL_COMMENT} { return GroovyTokenTypes.mSL_COMMENT; }
{mML_COMMENT} { return GroovyTokenTypes.mML_COMMENT; }
{mDOC_COMMENT} { return GroovyDocElementTypes.GROOVY_DOC_COMMENT; }
"/" { yybegin(IN_REGEX);
gStringStack.push(GroovyTokenTypes.mDIV);
return GroovyTokenTypes.mREGEX_BEGIN; }
"$""/" { yybegin(IN_DOLLAR_SLASH_REGEX);
gStringStack.push(GroovyTokenTypes.mDOLLAR);
return GroovyTokenTypes.mDOLLAR_SLASH_REGEX_BEGIN; }
[^] { yypushback(1);
if (blockStack.isEmpty()){
yybegin(YYINITIAL);
} else {
yybegin(IN_INNER_BLOCK);
}
}
}
<IN_REGEX> {
"/" { if (!gStringStack.isEmpty()) {
gStringStack.pop();
}
if (blockStack.isEmpty()){
yybegin(YYINITIAL);
} else {
yybegin(IN_INNER_BLOCK);
}
return GroovyTokenTypes.mREGEX_END; }
{mREGEX_CONTENT}? "$"
/[^"{"[:letter:]"_"] { return GroovyTokenTypes.mREGEX_CONTENT; }
{mREGEX_CONTENT} { return GroovyTokenTypes.mREGEX_CONTENT; }
"$" { yybegin(IN_REGEX_DOLLAR);
return GroovyTokenTypes.mDOLLAR;}
}
<IN_REGEX_DOLLAR> {
"package" { return ( GroovyTokenTypes.kPACKAGE ); }
"strictfp" { return ( GroovyTokenTypes.kSTRICTFP ); }
"import" { return ( GroovyTokenTypes.kIMPORT ); }
"static" { return ( GroovyTokenTypes.kSTATIC ); }
"def" { return ( GroovyTokenTypes.kDEF ); }
"class" { return ( GroovyTokenTypes.kCLASS ); }
"interface" { return ( GroovyTokenTypes.kINTERFACE ); }
"enum" { return ( GroovyTokenTypes.kENUM ); }
"trait" { return ( GroovyTokenTypes.kTRAIT ); }
"extends" { return ( GroovyTokenTypes.kEXTENDS ); }
"super" { return ( GroovyTokenTypes.kSUPER ); }
"void" { return ( GroovyTokenTypes.kVOID ); }
"boolean" { return ( GroovyTokenTypes.kBOOLEAN ); }
"byte" { return ( GroovyTokenTypes.kBYTE ); }
"char" { return ( GroovyTokenTypes.kCHAR ); }
"short" { return ( GroovyTokenTypes.kSHORT ); }
"int" { return ( GroovyTokenTypes.kINT ); }
"float" { return ( GroovyTokenTypes.kFLOAT ); }
"long" { return ( GroovyTokenTypes.kLONG ); }
"double" { return ( GroovyTokenTypes.kDOUBLE ); }
"as" { return ( GroovyTokenTypes.kAS ); }
"private" { return ( GroovyTokenTypes.kPRIVATE ); }
"abstract" { return ( GroovyTokenTypes.kABSTRACT ); }
"public" { return ( GroovyTokenTypes.kPUBLIC ); }
"protected" { return ( GroovyTokenTypes.kPROTECTED ); }
"transient" { return ( GroovyTokenTypes.kTRANSIENT ); }
"native" { return ( GroovyTokenTypes.kNATIVE ); }
"synchronized" { return ( GroovyTokenTypes.kSYNCHRONIZED ); }
"volatile" { return ( GroovyTokenTypes.kVOLATILE ); }
"default" { return ( GroovyTokenTypes.kDEFAULT ); }
"do" { return ( GroovyTokenTypes.kDO ); }
"throws" { return ( GroovyTokenTypes.kTHROWS ); }
"implements" { return ( GroovyTokenTypes.kIMPLEMENTS ); }
"this" { return ( GroovyTokenTypes.kTHIS ); }
"if" { return ( GroovyTokenTypes.kIF ); }
"else" { return ( GroovyTokenTypes.kELSE ); }
"while" { return ( GroovyTokenTypes.kWHILE ); }
"switch" { return ( GroovyTokenTypes.kSWITCH ); }
"for" { return ( GroovyTokenTypes.kFOR ); }
"in" { return ( GroovyTokenTypes.kIN ); }
"return" { return ( GroovyTokenTypes.kRETURN ); }
"break" { return ( GroovyTokenTypes.kBREAK ); }
"continue" { return ( GroovyTokenTypes.kCONTINUE ); }
"throw" { return ( GroovyTokenTypes.kTHROW ); }
"assert" { return ( GroovyTokenTypes.kASSERT ); }
"case" { return ( GroovyTokenTypes.kCASE ); }
"try" { return ( GroovyTokenTypes.kTRY ); }
"finally" { return ( GroovyTokenTypes.kFINALLY ); }
"catch" { return ( GroovyTokenTypes.kCATCH ); }
"instanceof" { return ( GroovyTokenTypes.kINSTANCEOF ); }
"new" { return ( GroovyTokenTypes.kNEW ); }
"true" { return ( GroovyTokenTypes.kTRUE ); }
"false" { return ( GroovyTokenTypes.kFALSE ); }
"null" { return ( GroovyTokenTypes.kNULL ); }
"final" { return ( GroovyTokenTypes.kFINAL ); }
{mIDENT_NOBUCKS} { yybegin(IN_REGEX_DOT);
return GroovyTokenTypes.mIDENT; }
"{" { blockStack.push(GroovyTokenTypes.mDIV);
braceCount.push(GroovyTokenTypes.mLCURLY);
yybegin(NLS_AFTER_LBRACE);
return GroovyTokenTypes.mLCURLY; }
[^] { yypushback(1);
yybegin(IN_REGEX); }
}
<IN_REGEX_DOT>{
"." /{mIDENT_NOBUCKS} { yybegin(IN_REGEX_IDENT);
return GroovyTokenTypes.mDOT; }
[^] { yypushback(1);
yybegin(IN_REGEX); }
}
<IN_REGEX_IDENT>{
{mIDENT_NOBUCKS} { yybegin(IN_REGEX_DOT);
return GroovyTokenTypes.mIDENT; }
[^] { yypushback(1);
yybegin(IN_REGEX); }
}
<IN_DOLLAR_SLASH_REGEX> {
"/""$" { if (!gStringStack.isEmpty()) {
gStringStack.pop();
}
if (blockStack.isEmpty()){
yybegin(YYINITIAL);
} else {
yybegin(IN_INNER_BLOCK);
}
return GroovyTokenTypes.mDOLLAR_SLASH_REGEX_END; }
{mDOLLAR_SLASH_REGEX_CONTENT}? "$"
/[^"{"[:letter:]"_"] { return GroovyTokenTypes.mDOLLAR_SLASH_REGEX_CONTENT; }
"/" { return GroovyTokenTypes.mDOLLAR_SLASH_REGEX_CONTENT; }
{mDOLLAR_SLASH_REGEX_CONTENT} { return GroovyTokenTypes.mDOLLAR_SLASH_REGEX_CONTENT; }
"$" { yybegin(IN_DOLLAR_SLASH_REGEX_DOLLAR);
return GroovyTokenTypes.mDOLLAR;}
}
<IN_DOLLAR_SLASH_REGEX_DOLLAR> {
"package" { return ( GroovyTokenTypes.kPACKAGE ); }
"strictfp" { return ( GroovyTokenTypes.kSTRICTFP ); }
"import" { return ( GroovyTokenTypes.kIMPORT ); }
"static" { return ( GroovyTokenTypes.kSTATIC ); }
"def" { return ( GroovyTokenTypes.kDEF ); }
"class" { return ( GroovyTokenTypes.kCLASS ); }
"interface" { return ( GroovyTokenTypes.kINTERFACE ); }
"enum" { return ( GroovyTokenTypes.kENUM ); }
"trait" { return ( GroovyTokenTypes.kTRAIT ); }
"extends" { return ( GroovyTokenTypes.kEXTENDS ); }
"super" { return ( GroovyTokenTypes.kSUPER ); }
"void" { return ( GroovyTokenTypes.kVOID ); }
"boolean" { return ( GroovyTokenTypes.kBOOLEAN ); }
"byte" { return ( GroovyTokenTypes.kBYTE ); }
"char" { return ( GroovyTokenTypes.kCHAR ); }
"short" { return ( GroovyTokenTypes.kSHORT ); }
"int" { return ( GroovyTokenTypes.kINT ); }
"float" { return ( GroovyTokenTypes.kFLOAT ); }
"long" { return ( GroovyTokenTypes.kLONG ); }
"double" { return ( GroovyTokenTypes.kDOUBLE ); }
"as" { return ( GroovyTokenTypes.kAS ); }
"private" { return ( GroovyTokenTypes.kPRIVATE ); }
"abstract" { return ( GroovyTokenTypes.kABSTRACT ); }
"public" { return ( GroovyTokenTypes.kPUBLIC ); }
"protected" { return ( GroovyTokenTypes.kPROTECTED ); }
"transient" { return ( GroovyTokenTypes.kTRANSIENT ); }
"native" { return ( GroovyTokenTypes.kNATIVE ); }
"synchronized" { return ( GroovyTokenTypes.kSYNCHRONIZED ); }
"volatile" { return ( GroovyTokenTypes.kVOLATILE ); }
"default" { return ( GroovyTokenTypes.kDEFAULT ); }
"do" { return ( GroovyTokenTypes.kDO ); }
"throws" { return ( GroovyTokenTypes.kTHROWS ); }
"implements" { return ( GroovyTokenTypes.kIMPLEMENTS ); }
"this" { return ( GroovyTokenTypes.kTHIS ); }
"if" { return ( GroovyTokenTypes.kIF ); }
"else" { return ( GroovyTokenTypes.kELSE ); }
"while" { return ( GroovyTokenTypes.kWHILE ); }
"switch" { return ( GroovyTokenTypes.kSWITCH ); }
"for" { return ( GroovyTokenTypes.kFOR ); }
"in" { return ( GroovyTokenTypes.kIN ); }
"return" { return ( GroovyTokenTypes.kRETURN ); }
"break" { return ( GroovyTokenTypes.kBREAK ); }
"continue" { return ( GroovyTokenTypes.kCONTINUE ); }
"throw" { return ( GroovyTokenTypes.kTHROW ); }
"assert" { return ( GroovyTokenTypes.kASSERT ); }
"case" { return ( GroovyTokenTypes.kCASE ); }
"try" { return ( GroovyTokenTypes.kTRY ); }
"finally" { return ( GroovyTokenTypes.kFINALLY ); }
"catch" { return ( GroovyTokenTypes.kCATCH ); }
"instanceof" { return ( GroovyTokenTypes.kINSTANCEOF ); }
"new" { return ( GroovyTokenTypes.kNEW ); }
"true" { return ( GroovyTokenTypes.kTRUE ); }
"false" { return ( GroovyTokenTypes.kFALSE ); }
"null" { return ( GroovyTokenTypes.kNULL ); }
"final" { return ( GroovyTokenTypes.kFINAL ); }
{mIDENT_NOBUCKS} { yybegin(IN_DOLLAR_SLASH_REGEX_DOT);
return GroovyTokenTypes.mIDENT; }
"{" { blockStack.push(GroovyTokenTypes.mDOLLAR);
braceCount.push(GroovyTokenTypes.mLCURLY);
yybegin(NLS_AFTER_LBRACE);
return GroovyTokenTypes.mLCURLY; }
[^] { yypushback(1);
yybegin(IN_DOLLAR_SLASH_REGEX); }
}
<IN_DOLLAR_SLASH_REGEX_DOT>{
"." /{mIDENT_NOBUCKS} { yybegin(IN_DOLLAR_SLASH_REGEX_IDENT);
return GroovyTokenTypes.mDOT; }
[^] { yypushback(1);
yybegin(IN_DOLLAR_SLASH_REGEX); }
}
<IN_DOLLAR_SLASH_REGEX_IDENT>{
{mIDENT_NOBUCKS} { yybegin(IN_DOLLAR_SLASH_REGEX_DOT);
return GroovyTokenTypes.mIDENT; }
[^] { yypushback(1);
yybegin(IN_DOLLAR_SLASH_REGEX); }
}
<YYINITIAL> {
"}" {
while (!braceCount.isEmpty() && GroovyTokenTypes.mLCURLY != braceCount.peek()) {
braceCount.pop();
}
if (!braceCount.isEmpty() && GroovyTokenTypes.mLCURLY == braceCount.peek()) {
braceCount.pop();
}
return GroovyTokenTypes.mRCURLY; }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// White spaces & NewLines //////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{WHITE_SPACE} { return TokenType.WHITE_SPACE; }
{mNLS} { yybegin(NLS_AFTER_NLS);
afterComment = WAIT_FOR_REGEX;
return !braceCount.isEmpty() &&
GroovyTokenTypes.mLPAREN == braceCount.peek() ? TokenType.WHITE_SPACE : GroovyTokenTypes.mNLS; }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////Comments //////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{mSH_COMMENT} { return GroovyTokenTypes.mSH_COMMENT; }
{mSL_COMMENT} { return GroovyTokenTypes.mSL_COMMENT; }
{mML_COMMENT} { return GroovyTokenTypes.mML_COMMENT; }
{mDOC_COMMENT} { return GroovyDocElementTypes.GROOVY_DOC_COMMENT; }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// Integers and floats //////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{mNUM_INT} { return GroovyTokenTypes.mNUM_INT; }
{mNUM_BIG_INT} { return GroovyTokenTypes.mNUM_BIG_INT; }
{mNUM_BIG_DECIMAL} { return GroovyTokenTypes.mNUM_BIG_DECIMAL; }
{mNUM_FLOAT} { return GroovyTokenTypes.mNUM_FLOAT; }
{mNUM_DOUBLE} { return GroovyTokenTypes.mNUM_DOUBLE; }
{mNUM_LONG} { return GroovyTokenTypes.mNUM_LONG; }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// Strings & regular expressions ////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Java strings
{mSTRING_LITERAL} { return GroovyTokenTypes.mSTRING_LITERAL; }
{mSINGLE_QUOTED_STRING_BEGIN} { return GroovyTokenTypes.mSTRING_LITERAL; }
// GStrings
\"\"\" { yybegin(IN_TRIPLE_GSTRING);
gStringStack.push(GroovyTokenTypes.mLBRACK);
return GroovyTokenTypes.mGSTRING_BEGIN; }
\" { yybegin(IN_SINGLE_GSTRING);
gStringStack.push(GroovyTokenTypes.mLPAREN);
return GroovyTokenTypes.mGSTRING_BEGIN; }
{mGSTRING_LITERAL} { return GroovyTokenTypes.mGSTRING_LITERAL; }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// keywords /////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
"package" { return ( GroovyTokenTypes.kPACKAGE ); }
"strictfp" { return ( GroovyTokenTypes.kSTRICTFP ); }
"import" { return ( GroovyTokenTypes.kIMPORT ); }
"static" { return ( GroovyTokenTypes.kSTATIC ); }
"def" { return ( GroovyTokenTypes.kDEF ); }
"class" { return ( GroovyTokenTypes.kCLASS ); }
"interface" { return ( GroovyTokenTypes.kINTERFACE ); }
"enum" { return ( GroovyTokenTypes.kENUM ); }
"trait" { return ( GroovyTokenTypes.kTRAIT ); }
"extends" { return ( GroovyTokenTypes.kEXTENDS ); }
"super" { return ( GroovyTokenTypes.kSUPER ); }
"void" { return ( GroovyTokenTypes.kVOID ); }
"boolean" { return ( GroovyTokenTypes.kBOOLEAN ); }
"byte" { return ( GroovyTokenTypes.kBYTE ); }
"char" { return ( GroovyTokenTypes.kCHAR ); }
"short" { return ( GroovyTokenTypes.kSHORT ); }
"int" { return ( GroovyTokenTypes.kINT ); }
"float" { return ( GroovyTokenTypes.kFLOAT ); }
"long" { return ( GroovyTokenTypes.kLONG ); }
"double" { return ( GroovyTokenTypes.kDOUBLE ); }
"as" { return ( GroovyTokenTypes.kAS ); }
"private" { return ( GroovyTokenTypes.kPRIVATE ); }
"abstract" { return ( GroovyTokenTypes.kABSTRACT ); }
"public" { return ( GroovyTokenTypes.kPUBLIC ); }
"protected" { return ( GroovyTokenTypes.kPROTECTED ); }
"transient" { return ( GroovyTokenTypes.kTRANSIENT ); }
"native" { return ( GroovyTokenTypes.kNATIVE ); }
"synchronized" { return ( GroovyTokenTypes.kSYNCHRONIZED ); }
"volatile" { return ( GroovyTokenTypes.kVOLATILE ); }
"default" { return ( GroovyTokenTypes.kDEFAULT ); }
"do" { return ( GroovyTokenTypes.kDO ); }
"throws" { return ( GroovyTokenTypes.kTHROWS ); }
"implements" { return ( GroovyTokenTypes.kIMPLEMENTS ); }
"this" { return ( GroovyTokenTypes.kTHIS ); }
"if" { return ( GroovyTokenTypes.kIF ); }
"else" { return ( GroovyTokenTypes.kELSE ); }
"while" { return ( GroovyTokenTypes.kWHILE ); }
"switch" { return ( GroovyTokenTypes.kSWITCH ); }
"for" { return ( GroovyTokenTypes.kFOR ); }
"in" { return ( GroovyTokenTypes.kIN ); }
"return" { return ( GroovyTokenTypes.kRETURN ); }
"break" { return ( GroovyTokenTypes.kBREAK ); }
"continue" { return ( GroovyTokenTypes.kCONTINUE ); }
"throw" { return ( GroovyTokenTypes.kTHROW ); }
"assert" { return ( GroovyTokenTypes.kASSERT ); }
"case" { return ( GroovyTokenTypes.kCASE ); }
"try" { return ( GroovyTokenTypes.kTRY ); }
"finally" { return ( GroovyTokenTypes.kFINALLY ); }
"catch" { return ( GroovyTokenTypes.kCATCH ); }
"instanceof" { return ( GroovyTokenTypes.kINSTANCEOF ); }
"new" { return ( GroovyTokenTypes.kNEW ); }
"true" { return ( GroovyTokenTypes.kTRUE ); }
"false" { return ( GroovyTokenTypes.kFALSE ); }
"null" { return ( GroovyTokenTypes.kNULL ); }
"final" { return ( GroovyTokenTypes.kFINAL ); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////// identifiers ////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{mIDENT} { return GroovyTokenTypes.mIDENT; }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// Reserved shorthands //////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
"?" { yybegin(WAIT_FOR_REGEX);
return(GroovyTokenTypes.mQUESTION); }
"/" { if (zzStartRead == 0 ||
zzBuffer.subSequence(0, zzStartRead).toString().trim().length() == 0) {
yypushback(1);
yybegin(WAIT_FOR_REGEX);
} else {
return(GroovyTokenTypes.mDIV);
}
}
"$""/" { if (zzStartRead == 0 ||
zzBuffer.subSequence(0, zzStartRead).toString().trim().length() == 0) {
yypushback(2);
yybegin(WAIT_FOR_REGEX);
} else {
yypushback(1);
return (GroovyTokenTypes.mDOLLAR);
}
}
"/=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mDIV_ASSIGN); }
"(" { yybegin(WAIT_FOR_REGEX);
braceCount.push(GroovyTokenTypes.mLPAREN);
return (GroovyTokenTypes.mLPAREN); }
")" { if (!braceCount.isEmpty() && GroovyTokenTypes.mLPAREN == braceCount.peek()) {
braceCount.pop();
}
return (GroovyTokenTypes.mRPAREN); }
"[" { yybegin(WAIT_FOR_REGEX);
braceCount.push(GroovyTokenTypes.mLPAREN);
return (GroovyTokenTypes.mLBRACK); }
"]" { if (!braceCount.isEmpty() && GroovyTokenTypes.mLPAREN == braceCount.peek()) {
braceCount.pop();
}
return (GroovyTokenTypes.mRBRACK); }
"{" { yybegin(NLS_AFTER_LBRACE);
braceCount.push(GroovyTokenTypes.mLCURLY);
return (GroovyTokenTypes.mLCURLY); }
":" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mCOLON); }
"," { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mCOMMA); }
"." { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mDOT); }
"=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mASSIGN); }
"<=>" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mCOMPARE_TO); }
"=="|"===" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mEQUAL); }
"!" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mLNOT); }
"~" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mBNOT); }
"!="|"!==" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mNOT_EQUAL); }
"+" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mPLUS); }
"+=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mPLUS_ASSIGN); }
"++" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mINC); }
"-" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mMINUS); }
"-=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mMINUS_ASSIGN); }
"--" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mDEC); }
"*" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mSTAR); }
"*=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mSTAR_ASSIGN); }
"%" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mMOD); }
"%=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mMOD_ASSIGN); }
">>=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mSR_ASSIGN); }
">>>=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mBSR_ASSIGN); }
">=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mGE); }
">" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mGT); }
"<<=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mSL_ASSIGN); }
"<=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mLE); }
"?:" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mELVIS); }
"<" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mLT); }
"^" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mBXOR); }
"^=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mBXOR_ASSIGN); }
"|" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mBOR); }
"|=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mBOR_ASSIGN); }
"||" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mLOR); }
"&" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mBAND); }
"&=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mBAND_ASSIGN); }
"&&" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mLAND); }
";" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mSEMI); }
"$" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mDOLLAR); }
".." { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mRANGE_INCLUSIVE); }
"..<" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mRANGE_EXCLUSIVE); }
"..." { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mTRIPLE_DOT); }
"*." { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mSPREAD_DOT); }
"?." { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mOPTIONAL_DOT); }
".&" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mMEMBER_POINTER); }
"=~" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mREGEX_FIND); }
"==~" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mREGEX_MATCH); }
"**" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mSTAR_STAR); }
"**=" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mSTAR_STAR_ASSIGN); }
"->" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mCLOSABLE_BLOCK_OP); }
"@" { yybegin(WAIT_FOR_REGEX);
return (GroovyTokenTypes.mAT); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////// Other ////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Unknown symbol is using for debug goals.
. { return GroovyTokenTypes.mWRONG; }