M3 模型中 @src 和 @decl 注释的替代实现

Alternative implementation of the @src and @decl annotations in the M3 model

“...所有节点都有一个指向物理源位置的 src 注释,所有声明都可能有一个指向其逻辑位置标识符的 decl 注释...” 是从论文中摘录的一句话:M3:Rascal 代码分析的通用模型。

但是,当为相对简单的语言创建新的 M3 模型时,所有源代码元素都有自己的命名方案,并且所有元素的类型都在 AST 中明确定义,因此不必解析它们类型分开。那么是否会考虑 "ok" 放弃物理源代码位置,将逻辑源代码位置放在 @src 注释中,因为可以为所有节点创建逻辑源代码,只是不使用 @decl 注释?这会被认为是 M3 模型的错误实现,还是因为简单的语言允许对 M3 模型的实现进行这种简化就可以了?

因为否则所有节点都会得到一个带有物理源代码位置的@src 和一个带有逻辑源代码位置的@decl,这会使 AST 混乱,而单个逻辑源代码位置就足够了。

这是一个很好的问题。我认为如果您不放置 @src 注释,当前的 IDE 工具集或我所知道的其他工具不会损坏。所以从这个意义上说,没有什么不好的事情发生。

M3 中没有源位置会很糟糕 declarations table。因此,如果你可以在没有 AST 注释的情况下生成这个 table,那么你很好。

很快 M3 模型将转向使用关键字字段,然后我们甚至可以引入默认实现,如果不存在,则将 src 解析为 decl

那么,为什么不试试你的建议,看看哪里失败了呢?如果我们稍后最终需要 @src,那么将它添加回来就不会那么难了!