我的ANTLR语法中有一条规则,如下所示:
COMMENT : '/*' (options {greedy=false;} : . )* '*/' ;这条规则只匹配c样式的注释,因此它可以接受任何一对/*和*/,其中包含任意文本,并且它工作得很好。
我现在要做的是在规则匹配时捕获/*和*/之间的所有文本,使其可供操作访问。如下所示:
COMMENT : '/*' e=((options {greedy=false;} : . )*) '*/' {System.out.println("got: " + $e.text);这种方法不起作用,在解析过程中,当到达"/*“之后的第一个字符时,它”没有可行的替代方案“。
我真的不清楚是否/如何做到这一点-欢迎任何建议或指导,谢谢。
发布于 2011-01-13 13:22:55
试试这个:
COMMENT :
'/*' {StringBuilder comment = new StringBuilder();} ( options {greedy=false;} : c=. {comment.appendCodePoint(c);} )* '*/' {System.out.println(comment.toString());};另一种方法实际上将返回StringBuilder对象,以便您可以在程序中使用它:
COMMENT returns [StringBuilder comment]:
'/*' {comment = new StringBuilder();} ( options {greedy=false;} : c=. {comment.append((char)c);} )* '*/';https://stackoverflow.com/questions/4676827
复制相似问题