我怎么做?在ANTLR上使用lexer-only规则

我怎么做?在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

我正试图通过添加语法来实现对自定义.c文件的简单解析

例:测试c

我想在lexer阶段使用模糊解析方法,然后在解析器规则上,使用TokenRewriteStream和模板重写token

嗯,这是一个雷克瑟片

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')+ ;