问题描述
我开发了一个基于此 this tutorial 的自定义语言插件。
我的插件使用如下格式解析键/值语言文件。值可以包含一些 HTML 标记,例如 <br>,<i>,<b>,<span>
和 \n
。所以我想将这些标签突出显示为绿色 PSI 元素(值)内的单独 PSI 元素(见图)。我怎样才能覆盖我的规则来获得这个?
#Section header
KEY1 = First<br>Value
KEY2 = Second\nValue
我使用的 Bnf 规则
lngFile ::= item_*
private item_ ::= (property|header|COMMENT|CRLF)
property ::= (KEY? SEParaTOR VALUE?) | KEY {
mixin="someClass"
implements="someClass"
methods=[getKey getValue getName setName getNameIdentifier getPresentation]
}
header ::= HEADER {
mixin="someClass"
implements="someClass"
methods=[getName setName getNameIdentifier getPresentation]
}
弹性
%%
%class LngLexer
%implements FlexLexer
%unicode
%function advance
%type IElementType
%eof{ return;
%eof}
CRLF=\R
WHITE_SPACE=[\ \n\t\f]
FirsT_VALUE_CHaraCTER=[^ \n\f\\] | "\\"{CRLF} | "\\".
VALUE_CHaraCTER=[^\n\f\\] | "\\"{CRLF} | "\\".
END_OF_LINE_COMMENT=("//")[^\r\n]*
HEADER=("#")[^\r\n]*
SEParaTOR=[:=]
KEY_CHaraCTER=[^:=\ \n\t\f\\] | "\\ "
%state WAITING_VALUE
%%
<YYINITIAL> {END_OF_LINE_COMMENT} { yybegin(YYINITIAL); return LngTypes.COMMENT; }
<YYINITIAL> {HEADER} { yybegin(YYINITIAL); return LngTypes.HEADER; }
<YYINITIAL> {KEY_CHaraCTER}+ { yybegin(YYINITIAL); return LngTypes.KEY; }
<YYINITIAL> {SEParaTOR} { yybegin(WAITING_VALUE); return LngTypes.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 LngTypes.VALUE; }
({CRLF}|{WHITE_SPACE})+ { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; }
[^] { return TokenType.BAD_CHaraCTER; }
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)