我怎么做?在ANTLR上使用lexer-only规则
我正试图通过添加语法来实现对自定义.c文件的简单解析 例:测试c 我想在lexer阶段使用模糊解析方法,然后在解析器规则上,使用TokenRewriteStream和模板重写token 嗯,这是一个雷克瑟片我怎么做?在ANTLR上使用lexer-only规则,antlr,lexer,Antlr,Lexer,我正试图通过添加语法来实现对自定义.c文件的简单解析 例:测试c 我想在lexer阶段使用模糊解析方法,然后在解析器规则上,使用TokenRewriteStream和模板重写token 嗯,这是一个雷克瑟片 lexer grammar Lexi; options {filter = true;} // Pick everything between @parseme and ';' or '{ }' METHOD : HEADE
lexer grammar Lexi;
options {filter = true;}
// Pick everything between @parseme and ';' or '{ }'
METHOD
: HEADER .* (';' | BODY )
;
fragment
HEADER
: '@' ('parseme' | 'PARSEME') ;
fragment
BODY: '{' .* '}' ;
.
…
对于专家来说,问题很简单:
1-找到“;”时Lexer停止解析在到达“@parseme void func3()..”上的最后一个“}”之前
2-当在块右卷曲中发现时,Lexer停止解析。
3-当然还有更多的案例尚未测试
问题真的很明显。解决办法也是吗?我希望如此!!
谢谢。回答我的问题
lexer grammar Lexi;
options {filter = true;}
// Pick everything between @parseme and ';' or '{}'
METHOD
: METHOD_HEADER (~'{')* METHOD_END ;
fragment
METHOD_HEADER
: '@' ('parseme' | 'PARSEME') ;
fragment
METHOD_END
: (';' | BLOCK ) ;
fragment
BLOCK
: '{' ( ~('{' | '}') | BLOCK )* '}' ;
WS : (' '|'\r'|'\t'|'\n')+ ;
解决办法非常简单
lexer grammar Lexi;
options {filter = true;}
// Pick everything between @parseme and ';' or '{}'
METHOD
: METHOD_HEADER (~'{')* METHOD_END ;
fragment
METHOD_HEADER
: '@' ('parseme' | 'PARSEME') ;
fragment
METHOD_END
: (';' | BLOCK ) ;
fragment
BLOCK
: '{' ( ~('{' | '}') | BLOCK )* '}' ;
WS : (' '|'\r'|'\t'|'\n')+ ;