想要"菜单"示例 - Pico演示失败

时间:2015-10-20 04:39:45

标签: menu rascal

寻找"菜单"的工作示例对于我写的DSL,我试过了#34; Pico"。但是以下失败了:

rascal>import demo::lang::Pico::Plugin;
|plugin://rascal_eclipse/src/org/rascalmpl/eclipse/library/demo/lang/Pico/Plugin.rsc|(1791,48,<71,6>,<71,54>): The called signature: action(str, void (...)),
does not match any of the declared (overloaded) signature patterns:
Menu = action(str,void (Tree, loc))
Menu = action(str,void (str, loc))

如果我评论&#34; Plugin.rsc&#34;的第71-73行它成功加载,但当然我没有&#34;菜单&#34;。有人能指出我解决这个问题(它不需要太多的Eclipse或Java专业知识:)或者#34;菜单&#34;的其他工作示例吗?

由于

我的环境:

  

Rascal :(我不知道如何打印版本,但其中一个版本   文件是                   rascal_eclipse_0.7.3.201506091957.jar)

     

Eclipse:适用于RCP和RAP开发人员版本:Mars版本(4.5.0)   Java:版本&#34; 1.8.0_51&#34;操作系统:Linux Mint 17 Qiana

1 个答案:

答案 0 :(得分:1)

可以使用弹出菜单添加为您注册语言的贡献 popup(Menu menu)构造函数。创建所需的贡献后,请调用registerContribution(..)(在util::IDE中定义)函数,提供构造的Contribution数据类型。

例如,在Pico中,贡献定义如下:

public set[Contribution] Pico_CONTRIBS = {
  popup(
    menu("Pico",[
        action("Evaluate Pico program", evalPicoProgram),
        action("Compile Pico to ASM", compilePicoProgram),
        action("Show Control flow graph", visualizePicoProgram)
    ])
  )
};

evalPicoProgramcompilePicoProgramvisualizePicoProgram的签名是

public void _name_(Tree x, loc selection) {
  ...
}

最终会使用以下代码注册贡献:

registerContributions("Pico", Pico_CONTRIBS);

在Pico示例中,已注册的菜单包含一个类型错误的action构造函数。这确实是Rascal中的一个错误。动作构造函数的签名在过去发生了变化,Pico插件模块没有相应更新。

我做了必要的修改,应该在最新的Rascal不稳定版本中修复。