Как стать автором
Обновить

Комментарии 3

Синтаксис именования скобок давно установлен де факто стандартом: Раз, два, три. Вы могли бы выбрать вариант Perl или Python уже по вкусу, но остаться в рамках совместимости с PCRE и многими другими движками. Сейчас у вас синтаксис получился с заметным потенциальным (а то и реальным) конфликтом с другим механизмом, который используется в таких выражениях — {} как установкой квантификаторов (например: \d{1,3}), и требуется сложный разбор вперёд, чтобы убедиться, что ->{что-то} это именно ваша конструкция, по содержанию этого «что-то», а не дефис, после которого квантификаторы для правой угловой скобки.

Идея с предикатами неплоха, но 1) давно есть в некоторых движках, как в том же perlre, 2) есть альтернативное движение, которое в столь сложных случаях вместо языка регулярных выражений подключает PEG-движки. Многим они значительно удобнее — например, см. эту дискуссию.
Ещё непонятно, как именно вы собрались подключать сложные внешние предикаты в движок — встроенные средства для этого, насколько я знаю, недостаточны.

В общем же статья воспринимается примерно как «зверски круто, но чем они там таким занимаются, что это всё требуется, но они порождают кучу велосипедов для языка, популярность которого близка к нулю?» (ничего личного, но факт)
Сейчас у вас синтаксис получился с заметным потенциальным (а то и реальным) конфликтом с другим механизмом, который используется в таких выражениях — {} как установкой квантификаторов (например: \d{1,3}), и требуется сложный разбор вперёд, чтобы убедиться, что ->{что-то} это именно ваша конструкция

Нет, разбор не такой уж и сложный. По крайней мере отличить предикаты в фигурных скобках от цифр не так сложно.
Идея с предикатами неплоха, но 1) давно есть в некоторых движках, как в том же perlre

Не нашел такого в pelre. Если Вы имеете в виду конструкции (??{}) и (?{}), то это не предикаты, а алгоритмический perl-код (или, возможно, код на ином языке). Здесь же предлагается языко-независимое логическое решение. Думаю, оно несколько компактнее и проще, чем (??{}) и (?{}). Если я ошибаюсь, поправьте меня.
2) есть альтернативное движение, которое в столь сложных случаях вместо языка регулярных выражений подключает PEG-движки.

Насколько я почитал, PEG все-равно не решает даже проблему перечисления альтернатив (они все равно присутствуют в грамматике, а хотелось бы подкачивать их из таблицы). Не видел я там и нестрогого сравнения с образцом.
Ещё непонятно, как именно вы собрались подключать сложные внешние предикаты в движок — встроенные средства для этого, насколько я знаю, недостаточны.

Теоретически, можно написать произвольное количество предикатов, включить их в динамически подгружаемый модуль и придумать regex-директиву для подключения модуля.
> Нет, разбор не такой уж и сложный. По крайней мере отличить предикаты в фигурных скобках от цифр не так сложно.

Я не о принципиальной возможности разбора (на сейчас), а о создании потенциального конфликта. Это путь, который прошли многие языки, а больше всего известно в C++: на данном этапе конфликта нет, а чуть позже уже не поймёшь, ">>" это сдвиг или закрытие двух шаблонов; most vexing parse, и тому подобное. Кто наступил на эти грабли — старается их не создавать даже в отдалённой перспективе. Ибо чем и как вы захотите через год расширить этот язык — никому пока не известно…

> Не нашел такого в pelre. Если Вы имеете в виду конструкции (??{}) и (?{}),

Да. Что с ними громоздко — факт, и тут независимый язык… в перле, который интерпретатор, разницы особой нет, в компилируемом — да, приходится вставлять свой движок интерпретатора.

> Насколько я почитал, PEG все-равно не решает даже проблему перечисления альтернатив

Сам по себе — да. Я вообще не об этом говорю, а о том, что начиная с некоторого уровня сложности грамматики разбираемого — регулярные выражения становятся настолько громоздкими, что хочется переписать их в явную грамматику.

> Теоретически, можно написать произвольное количество предикатов, включить их в динамически подгружаемый модуль и придумать regex-директиву для подключения модуля.

Ну, у вас даже на этом этапе свой язык завёлся с какими-то стандартными функциями… значит, часть такого уже сделана.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории