fko*_*kov 5 string multiline lexer jflex
我正在尝试使用JFlex解析一些使用多行字符串文字的语言.
例子:
'''
this is a valid multiline string literal with 'quoted' word
'''
Run Code Online (Sandbox Code Playgroud)
我创造了两种状态:
%x IN_QUOTED_STRING
%x IN_MULTILINE_QUOTED_STRING
Run Code Online (Sandbox Code Playgroud)
并创建了几个宏和规则:
QUOTED_STRING_TAIL=[^\']* "'"
QUOTED_STRING_START="@"? "'"
MULTILINE_QUOTED_STRING_START = "@"? "'''"
MULTILINE_QUOTED_STRING_TAIL = [.]* "'''"
%%
<YYINITIAL> {MULTILINE_QUOTED_STRING_START} {yybegin(IN_MULTILINE_QUOTED_STRING);}
<YYINITIAL> {QUOTED_STRING_START} {yybegin(IN_QUOTED_STRING);}
<IN_QUOTED_STRING> {QUOTED_STRING_TAIL} {yybegin(YYINITIAL); return STRING;}
<IN_MULTILINE_QUOTED_STRING> {MULTILINE_QUOTED_STRING_TAIL} {yybegin(YYINITIAL); return STRING;}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我得到"错误:无法匹配输入"
任何人都可以帮助我解决问题吗?
OP 写道:
对我有用:
Run Code Online (Sandbox Code Playgroud)QUOTED_LITERAL="'" ([^\\\'\r\n] | {ESCAPE_SEQUENCE} | (\[\r\n]))* ("'"|\)? ESCAPE_SEQUENCE=\[^\r\n] ANY_ESCAPE_SEQUENCE = \[^] THREE_QUO = (\"\"\") ONE_TWO_QUO = (\"[^\"]) | (\"\[^]) | (\"\"[^\"]) | (\"\"\[^]) QUO_STRING_CHAR = [^\\\"] | {ANY_ESCAPE_SEQUENCE} | {ONE_TWO_QUO} TRIPLE_QUOTED_LITERAL = {THREE_QUO} {QUO_STRING_CHAR}* {THREE_QUO}? %% <YYINITIAL> {TRIPLE_QUOTED_LITERAL }{ return STRING; } <YYINITIAL> {QUOTED_LITERAL} { return STRING; }
| 归档时间: |
|
| 查看次数: |
769 次 |
| 最近记录: |