首页 > 解决方案 > 流氓/克莱尔:无法访问 M3 的评论

问题描述

我尝试遍历 C++ 源文件中的所有注释,但无法访问 M3.comments。

我尝试了 iprintln、for-、switch- 和 visit- 语句。

iprintln(m3) 给出以下输出:

m3(

  |file://bla.c|,

  macroExpansions={},

  methodOverrides={},

  includeDirectives={
    ...
  },

  inactiveIncludes={},

  comments=[

    |file://bla.c|(0,80),

    |file://bla.c|(82,34),

    ...
  ],

  macroDefinitions={},

  includeResolution={
    ...
  })
'''

以下代码匹配

visit (m3) { case comments: println("match"); }

但我无法获得位置。

例如

visit (m3) { case c:comments: println(c); }

返回“不明确的代码(内部错误),c:comments:”。

下一个

visit (m3) { case comments(c): println("c"); }

不匹配

iprintln(m3.comments);

回馈“未声明的字段:M3 的注释”。

如何访问评论?

标签: commentsrascalclair

解决方案


您可以通过以下方式投射出评论:

theComments = m3Model.comments;

那 ”。” 表达式选择 m3 数据构造函数的注释字段。

如果你想匹配一个关键字字段comments,你会写一个这样的模式:

m3(comments=theComments) := myM3Model

如果该字段未声明,您可以像这样声明它:

data M3(list[loc] comments=[]);

但是,这应该已经在 Claire 库声明中了。请在 GitHub 上报告问题?


推荐阅读