【问题标题】:Custom Rascal location protocols for M3M3 的自定义 Rascal 定位协议
【发布时间】:2016-04-22 09:58:19
【问题描述】:

Java 特定的 M3 具有这些漂亮的位置协议,例如 java+methodjava+enumjava+variable 等等。据我了解,这些漂亮的位置充当“真实”位置的别名,例如 |project://example-project/src/HelloWorld.java|(0,1,<2,3>,<4,5>),指的是该文件中的特定代码。

我想为我自己的 CSS 特定 M3 创建那些漂亮的位置。所以它们应该看起来像css+declarationcss+ruleset。我已经有了现在直接传递给 M3 核心的实际“真实”位置。但这看起来真的很乱,你无法区分这些位置。

那么如何将我的“真实”位置链接到这些漂亮的位置,以便它们在 Rascal 终端中真正发挥作用?有人可以告诉我实现这一目标所需的步骤吗?或者给我举个例子?我已经查看了 Java 特定 M3 的实现,但我似乎无法理解它。

【问题讨论】:

    标签: rascal


    【解决方案1】:

    很好的问题。要注册位置,以便在 REPL 和 IDE 中解析以打开文件,您必须在“名称服务器”中注册它们

    import analysis::m3::Registry;
    registerProject(|project://myProject|, myM3Model); // side-effect alert!
    

    此代码将使用 M3 模型中的 @declarations 表,该表应将逻辑位置映射到物理位置。

    这样做是这样的:

    void registerProject(loc project, M3 model) {
        rel[str scheme, loc name, loc src] perScheme 
          = {<name.scheme, name, src> | <name, src> <- model@declarations};
    
        for (str scheme <- perScheme<scheme>)
           registerLocations(scheme, project.authority, (name : src | <name, src> <- perScheme[scheme]));
    }
    

    从这段代码中你还可以了解到直接调用registerLocations 也是可以的。这基本上是在查找注册表中添加一个查找映射,首先按方案索引,然后按权限,最后按路径名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多