首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问使用ANTLR中的greedy=false选项匹配的文本块作为属性?

如何访问使用ANTLR中的greedy=false选项匹配的文本块作为属性?
EN

Stack Overflow用户
提问于 2011-01-13 12:35:46
回答 1查看 182关注 0票数 0

我的ANTLR语法中有一条规则,如下所示:

代码语言:javascript
复制
COMMENT :  '/*' (options {greedy=false;} : . )* '*/' ;

这条规则只匹配c样式的注释,因此它可以接受任何一对/*和*/,其中包含任意文本,并且它工作得很好。

我现在要做的是在规则匹配时捕获/*和*/之间的所有文本,使其可供操作访问。如下所示:

代码语言:javascript
复制
COMMENT :  '/*' e=((options {greedy=false;} : . )*) '*/' {System.out.println("got: " + $e.text);

这种方法不起作用,在解析过程中,当到达"/*“之后的第一个字符时,它”没有可行的替代方案“。

我真的不清楚是否/如何做到这一点-欢迎任何建议或指导,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-13 13:22:55

试试这个:

代码语言:javascript
复制
COMMENT :
  '/*' {StringBuilder comment = new StringBuilder();} ( options {greedy=false;} : c=. {comment.appendCodePoint(c);} )* '*/' {System.out.println(comment.toString());};

另一种方法实际上将返回StringBuilder对象,以便您可以在程序中使用它:

代码语言:javascript
复制
COMMENT returns [StringBuilder comment]:
  '/*' {comment = new StringBuilder();} ( options {greedy=false;} : c=. {comment.append((char)c);} )* '*/';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4676827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档