解析表达式可以使用以下语法定义:
(and e1 e2…)必须全部匹配的一组 PEX 序列。and 形式是可选且隐式的。
(or e1 e2…)带优先级的选择,与 Elisp 中类似,选择项会按顺序尝试, 并使用第一个成功的匹配。注意这与上下文无关文法不同, 后者在多个匹配间的选择是不确定的。
(any)匹配任意单个字符,等同于正则表达式 “.”。
string字面量字符串。
(char c)单个字符 c,以 Elisp 字符字面量形式表示。
(* e)表达式 e 的零次或多次出现,等同于正则表达式 ‘*’。 匹配始终为 “贪婪(greedy)” 模式。
(+ e)表达式 e 的一次或多次出现,等同于正则表达式 ‘+’。 匹配始终为 “贪婪(greedy)” 模式。
(opt e)表达式 e 的零次或一次出现,等同于正则表达式 ‘?’。
symbol代表先前定义的 PEG 规则的符号。
(range ch1 ch2)从 ch1 到 ch2 的字符范围, 等同于正则表达式 ‘[ch1-ch2]’。
[ch1-ch2 "+*" ?x]字符集,可以包含范围、字符字面量或字符字符串。
[ascii cntrl]具名字符类列表。
(syntax-class name)单个语法类。
(funcall e args…)使用参数 args 调用 PEX e
(先前通过 define-peg-rule 定义)。
(null)空字符串。
以下表达式用作锚点或测试——它们不会移动点位置, 但会返回布尔值,可用于约束匹配,从而控制解析过程(see 编写 PEG 规则)。
(bob)缓冲区开头。
(eob)缓冲区结尾。
(bol)行首。
(eol)行尾。
(bow)词首。
(eow)词尾。
(bos)符号首。
(eos)符号尾
(if e)如果从点位置解析 PEX e 成功则返回非 nil(点位置不移动)。
(not e)如果从点位置解析 PEX e 失败则返回非 nil(点位置不移动)。
(guard exp)将 Lisp 表达式 exp 的值视为布尔值。
字符类匹配可以引用 peg-char-classes 中命名的类,
等同于正则表达式中的字符类(see Character Classes)。