blob: 9c1531ff7743e68069e1f5f5b8d1dc131bd5f292 [file] [log] [blame]
package com.android.tools.idea.lang.databinding;
import com.intellij.lexer.*;
import com.intellij.psi.tree.IElementType;
import static com.android.tools.idea.lang.databinding.psi.DbTokenTypes.*;
@SuppressWarnings("ALL")
%%
%{
public _DbLexer() {
this((java.io.Reader)null);
}
%}
%public
%class _DbLexer
%implements FlexLexer
%function advance
%type IElementType
%unicode
EOL="\r"|"\n"|"\r\n"
LINE_WS=[\ \t\f]
WHITE_SPACE=({LINE_WS}|{EOL})+
// These tokens have been copied from intelliJ's java lexer.
IDENTIFIER=[:jletter:] [:jletterdigit:]*
DIGIT = [0-9]
DIGIT_OR_UNDERSCORE = [_0-9]
DIGITS = {DIGIT} | {DIGIT} {DIGIT_OR_UNDERSCORE}*
HEX_DIGIT_OR_UNDERSCORE = [_0-9A-Fa-f]
INTEGER_LITERAL = {DIGITS} | {HEX_INTEGER_LITERAL} | {BIN_INTEGER_LITERAL}
LONG_LITERAL = {INTEGER_LITERAL} [Ll]
HEX_INTEGER_LITERAL = 0 [Xx] {HEX_DIGIT_OR_UNDERSCORE}*
BIN_INTEGER_LITERAL = 0 [Bb] {DIGIT_OR_UNDERSCORE}*
FLOAT_LITERAL = ({DEC_FP_LITERAL} | {HEX_FP_LITERAL}) [Ff] | {DIGITS} [Ff]
DOUBLE_LITERAL = ({DEC_FP_LITERAL} | {HEX_FP_LITERAL}) [Dd]? | {DIGITS} [Dd]
DEC_FP_LITERAL = {DIGITS} {DEC_EXPONENT} | {DEC_SIGNIFICAND} {DEC_EXPONENT}?
DEC_SIGNIFICAND = "." {DIGITS} | {DIGITS} "." {DIGIT_OR_UNDERSCORE}*
DEC_EXPONENT = [Ee] [+-]? {DIGIT_OR_UNDERSCORE}*
HEX_FP_LITERAL = {HEX_SIGNIFICAND} {HEX_EXPONENT}
HEX_SIGNIFICAND = 0 [Xx] ({HEX_DIGIT_OR_UNDERSCORE}+ "."? | {HEX_DIGIT_OR_UNDERSCORE}* "." {HEX_DIGIT_OR_UNDERSCORE}+)
HEX_EXPONENT = [Pp] [+-]? {DIGIT_OR_UNDERSCORE}*
STRING_LITERAL=(\"([^\\\"\r\n]|{ESCAPE_SEQUENCE})*(\"|\\)?) | (`([^\\\"\r\n`]|{ESCAPE_SEQUENCE})*(`|\\)?)
// copy ends.
CHARACTER_LITERAL="'"([^\r\n\'\\]|{ESCAPE_SEQUENCE}|{UNICODE_ESCAPE})"'"
ESCAPE_SEQUENCE=\\([btnfr\"\'\\]|{OCTAL_ESCAPE})
OCTAL_ESCAPE=[0-3][0-7][0-7] | [0-7][0-7] | [0-7]
UNICODE_ESCAPE=\\u[0-9A-Fa-f]{4}
RESOURCE_REFERENCE="@" (({IDENTIFIER} | "android") ":")? {RESOURCE_TYPE} "/" {IDENTIFIER}
RESOURCE_TYPE=anim|animator|bool|color|colorStateList|dimen|dimenOffset|dimenSize|drawable|fraction|id|integer|intArray|interpolator|layout|plurals|stateListAnimator|string|stringArray|transition|typedArray
%%
<YYINITIAL> {
{STRING_LITERAL} { return STRING_LITERAL; }
{WHITE_SPACE} { return com.intellij.psi.TokenType.WHITE_SPACE; }
{FLOAT_LITERAL} { return FLOAT_LITERAL; }
{LONG_LITERAL} { return LONG_LITERAL; }
{DOUBLE_LITERAL} { return DOUBLE_LITERAL; }
{INTEGER_LITERAL} { return INTEGER_LITERAL; }
{CHARACTER_LITERAL} { return CHARACTER_LITERAL; }
{RESOURCE_REFERENCE} { return RESOURCE_REFERENCE; }
"true" { return TRUE; }
"false" { return FALSE; }
"null" { return NULL; }
"boolean" { return BOOLEAN_KEYWORD; }
"byte" { return BYTE_KEYWORD; }
"char" { return CHAR_KEYWORD; }
"short" { return SHORT_KEYWORD; }
"int" { return INT_KEYWORD; }
"long" { return LONG_KEYWORD; }
"float" { return FLOAT_KEYWORD; }
"double" { return DOUBLE_KEYWORD; }
"void" { return VOID_KEYWORD; }
"class" { return CLASS_KEYWORD; }
"instanceof" { return INSTANCEOF_KEYWORD; }
"default" { return DEFAULT_KEYWORD; }
"==" { return EQEQ; }
"!=" { return NE; }
"<=" { return LE; }
"<<" { return LTLT; }
"<" { return LT; }
">>>" { return GTGTGT; }
">>" { return GTGT; }
">=" { return GTEQ; }
">" { return GT; }
"=" { return EQ; }
"!" { return EXCL; }
"~" { return TILDE; }
"??" { return QUESTQUEST; }
"?" { return QUEST; }
":" { return COLON; }
"+" { return PLUS; }
"-" { return MINUS; }
"*" { return ASTERISK; }
"/" { return DIV; }
"&&" { return ANDAND; }
"&" { return AND; }
"||" { return OROR; }
"|" { return OR; }
"^" { return XOR; }
"%" { return PERC; }
"(" { return LPARENTH; }
")" { return RPARENTH; }
"[" { return LBRACKET; }
"]" { return RBRACKET; }
"," { return COMMA; }
"." { return DOT; }
{IDENTIFIER} { return IDENTIFIER; }
[^] { return com.intellij.psi.TokenType.BAD_CHARACTER; }
}