在实验性语言开发中,需要获取注释文本以进行进一步处理。
在令牌级别,这不起作用,
COMMENT : comm = ('/*' ~'*' .* '*/') { System.out.println($comm.text); } ;
试图添加语句和/或表达式,但是这个所需的语法也没有被解析,
x = myFunction(x1, /* comment x1 */
x2, /* comment x2 */
x3)
更新:使用ANTLR 3.1.3。
答案 0 :(得分:0)
发现这种工作方法虽然不完全合理,但是将语句/表达式与注释相关联,
@lexer::members {
public static final int COMMENTS = 2;
}
所以评论偏离了编号频道
COMMENT : '/*' ~'*' .* '*/' {$channel=COMMENTS;} ;
然后,
NetworkLexer lexer = new NetworkLexer(sourceStream);
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
Parser parser = new Parser(tokenStream);
parser.prog();
要使用行号获取注释文本,请考虑此Java代码
for (Object tk: tokenStream.getTokens()) {
CommonToken ctk = (CommonToken) tk;
if (ctk.getChannel() == 2) {
if (ctk.getText() != null && ctk.getText().trim().isEmpty() == false) {
System.out.println(String.format("tk channel %s line %s text %s"),
ctk.getChannel(), ctk.getLine(), ctk.getText());
}
}