mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-27 16:57:49 +08:00
47 lines
1.5 KiB
Plaintext
47 lines
1.5 KiB
Plaintext
package com.simpleplugin;
|
|
|
|
import com.intellij.lexer.FlexLexer;
|
|
import com.intellij.psi.tree.IElementType;
|
|
import com.simpleplugin.psi.SimpleTypes;
|
|
import com.intellij.psi.TokenType;
|
|
|
|
%%
|
|
|
|
%class SimpleLexer
|
|
%implements FlexLexer
|
|
%unicode
|
|
%function advance
|
|
%type IElementType
|
|
%eof{ return;
|
|
%eof}
|
|
|
|
CRLF= \n|\r|\r\n
|
|
WHITE_SPACE=[\ \t\f]
|
|
FIRST_VALUE_CHARACTER=[^ \n\r\f\\] | "\\"{CRLF} | "\\".
|
|
VALUE_CHARACTER=[^\n\r\f\\] | "\\"{CRLF} | "\\".
|
|
END_OF_LINE_COMMENT=("#"|"!")[^\r\n]*
|
|
SEPARATOR=[:=]
|
|
KEY_CHARACTER=[^:=\ \n\r\t\f\\] | "\\ "
|
|
|
|
%state WAITING_VALUE
|
|
|
|
%%
|
|
|
|
<YYINITIAL> {END_OF_LINE_COMMENT} { yybegin(YYINITIAL); return SimpleTypes.COMMENT; }
|
|
|
|
<YYINITIAL> {KEY_CHARACTER}+ { yybegin(YYINITIAL); return SimpleTypes.KEY; }
|
|
|
|
<YYINITIAL> {SEPARATOR} { yybegin(WAITING_VALUE); return SimpleTypes.SEPARATOR; }
|
|
|
|
<WAITING_VALUE> {CRLF}({CRLF}|{WHITE_SPACE})+ { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; }
|
|
|
|
<WAITING_VALUE> {WHITE_SPACE}+ { yybegin(WAITING_VALUE); return TokenType.WHITE_SPACE; }
|
|
|
|
<WAITING_VALUE> {FIRST_VALUE_CHARACTER}{VALUE_CHARACTER}* { yybegin(YYINITIAL); return SimpleTypes.VALUE; }
|
|
|
|
({CRLF}|{WHITE_SPACE})+ { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; }
|
|
|
|
{WHITE_SPACE}+ { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; }
|
|
|
|
. { return TokenType.BAD_CHARACTER; }
|