Re[16]: Являются ли макросы свидетельством недостаточной выр
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 30.07.07 17:11
Оценка: 10 (1)
Здравствуйте, 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.