Сейчас Nemerle.Peg (макрос PegGrammar) использует рукописный граммар который разбирает дерево токенов немерла (используется так называемый лексерный макрос).
Грамматика грамматики PegGrammar стала довольно сложной и разбирать ее вручную стало довольно напряжно.
Собственно задачка заключается в том, чтобы написать парсер грамматики PegGrammar на нем самом же.
Общая идея такова. За основу надо взять макрос PegGrammar (сделать брэнч). В нем нужно заменить метод ParseEbnf:
на реализацию основанную на PegGrammar. Для этого нужно создать еще один класс — парсер, прикрутить к нему макрос PegGrammar, описать грамматику и реализовать обработчики.
Задачка, что называется, из реального мира (а не баловство синтетическое). При этом она не такая уж сложная (подойдет даже для полного новичка в языке). Задача довольно интересная. И что самое главное — очень полезная.
Кто хочет взяться?
ЗЫ
Обещаю помощь через Скайп или этот форум. Мой логин в скайпе соответствует логину на этом сайте.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Задачка для тех кто хочет изучить Nemerle.Peg и/или Neme
VD>Кто хочет взяться?
Готов попробовать. Руку на PEG я набил.
VD>Обещаю помощь через Скайп или этот форум. Мой логин в скайпе соответствует логину на этом сайте.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Re[2]: Задачка для тех кто хочет изучить Nemerle.Peg и/или N
Здравствуйте, Ziaw, Вы писали:
Z>Грамматику придется держать в строке? Что на это скажет IDE?
Зачем? Как и сейчас будет все. Макрос по прежнему будет принимать лексему которая будет содержать дерево лексем. Просто вместо того чтобы возиться с ними можно получить из исходного файла код по соответствующему местоположению и распарсить его с помощью Peg-а.
Вообще-то я все описал в тематическом сообщении. Просто прочти его внимательнее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Задачка для тех кто хочет изучить Nemerle.Peg и/или N
Здравствуйте, VladD2, Вы писали:
VD>Зачем? Как и сейчас будет все. Макрос по прежнему будет принимать лексему которая будет содержать дерево лексем. Просто вместо того чтобы возиться с ними можно получить из исходного файла код по соответствующему местоположению и распарсить его с помощью Peg-а.
Ясно. Но пег тогда придется собирать при помощи пега? Разумно ли это?
Re[4]: Задачка для тех кто хочет изучить Nemerle.Peg и/или N
Здравствуйте, Ziaw, Вы писали:
Z>Здравствуйте, VladD2, Вы писали:
VD>>Зачем? Как и сейчас будет все. Макрос по прежнему будет принимать лексему которая будет содержать дерево лексем. Просто вместо того чтобы возиться с ними можно получить из исходного файла код по соответствующему местоположению и распарсить его с помощью Peg-а.
Z>Ясно. Но пег тогда придется собирать при помощи пега? Разумно ли это?
CoCo/R собирается при помощи него самого, компилятор Nemerle тоже — очень даже разумно.
Скука — двигатель прогресса.
Re[4]: Задачка для тех кто хочет изучить Nemerle.Peg и/или N
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Ka3a4oK, Вы писали:
VD>>>Кто хочет взяться? KK>>Готов попробовать. Руку на PEG я набил.
VD>Давай! Если будут какие-то вопросы, обращайся.
Написал тебе письмо, ты почему-то не ответил. Продублирую здесь:
.
KK>Сразу вопрос:
KK>Что за странные определения:
KK>and parseSequence(tok : Token) : Rule * Token
KK>{
KK> ...
KK>}
KK>Похоже на локальную функцию, но почему and и в чем отличие от def?
Это группа функций. Локальные функции видны только ниже по тексту. Если нужно создать набор локальных функций которые смогут рекурсивно друг-друга вызвать, то их надо объявлять через and. Первая функция идет через def, а все остальные через and.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.