Здравствуйте, lomeo, Вы писали:
VD>>Грамматика была в виде глобального метаатрибута. Что-то типа:
L>Прикольное решение. А в виде чего тогда приходит на макрос BNF параметр после lexer/parser внутри фигурных скобок?
L>Строка? Или уже разобранное лексером от Немерле? Если второе, то разобранное в каком виде? Идентификатор/символ? Можно ли там использовать внешние функции? Можно ли правила использовать снаружи? (последние два вопроса — это насколько правила first-order).
В макрос приходит лексемное дерево. Однако, т.к. версия с генерацией парсера по внешнему описанию использует свои лексер/парсер, то я, чтобы достичь унификации и снизить объём кода, сначала выравниваю лексемное дерево и направляю полученный поток лексем парсеру BNF. Внешние функции нельзя использовать, но это сделано намеренно, чтобы не смешивать грамматику и код — ИМХО, от этого одна только головная боль. Наоборот, я приложил максимум усилий к тому, чтобы можно было писать код/грамматику отдельно, и чтобы это было удобно. Собственно, вот ссылка на рабочий пример — я написал небольшой
бенчмаркАвтор: konsoletyper
Дата: 01.05.07
.
К сожалению, сейчас совсем нет времени, так что макрос поддерживает только генерацию лексера. На работе завал. А вот теперь только-только от ICFP отошёл и опять на работе завал

Вообще, проблема именно в нехватке времени. Никаких особых технических проблем нет. В своё время поддержку генерации лексера я сделал за пару дней. Если найдётся пара дней, сделаю поддержку парсера. Дело там нехитрое — AST уже есть готовое, надо по нему грамматику и LR-таблицы получить, а по таблицам — сгенерить класс. Последнее — 99% всего, что нужно сделать.
VD>>При этом изменение грамматики автоматически перестраивает генерируемые алгеброические типы, так что сразу доступен комплит-ворд и диагностика ошибок (без какой либо добполниетльной роботы по этому поводу).
L>Не понял, как он ловит ambiguity?
Какой ambiguity?
... << RSDN@Home 1.2.0 alpha rev. 672>>