寻找"菜单"的工作示例对于我写的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
答案 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)
])
)
};
evalPicoProgram
,compilePicoProgram
和visualizePicoProgram
的签名是
public void _name_(Tree x, loc selection) {
...
}
最终会使用以下代码注册贡献:
registerContributions("Pico", Pico_CONTRIBS);
在Pico示例中,已注册的菜单包含一个类型错误的action
构造函数。这确实是Rascal中的一个错误。动作构造函数的签名在过去发生了变化,Pico插件模块没有相应更新。
我做了必要的修改,应该在最新的Rascal不稳定版本中修复。