Re: посоветуйте синтаксис для PEG
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.11 17:23
Оценка:
Здравствуйте, lurrker, Вы писали:

L>Хочу добавить в свой PEG-парсер специальный синтаксис для описания expression-ов, чтобы упростить их описание. Синтаксис должен задавать собственно операторы, их приоритет, арность (унарный префикс/постфикс, бинарный, тернарный), ассоциативность (левая/правая)

L>Для первых двух пунктов мне видится примерно такой синтаксис:
L>
L>Expr = <[^] [*/%] [+-]> Atom;
L>Atom = Int / "(" Expr ")";
L>Int = [0-9]+;
L>

L>Expr — это список операторов в порядке уменьшения приоритета, <> чтобы отличать от обычных конструкций. Atom, соответственно — описание элементарного элемента выражения.
L>Как добавить сюда арность и ассоциативность, чтобы было компактно и не слишком по тарабарски?

Дык, никак!

Не лучше ли описать операторы отдельно?

Я вот сейчас думаю над синтаксисом для синтаксических макросов для Nemerle 2. Пока что мысли следующие:
1. Описывать операторы отдельно с использованием специального синтаксиса.
2. Поддерживать только простые операторы (бинарные (инфиксные) и унарные (префиксные и постфиксные)).
3. Декларативно задавать приоритеты (правый и левый), а так же ассоциатичность.
4. Реализовать их не на базе PEG-а, а на безе Pratt (Top-Down operator precedence parsing), так как он больше подходит для разбора операторов и динамического расширения списка операторов. Если интересно, то курить это и/или это.

Примерный синтаксис описан здесь, в разделе "Приоритеты синтаксических макросов".

Собственно, так как синтаксис пока что только формируется, то с удовольствием послушал бы замечания и предложения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.