Определения PEX
Выражения разбора можно определять с помощью следующего синтаксиса:
(and e1 e2…)-
Последовательность выражений PEX, которые все должны совпасть. Форма
andявляется необязательной и подразумевается по умолчанию. (or e1 e2…)-
Упорядоченные варианты, то есть, как и в Elisp, варианты проверяются по порядку, а первый успешный вариант используется. Обратите внимание, что это отличается от контекстно-свободных грамматик, в которых выбор между несколькими совпадениями не определён.
(any)-
Совпадает с любым одиночным символом, как регулярное выражение «.».
string-
Буквальная строка.
(char c)-
Одиночный символ c, записанный как символьный литерал Elisp.
(* e)-
Ноль или более повторений выражения e, как в регулярном выражении ‘*’. Сопоставление всегда выполняется «жадно».
(+ e)-
Одно или более повторений выражения e, как в регулярном выражении ‘+’. Сопоставление всегда выполняется «жадно».
(opt e)-
Ноль или одно повторение выражения e, как в регулярном выражении ‘?’.
symbol-
Символ, обозначающий ранее определённое правило PEG.
(range ch1 ch2)-
Диапазон символов от ch1 до ch2, как в регулярном выражении ‘[ch1-ch2]’.
[ch1-ch2 "+*" ?x]-
Набор символов, который может включать диапазоны, символьные литералы или строки символов.
[ascii cntrl]-
Список именованных классов символов.
(syntax-class name)-
Один класс синтаксиса.
(funcall e args…)-
Вызов выражения PEX e (ранее определённого с помощью
define-peg-rule) с аргументами args. (null)Пустая строка.
Следующие выражения используются как якоря или проверки — они не перемещают точку, а возвращают логическое значение, которое можно использовать для ограничения совпадений и управления процессом разбора (см. Написание правил PEG).
(bob)-
Начало буфера.
(eob)-
Конец буфера.
(bol)-
Начало строки.
(eol)-
Конец строки.
(bow)-
Начало слова.
(eow)-
Конец слова.
(bos)-
Начало символа.
(eos)-
Конец символа.
(if e)-
Возвращает значение, отличное от
nil, если разбор выражения PEX e начиная с точки завершается успешно (точка не перемещается). (not e)-
Возвращает значение, отличное от
nil, если разбор выражения PEX e начиная с точки завершается неудачно (точка не перемещается). (guard exp)Интерпретирует значение Lisp-выражения exp как логическое.
При сопоставлении с классами символов можно ссылаться на классы, перечисленные в peg-char-classes, эквивалентные классам символов в регулярных выражениях (см. Классы символов)
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/PEX-Definitions.html