Комментарии 3
Синтаксис именования скобок давно установлен де факто стандартом: Раз, два, три. Вы могли бы выбрать вариант Perl или Python уже по вкусу, но остаться в рамках совместимости с PCRE и многими другими движками. Сейчас у вас синтаксис получился с заметным потенциальным (а то и реальным) конфликтом с другим механизмом, который используется в таких выражениях — {} как установкой квантификаторов (например: \d{1,3}), и требуется сложный разбор вперёд, чтобы убедиться, что ->{что-то} это именно ваша конструкция, по содержанию этого «что-то», а не дефис, после которого квантификаторы для правой угловой скобки.
Идея с предикатами неплоха, но 1) давно есть в некоторых движках, как в том же perlre, 2) есть альтернативное движение, которое в столь сложных случаях вместо языка регулярных выражений подключает PEG-движки. Многим они значительно удобнее — например, см. эту дискуссию.
Ещё непонятно, как именно вы собрались подключать сложные внешние предикаты в движок — встроенные средства для этого, насколько я знаю, недостаточны.
В общем же статья воспринимается примерно как «зверски круто, но чем они там таким занимаются, что это всё требуется, но они порождают кучу велосипедов для языка, популярность которого близка к нулю?» (ничего личного, но факт)
Идея с предикатами неплоха, но 1) давно есть в некоторых движках, как в том же perlre, 2) есть альтернативное движение, которое в столь сложных случаях вместо языка регулярных выражений подключает PEG-движки. Многим они значительно удобнее — например, см. эту дискуссию.
Ещё непонятно, как именно вы собрались подключать сложные внешние предикаты в движок — встроенные средства для этого, насколько я знаю, недостаточны.
В общем же статья воспринимается примерно как «зверски круто, но чем они там таким занимаются, что это всё требуется, но они порождают кучу велосипедов для языка, популярность которого близка к нулю?» (ничего личного, но факт)
+1
Сейчас у вас синтаксис получился с заметным потенциальным (а то и реальным) конфликтом с другим механизмом, который используется в таких выражениях — {} как установкой квантификаторов (например: \d{1,3}), и требуется сложный разбор вперёд, чтобы убедиться, что ->{что-то} это именно ваша конструкция
Нет, разбор не такой уж и сложный. По крайней мере отличить предикаты в фигурных скобках от цифр не так сложно.
Идея с предикатами неплоха, но 1) давно есть в некоторых движках, как в том же perlre
Не нашел такого в pelre. Если Вы имеете в виду конструкции (??{}) и (?{}), то это не предикаты, а алгоритмический perl-код (или, возможно, код на ином языке). Здесь же предлагается языко-независимое логическое решение. Думаю, оно несколько компактнее и проще, чем (??{}) и (?{}). Если я ошибаюсь, поправьте меня.
2) есть альтернативное движение, которое в столь сложных случаях вместо языка регулярных выражений подключает PEG-движки.
Насколько я почитал, PEG все-равно не решает даже проблему перечисления альтернатив (они все равно присутствуют в грамматике, а хотелось бы подкачивать их из таблицы). Не видел я там и нестрогого сравнения с образцом.
Ещё непонятно, как именно вы собрались подключать сложные внешние предикаты в движок — встроенные средства для этого, насколько я знаю, недостаточны.
Теоретически, можно написать произвольное количество предикатов, включить их в динамически подгружаемый модуль и придумать regex-директиву для подключения модуля.
0
> Нет, разбор не такой уж и сложный. По крайней мере отличить предикаты в фигурных скобках от цифр не так сложно.
Я не о принципиальной возможности разбора (на сейчас), а о создании потенциального конфликта. Это путь, который прошли многие языки, а больше всего известно в C++: на данном этапе конфликта нет, а чуть позже уже не поймёшь, ">>" это сдвиг или закрытие двух шаблонов; most vexing parse, и тому подобное. Кто наступил на эти грабли — старается их не создавать даже в отдалённой перспективе. Ибо чем и как вы захотите через год расширить этот язык — никому пока не известно…
> Не нашел такого в pelre. Если Вы имеете в виду конструкции (??{}) и (?{}),
Да. Что с ними громоздко — факт, и тут независимый язык… в перле, который интерпретатор, разницы особой нет, в компилируемом — да, приходится вставлять свой движок интерпретатора.
> Насколько я почитал, PEG все-равно не решает даже проблему перечисления альтернатив
Сам по себе — да. Я вообще не об этом говорю, а о том, что начиная с некоторого уровня сложности грамматики разбираемого — регулярные выражения становятся настолько громоздкими, что хочется переписать их в явную грамматику.
> Теоретически, можно написать произвольное количество предикатов, включить их в динамически подгружаемый модуль и придумать regex-директиву для подключения модуля.
Ну, у вас даже на этом этапе свой язык завёлся с какими-то стандартными функциями… значит, часть такого уже сделана.
Я не о принципиальной возможности разбора (на сейчас), а о создании потенциального конфликта. Это путь, который прошли многие языки, а больше всего известно в C++: на данном этапе конфликта нет, а чуть позже уже не поймёшь, ">>" это сдвиг или закрытие двух шаблонов; most vexing parse, и тому подобное. Кто наступил на эти грабли — старается их не создавать даже в отдалённой перспективе. Ибо чем и как вы захотите через год расширить этот язык — никому пока не известно…
> Не нашел такого в pelre. Если Вы имеете в виду конструкции (??{}) и (?{}),
Да. Что с ними громоздко — факт, и тут независимый язык… в перле, который интерпретатор, разницы особой нет, в компилируемом — да, приходится вставлять свой движок интерпретатора.
> Насколько я почитал, PEG все-равно не решает даже проблему перечисления альтернатив
Сам по себе — да. Я вообще не об этом говорю, а о том, что начиная с некоторого уровня сложности грамматики разбираемого — регулярные выражения становятся настолько громоздкими, что хочется переписать их в явную грамматику.
> Теоретически, можно написать произвольное количество предикатов, включить их в динамически подгружаемый модуль и придумать regex-директиву для подключения модуля.
Ну, у вас даже на этом этапе свой язык завёлся с какими-то стандартными функциями… значит, часть такого уже сделана.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Регулярные выражения + логическое программирование. Что в результате?