Здравствуйте, Visor2004, Вы писали:
V>Забавная фича, но где она реально нужна? мне в голову приходит только поддержка нескольких диалектов одного языка. Широко распространен в этом смысле только SQL, как часто люди пишут парсеры SQL
Здравствуйте, Visor2004, Вы писали:
V>Забавная фича, но где она реально нужна? мне в голову приходит только поддержка нескольких диалектов одного языка. Широко распространен в этом смысле только SQL, как часто люди пишут парсеры SQL
Для парсинга того же Nemerle нужна.
Плюс имея динамическое расширение модульность будет автоматом. А там уже и статическое расширение приделать будет не сложно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Vlad2, Вы писали Статья: Макрос PegGrammar.
"Буду краток" (ц)
1. Статья напоминает расширенную документацию к PEGGrammar. Это её прямое назначение или это должно было быть введением для новичков?
2. Неплохо бы расписать роль PEGGrammar в цепочке компиляторных модулей — что даём на вход, что происходит внутри, что имеем на выходе и как этот выход использовать.
3. Хотя бы небольшой пример грамматики (раз уж так подробно расписываются возможности макроса), но желательно с охватом всех этих возможностей — чтобы наглядно было видно, что и зачем применять. Я, например, не уловил назначение "точки восстановления" (которую можно вставлять практически после любого правила) и "точки отсечения" (которые, похоже, нужны только в IntelliSence?).
4. Попытка использовать PEGGrammar из C# сразу провалилась — нет атрибута PegGrammarAttribute! Получается, это только Немерловое решение?
Здравствуйте, matumba, Вы писали:
M>2. Неплохо бы расписать роль PEGGrammar в цепочке компиляторных модулей — что даём на вход, что происходит внутри, что имеем на выходе и как этот выход использовать.
На вход подаем строку, внутри происходит разбор по правилам, на выходе то, что сгенерят правила. Не думаю, что это обязательно разжевывать в статье, но можно и разжевать.
M>3. Хотя бы небольшой пример грамматики (раз уж так подробно расписываются возможности макроса), но желательно с охватом всех этих возможностей — чтобы наглядно было видно, что и зачем применять. Я, например, не уловил назначение "точки восстановления" (которую можно вставлять практически после любого правила) и "точки отсечения" (которые, похоже, нужны только в IntelliSence?).
Примеры уже были, тот же калькулятор.
M>4. Попытка использовать PEGGrammar из C# сразу провалилась — нет атрибута PegGrammarAttribute! Получается, это только Немерловое решение?
Естественно. Это макрос который генерит код парсера. Генерить произвольный код во время компиляции в C# не умеет.
Зато полученный парсер вполне юзабелен откуда угодно в .net.
Здравствуйте, matumba, Вы писали:
M>1. Статья напоминает расширенную документацию к PEGGrammar. Это её прямое назначение или это должно было быть введением для новичков?
Это и есть документация.
M>2. Неплохо бы расписать роль PEGGrammar в цепочке компиляторных модулей — что даём на вход, что происходит внутри, что имеем на выходе и как этот выход использовать.
На входе грамматика и обработчики. На выходе то что эти обработчики сформируют.
M>3. Хотя бы небольшой пример грамматики (раз уж так подробно расписываются возможности макроса), но желательно с охватом всех этих возможностей — чтобы наглядно было видно, что и зачем применять. Я, например, не уловил назначение "точки восстановления" (которую можно вставлять практически после любого правила) и "точки отсечения" (которые, похоже, нужны только в IntelliSence?).
Для этого нужно отдельную статью писать. Примеров же масса. Загляни в сниппетыю
M>4. Попытка использовать PEGGrammar из C# сразу провалилась — нет атрибута PegGrammarAttribute! Получается, это только Немерловое решение?
Естественно. Это же макрос. Причем синтаксический. Шарпу такое даже не снилось.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, matumba, Вы писали:
M>3. Хотя бы небольшой пример грамматики (раз уж так подробно расписываются возможности макроса), но желательно с охватом всех этих возможностей — чтобы наглядно было видно, что и зачем применять. Я, например, не уловил назначение "точки восстановления" (которую можно вставлять практически после любого правила) и "точки отсечения" (которые, похоже, нужны только в IntelliSence?).
Посмотри грамматику препроцессора C# и как он работает с полученным AST (интерпретирует код).
Препроцессорный парсер: PreParser.n
AST: PreParser_AST.n
Препроцессор: Preprocessor.n
Здравствуйте, VladD2, Вы писали:
VD>Это слишком сложно для начала. Грамматики калькулятора и джейсона тут будут более кстати.
Грамматику джейсона стоит отрефакторить. Я вижу как мои первые потуги в деле использования PEG-а уже пошли копипастой: правила вида UPPERCASE = "закорючка" это не круто.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, hardcase, Вы писали:
H>>Посмотри грамматику препроцессора C# и как он работает с полученным AST (интерпретирует код).
VD>Это слишком сложно для начала. Грамматики калькулятора и джейсона тут будут более кстати.
Парсер там примитивный — он последовательно перебирает комментарии и директивы. А вот уже о вложенности директив заботится сам препроцессор.
Здравствуйте, hardcase, Вы писали:
H>Грамматику джейсона стоит отрефакторить. Я вижу как мои первые потуги в деле использования PEG-а уже пошли копипастой: правила вида UPPERCASE = "закорючка" это не круто.
Ну, так помоги товарищу советом или физически.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, hardcase, Вы писали:
H>Парсер там примитивный — он последовательно перебирает комментарии и директивы. А вот уже о вложенности директив заботится сам препроцессор.
Я не заочно говорил. Я посмотрел что у тебя получилось. Для новичков это явный перебор. Им нужно что-то простое и короткое (в то числе и в обработчиках).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Ziaw, Вы писали:
Z>>Только надо ли оно? Даже грамматика C# вполне обозрима и читабельна. Класс сделан partial и методы обработки грамматики разбиты по файлам.
VD>Модульность предназначена не только для борьбы с размерами кода, но и для борьбы с копипастом. Например, почти все сишныеп языки имеют одинаковую грамматику для числе, комментариев и т.п.
Не прошло и полгода
KK>Встроенные парсеры чисел(целых — в разной системе исчисления, с плавающей точкой);
Это все на фиг не нужная белиберда. В Спирете она нужна протому что он весьма убог. Грамматика для перечисленных задач пишется за две минуты.
Здравствуйте, jazzer, Вы писали:
J>Не прошло и полгода J>
KK>>Встроенные парсеры чисел(целых — в разной системе исчисления, с плавающей точкой);
J>Это все на фиг не нужная белиберда. В Спирете она нужна протому что он весьма убог. Грамматика для перечисленных задач пишется за две минуты.
Здравствуйте, jazzer, Вы писали:
J>Не прошло и полгода J>
KK>>Встроенные парсеры чисел(целых — в разной системе исчисления, с плавающей точкой);
J>Это все на фиг не нужная белиберда. В Спирете она нужна протому что он весьма убог. Грамматика для перечисленных задач пишется за две минуты.
Длы тех кто в танке. "Встроенные парсеры" — это парсеры реализованные вручную. Здесь же речь идет о возможности выделять любые правила в отдельные библиотеки. Прочти то что написано в конце того сообщения:
KK>Модульность!!! Чем дальше откладывать эту проблемму, тем, возможно, сложнее будет ее реализовать безболезненно для всех.
Вот это другой вопрос. Вольфхаунд должен был двано это реализовать. Причем должна появиться динамическая расширяемость.
Но вот что-то видимо его отвлекает. Надеюсь, что в обозримом времени он это все допишет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, catbert, Вы писали:
C>Кстати да, планируется ли поддержка парсеров сырого текста?
Вот думали для препроцессора сделать такое дело, но решили, что проще отдельный парсер сделать.
C>Типа чтобы вручную прописывать проблемные с точки зрения PEG подпарсеры.
А такие существуют?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, WolfHound, Вы писали:
VD>>Что не верно то? Ты уже поясняй свои мысли. WH>То что ни то ни другое не имеет никакого отношения к OrderedChoice. WH>Я тебе раз 50 наверное об этом говорил но ты не слушаешь.
Ау... Жду развернутых объяснений. Остальные правки внес. Пока не обновляю статью чтобы не делать два раза одну и ту же работу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.