使用Java 7语法https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4我想找到具有特定名称的方法,然后打印出该方法.我看到methodDeclaration我匹配时可以使用规则.所以我继承Java7BaseListener并覆盖这个监听器方法:
@Override public void enterMethodDeclaration(Java7Parser.MethodDeclarationContext ctx) { }
Run Code Online (Sandbox Code Playgroud)
如何获取原始文本? ctx.getText()给了我一个字符串,所有的空白都被删除了.我想要评论和原始格式.
我是一名ANTLR初学者,想要计算符号的SHA1-Hash.
我的简化示例语法:
grammar Example;
method @after{calculateSha1($text); }: 'call' ID;
ID: 'A'..'Z'+;
WS: (' '|'\n'|'\r')+ {skip(); }
COMMENT: '/*' (options {greedy=false;}: .)* '*/' {$channel=HIDDEN}
Run Code Online (Sandbox Code Playgroud)
由于词法分析器删除了不同字符串的所有空格callABC,call /* DEF */ ABC不幸的是得到相同的SHA1-Hash值.
是否有可能在开始和结束标记之间获取规则的"原始"文本以及所有跳过的空格和其他通道的文本?
(我想到的一种可能性是成员WS- 和 - COMMENT工具规则中的所有字符,但是还有更多规则,所以这不太实用.)
我使用标准的ANTLRInputStream来提供Lexer,但我不知道如何接收原始文本.