Select Git revision
JastAddAspect.flex
JastAddAspect.flex 12.72 KiB
package org.jastadd.tooling.aspect.lexer;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
import org.jastadd.tooling.aspect.psi.JastAddAspectTypes;
import com.intellij.psi.TokenType;
%%
%class JastAddAspectLexer
%implements FlexLexer
%unicode
%function advance
%type IElementType
%eof{ return;
%eof}
%{
private int counter = 0;
%}
WhiteSpace = [ \t\n\r\f]
// TODO what is /**/ in Java? Is this caputered here?
SingleLineComment = "//" [^\n\r]* (\n | \r | \r\n)
FormalComment = "/**" [^*]* [*]+([^*/][^*]*[*]+)*[/]
MultiLineComment = "/*" [^*]+ [*]+([^*/][^*]*[*]+)*[/]
NotBrace = ( [^{}/]+ | [/][^{}/*] )*
// from jjt
DecimalLiteral = [1-9] [0-9]*
HexLiteral = 0 [xX] [0-9a-fA-F]+
OctalLiteral = 0 [0-7]*
IntegerLiteral = ( {DecimalLiteral} | {HexLiteral} | {OctalLiteral} ) [lL]?
Exponent = [eE] [+-]? [0-9]+
FloatingPointLiteral = [0-9]+ "." [0-9]* {Exponent}? [fFdD]?
| "." [0-9]+ {Exponent}? [fFdD]?
| [0-9]+ {Exponent} [fFdD]?
| [0-9]+ {Exponent}? [fFdD]
CharacterLiteral = ' ( [^'\\\n\r] | ( \\ ( [ntbrf\\'\"] | [0-7][0-7?] | [0-3][0-7][0-7] ) ) ) '
StringLiteral = \" ( [^\"\\\n\r] | ( \\ ( [ntbrf\\'\"] | [0-7][0-7?] | [0-3][0-7][0-7] ) ) )* \"
Identifier = [:jletter:] [:jletterdigit:]*
%state JASTADD
%state EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE
%state CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE
%state LBRACE_ANYTHING_RBRACE
%state JAVA_IN_PAREN
%state COLLECTION_DECL
%state ATTRIBUTE_DEFINITION
%state LPAREN_ANYTHING_RPAREN
%%
<YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> {
{WhiteSpace}+ { return TokenType.WHITE_SPACE; }
{SingleLineComment} { return JastAddAspectTypes.SINGLE_LINE_COMMENT; }
{FormalComment} { return JastAddAspectTypes.FORMAL_COMMENT; }
{MultiLineComment} { return JastAddAspectTypes.MULTI_LINE_COMMENT; }
// "EQ" { yybegin(YYINITIAL); return JastAddAspectTypes.EQ; }
// "{" { yybegin(JAVA); counter = 1; }
"class" { yybegin(EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE); }
}
<EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE> {