[PEG] Как создавать void-обработчики?
От: catbert  
Дата: 14.10.11 19:41
Оценка:
Если правило создается из void-подправил, оно требует обработчик rule(_ : void) : T.
Немерле запрещает аргументы типа void. То есть создать обработчик невозможно.

Если правило включает void-подправило с квантификатором '?', требуется обработчик с аргументом option[void], что тоже создает проблемы.

Как обойти?
Re: [PEG] Как создавать void-обработчики?
От: WolfHound  
Дата: 14.10.11 21:08
Оценка:
Здравствуйте, catbert, Вы писали:

C>Если правило создается из void-подправил, оно требует обработчик rule(_ : void) : T.

C>Немерле запрещает аргументы типа void. То есть создать обработчик невозможно.

C>Если правило включает void-подправило с квантификатором '?', требуется обработчик с аргументом option[void], что тоже создает проблемы.

Тут ты что-то путаешь.
Внутри типизатора option[void] всегда превращается в void.
Только что проверил.
И оно так уже больше года работает, если верить истории изменений.

C>Как обойти?

Фиксить макрос.
Как фиксить еще нужно понять.
Но я, честно говоря, не понял, зачем оно тебе вообще понадобилось?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: [PEG] Как создавать void-обработчики?
От: catbert  
Дата: 14.10.11 21:56
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Но я, честно говоря, не понял, зачем оно тебе вообще понадобилось?


Понадобилось давать узлы AST пустым строкам:

    emptyLine       : CodeLine  = s logicalNewLine;

Если убрать void с s или logicalNewLine, придется переписывать другие обработчики.

Насчет option[void] — действительно, воспроизвести сейчас не могу наверное, были какие-то дополнительные условия, которых уже не осталось.
Re[3]: [PEG] Как создавать void-обработчики?
От: WolfHound  
Дата: 14.10.11 22:06
Оценка:
Здравствуйте, catbert, Вы писали:

C>Если убрать void с s или logicalNewLine, придется переписывать другие обработчики.

Первое что приходит в голову это завети правило без void в котором делать всю работу и вызывать его и правила с void.
Тогда и грамматику трогать не придется и нужное поведение получишь.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: [PEG] Как создавать void-обработчики?
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.10.11 13:05
Оценка:
Здравствуйте, catbert, Вы писали:

C>Если правило создается из void-подправил, оно требует обработчик rule(_ : void) : T.


void-подправил на то и void, чтобы не иметь обработчиков. Нужны обработчики — не используй void-подправила.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [PEG] Как создавать void-обработчики?
От: catbert  
Дата: 15.10.11 13:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>void-подправил на то и void, чтобы не иметь обработчиков. Нужны обработчики — не используй void-подправила.


Их обработчики мне и не нужны. Мне нужен обработчик их комбинации.
Re[3]: [PEG] Как создавать void-обработчики?
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.10.11 15:25
Оценка:
Здравствуйте, catbert, Вы писали:

C>Их обработчики мне и не нужны. Мне нужен обработчик их комбинации.


Делай отдельное символьное правило и уже его включай как в void-правильно, так и в другие места. В общем, разверни сознание .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.