/rdparse

A recursive-descent parser generator

Primary LanguageCommon Lisp

rdparse

rdparse is recursive descent parser written in Common Lisp.

Installation

(asdf:load-system :rdparse)

Usage example

> (use-package :rdparse)
T

;;; Defining a VERY simple expression parser:
> (defparser expr
     :rules ((sum (:alt
                   (:seq :numeric "+" sum)
                   :numeric))))
EXPR

> (expr "1 + 2")
(SUM ([NUMERIC 1] '+' (SUM [NUMERIC 2])))
NIL
NIL

;;; Using a parse tree function:
;;; Parse tree function need to be defined before the DEFPARSER form is evaluated
> (defun sum (symbol tree level)
    (if (token-p tree)
        (read-from-string (token-value tree))
        (+ (read-from-string (token-value (first tree)))
           (third tree))))
SUM

> (defparser expr 
     :rules ((sum (:alt 
                   (:seq :numeric "+" sum) 
                   :numeric))))
EXPR

> (EXPR "1 + 2")
3
NIL
NIL