2015-10-20 2 views
2

В поисках рабочего примера «Меню» для DSL, я пишу, я попробовал «Пико». Но следующий сбой:Хотите, например, «Меню» - демонстрация 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)) 

Если я закомментировать строки 71-73 «Plugin.rsc» он загружает успешно, но тогда, конечно, у меня нет «Меню». Может ли кто-нибудь указать мне на это исправить (что не требует много опыта Eclipse или Java :) или другого рабочего примера «Меню»?

Благодаря

Моя среда:

Rascal: (я не знаю, как печатать версию, но один из файлов rascal_eclipse_0.7.3.201506091957.jar)

Eclipse: для RCP и RAP Developers Версия: Mars Release (4.5.0) Java: версия "1.8.0_51" ОС: Linux Mint 17 Qiana

ответ

1

Всплывающие меню могут быть добавлены в качестве вклада в ваш зарегистрированный язык, используя конструктор popup(Menu menu). После того, как вы создали вклад, который вам нужен, вызовите функцию registerContribution(..) (определенную в util::IDE), предоставляющую построенный тип данных Contribution.

Например, в Пико вклады определяются следующим образом:

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 с неправильным типом. На самом деле это была ошибка у мошенника. Подпись конструктора действий изменилась в прошлом, и модуль Pico Plugin не был соответствующим образом обновлен.

Я внесла необходимые изменения и должен быть исправлен в новейшей нестабильной версии Rascal.

+0

Возможно, вы могли бы скопировать код Pico здесь, только ради полноты – jurgenv

+0

хорошее предложение! –

Смежные вопросы