Здравствуйте, Ka3a4oK, Вы писали:
KK>Хотелось бы иметь возможность создавать правила с более гибким заданием повторов, а не только +, *.
KK>Например: KK>digit_p{4} — ровно четыре цифры KK>digit_p{0-4} — не более четырех цифр KK>digit_p{1-4} — какое-либо количество цифр, но не более четырех
Народ! Нам тратить время на PEG неразумно. Скоро будет парсер от Н2. Вот там может и добавим такую фичу.
В самом PEG-е все необходимое есть. Нужно только синтаксис прикрутить. Если кому-то хочется, то можете прикрутить сами.
На мой же взгляд толку от такой фичи не много, так как проще указать нужное количество раз правило digit_p. В грамматике таких мест не много. Так что экономия будет не велика.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Народ! Нам тратить время на PEG неразумно. Скоро будет парсер от Н2. Вот там может и добавим такую фичу.
Этот парсер можно будет использовать как библиотеку для моих текущих проектов на текущей(n1) версии немерла? Сильно ли надо будет перепиливать грамматики?
Здравствуйте, Ka3a4oK, Вы писали:
KK>Этот парсер можно будет использовать как библиотеку для моих текущих проектов на текущей(n1) версии немерла?
Да.
KK>Сильно ли надо будет перепиливать грамматики?
Грамматика будет довольно сильно отличаться. Но перевести на нее ПЕГ не так чтобы сложно. У меня творческий перевод грамматики C# занял где-то пару дней.
Вот что точно будет сильно отличаться, так это метод обработки грамматики. Н2 автоматически строит АСТ и предоставляет ДСЛ по его обработке.
Плюс будет восстановление после обнаружения ошибок. Поддержка подсветки и фолдинга в IDE. (возможно) Инкрементальный парсинг (для редактирования в IDE). Модульность. Динамическая раширяемость.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Ka3a4oK, Вы писали:
KK>>Этот парсер можно будет использовать как библиотеку для моих текущих проектов на текущей(n1) версии немерла?
VD>Да.
KK>>Сильно ли надо будет перепиливать грамматики?
VD>Грамматика будет довольно сильно отличаться. Но перевести на нее ПЕГ не так чтобы сложно. У меня творческий перевод грамматики C# занял где-то пару дней.
VD>Вот что точно будет сильно отличаться, так это метод обработки грамматики. Н2 автоматически строит АСТ и предоставляет ДСЛ по его обработке.
VD>Плюс будет восстановление после обнаружения ошибок. Поддержка подсветки и фолдинга в IDE. (возможно) Инкрементальный парсинг (для редактирования в IDE). Модульность. Динамическая раширяемость.
Уже хочу.
Re: [фичреквест][PEG] задание количеств повторов
От:
Аноним
Дата:
10.05.13 16:19
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:
KK>Хотелось бы иметь возможность создавать правила с более гибким заданием повторов, а не только +, *.
KK>Например: KK>digit_p{4} — ровно четыре цифры KK>digit_p{0-4} — не более четырех цифр KK>digit_p{1-4} — какое-либо количество цифр, но не более четырех
Такая возможность вроде бы есть:
digit = ['0'..'9'];
digits1 = digit{4,4}; //ровно четыре цифры
digits2 = digit{0,4}; //не более четырех цифр
digits2 = digit{1,4}; //какое-либо количество цифр, но не более четырех
А> digit = ['0'..'9'];
А> digits1 = digit{4,4}; //ровно четыре цифры
А> digits2 = digit{0,4}; //не более четырех цифр
А> digits2 = digit{1,4}; //какое-либо количество цифр, но не более четырех
А>
Здравствуйте, Ka3a4oK, Вы писали:
KK>Я так понимаю теперь не будет обработчиков.
Да. Парсинг будет производиться в промежуточный двоичный формат.
KK>А результатом успешного парсинга будет ссылка на АСТ.
Не совсем. АСТ (в виде набора объектов) будет не обязательным. Результатом будет специальный тип данных хранящий информацию о результате парсинга. Там будет много чего: информация об ошибках, двоичный АСТ и т.п.
У этого типа данных можно будет вызвать обходчик двоичного АСТ-а и получить те или иные данные. На сегодня это: информация о подсветке, информация о фолдинге, список ошибок и материализованный (объектный) АСТ.
KK>API будет заключаться в возможности обойти дерево?
На первом этапе будет что-то вроде методов объявляемых прямо на правилах грамматики. Методов может быть любое количество и они могут иметь любое количество параметров разных типов. И конечно же эти методы будут иметь возможность обратиться к подправилам правила на котом они объявлены для получения значений (строк, размеров). Их результаты можно будет кэшировать применением атрибута [Cached]. Сами методы должны быть детерминированными, но могут зависеть от внешних объектов (например, дерева глобальных символов).
Вот пример метода Value вычисляющего значение строки для строкового литерала:
Здесь методы заданы прямо в грамматике. Планируется, так же, сделать так чтобы методы можно было объявлять отдельно от грамматики (и даже для внешней грамматики).
На первых порах такие методы будут просто превращаться в методы материализованного АСТ. В дальнейшем планируется их виртуализировать (будут работать по двоичному АСТ-у, без создания объектов).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.