Code cleanup againt SBCL, CMUCL and ECL.
[cl-opossum.git] / example.peg
blob9d7476d0d178b48adfaa3c65ab7a8100b0086062
1 # Sample PEG file to demonstrate CL-Opossum use -*- mode:peg -*-
2 # $Id$
4 # Every successfully matched rule makes a list named DATA available to the action code
7 Expr <- Sum { data }
9 Sum <- Product (('+' / '-') Product)*  { 
10         `(+ ,(first data) 
11             ,(reduce #'(lambda (op/p tail)
12                         (if (char= #\+ (car op/p))
13                             `(+ ,(second op/p) ,old)
14                             `(- ,(second op/p) ,old))))
15               (cdr data) :from-end T :initial-value 0))
16         }
18 Product <- Value (('*' / '/') Value)* {
19         `(* ,(first data) 
20             ,(reduce #'(lambda (op/p tail)
21                         (if (char= #\* (car op/p))
22                             `(* ,(second op/p) ,old)
23                             `(/ ,(second op/p) ,old))))
24               (cdr data) :from-end T :initial-value 1))
25         }
27 Value <- [1-9] [0-9]+   { (reduce  #'(lambda (x y) (+ y (* x 10))) data :initial-value 0) }
28         / '(' Expr ')'  { (second data) }