Здравствуйте, lomeo, Вы писали:
VD>>Это вопрос для konsoletyper-а, конечно. Насколько я знаю у него есть два варианта. Один с внешним файлом грамматики (был написан ранее), а второй с макросом. Второй вариант это чистый DSEL. Первый — нет. Но оба варианта используют немерловые варианты (алгеброические типы) для представления граматических элементов. Это и позволяет от делить формальную грамматику от прикладного кода.
L>То, что я видел было только во внешнем файле .bnf кажется, отсюда и вопрос. Насчёт json-а ты не ответил — это пример совсем маленький
если тебя интересует запись в Parsec -- могу нарисовать.
Откровенно говоря я не знаю что такое json. Но наверно пойдет.
L>2konsoletyper (если читаешь) — а как у тебя DSEL выглядет в коде немерле? можно пример?
Грамматика была в виде глобального метаатрибута. Что-то типа:
[assembly: BNF(lexer
{
Поперли := описывать | правила;
...
})]
[assembly: BNF(parser
{
Поперли := описывать | правила;
...
})]
При этом изменение грамматики автоматически перестраивает генерируемые алгеброические типы, так что сразу доступен комплит-ворд и диагностика ошибок (без какой либо добполниетльной роботы по этому поводу).
... << RSDN@Home 1.2.0 alpha rev. 637>>