Function: peg-parse

peg-parse is a macro defined in peg.el.gz.

Signature

(peg-parse &rest PEXS)

Documentation

Match PEXS at point.

PEXS is a sequence of PEG expressions, implicitly combined with and. Returns STACK if the match succeed and signals an error on failure, moving point along the way. For backward compatibility (and convenience) PEXS can also be a list of RULES in which case we run the first such rule. In case of ambiguity, prefix PEXS with "" so it doesn't look like a list of rules.

View in manual

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/peg.el.gz
;; Sometimes (with-peg-rules ... (peg-run (peg ...))) is too
;; long-winded for the task at hand, so `peg-parse' comes in handy.
(defmacro peg-parse (&rest pexs)
  "Match PEXS at point.
PEXS is a sequence of PEG expressions, implicitly combined with `and'.
Returns STACK if the match succeed and signals an error on failure,
moving point along the way.
For backward compatibility (and convenience) PEXS can also be a list of
RULES in which case we run the first such rule.  In case of ambiguity,
prefix PEXS with \"\" so it doesn't look like a list of rules."
  (if (and (consp (car pexs))
           (symbolp (caar pexs))
           (not (or (get (peg--rule-id (caar pexs)) 'peg--rule-definition)
                    (ignore-errors
                      (not (eq 'call (car (peg-normalize (car pexs)))))))))
      ;; The first of `pexs' has not been defined as a rule, so assume
      ;; that none of them have been and they should be fed to
      ;; `with-peg-rules'
      `(with-peg-rules ,pexs (peg-run (peg ,(caar pexs)) #'peg-signal-failure))
    `(peg-run (peg ,@pexs) #'peg-signal-failure)))