Re[2]: Синтаксис для синтаксических макросов Nemerle 2.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.02.11 16:59
Оценка:
Здравствуйте, fin_81, Вы писали:

_>В виду того в PEG однозначность определяется порядком, если приоритеты у макросов в макро-классе?


Это не очень простой вопрос. Попробую объяснить.

Расширять можно будет не все что угодно, а только те правила которые исходно помечены как точки расширения. Таким образом в базовом синтаксисе должны быть явно обозначены места в которые можно подставить свои расширения. Такие места называются точками расширения.

В каждой точке расширения может быть подключено любое количество расширений, а так же точки расширений могут исходно содержать некоторые правила (предопределенные правила).

При подключении новых расширений в них может быть указаны приоритеты правил относительно уже известных правил. Приоритет может задаваться относительно предопределенных правил или по отношению уже известных на момент компиляции других расширений. Уже известными расширениями могут быть расширения находящиеся в том же макро-классе или во внешних макро-библиотеках на которые добавлена ссылка в текущий проект.

Для операторов будет своя система приоритетов учитывающая не только приоритет, но и ассоциативность.

_>Также не нравится то, что параметры могут описаны PegRules. Из-за чего синтаксис макроса размазывается по двум секциям «syntax» и «where». Не лучше ли ограничить параметры только типом или ссылкой на макрос?


Дык, а где тогда описывать те самые правила?

Типы мы как раз и так прекрасно выведем. Каждое правило описывает возвращаемый тип. Так что это не проблема.

В общем, попробуй предложить свой вариант и подумай нет ли в нем противоречий. Точнее вместе подумаем.

_>Есть ли вторичные макросы-хелперы? Например, макрос разбит на несколько вторичных макросов, но вторичные макросы по отдельности не должны парситься. Или по другому, есть стартовый макрос, и макросы-подправила.


Как описано по ссылке есть макро-классы. Это своего рода модули для групп макросов. В их рамках могут быть макросы (правила) не используемые во вне. Можно ввести модификаторы доступа (public/private).

Кроме того макрос может просто вызвать любую функцию.

Ну, и не стоит забывать, что речь идет о синтаксических макросах. Обычные макросы по прежнему будут описываться в виде эдаких функций принимающих на входе АСТ и (возможно) возвращающих его.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.