application ::= $< :prod *:args $> => [ `(apply ',(intern (string-upcase prod)) ,@args)] argument ::= ~$> ocharacter ::= $$ :x => [ x ] expr ::= :x ( )*:xs => [ `(or ,x ,@xs) ] expr1 ::= | | | ( | | | | | | ):x => [`(apply 'exactly ,x)] | (~$" )*:cs $" => [ `(and ,@(loop for c in cs collect `(apply 'exactly ,c)) `(action ,(string cs))) ] | :x => [x] | => ['(form (lambda () t))] | :x => [`(form ,x)] expr2 ::= :x => [(list 'not x)] | :x => [(list 'not (list 'not x))] | expr3 ::= :r ( ![ (list 'many r)]:r | ![ (list 'many1 r)]:r | ) ( $: :n ![ (pushnew (intern (string-upcase n)) (locals o))] ![`(assign ,n ,r)]:r | ) => [r] | :n ![ (pushnew (intern (string-upcase n)) (locals o))] => [`(assign ,n (apply 'anything))] expr4 ::= *:xs => [`(and ,@xs)] hostLanguageExpression ::= ((~$] )*):expr => [ (coerce expr 'string) ] hostLanguageTinyExpression ::= $' (~$' )*:xs $' => [ (coerce xs 'string) ] | +:xs => [ (intern (string-upcase (coerce xs 'string))) ] | lispexpr ::= ( | ):x => [ x ] lispatom ::= ( | | ) lispoperator ::= $> | $< | $+ | $! | $= | $- | $_ lisplist ::= $( $) => [ nil ] | $( ( | ):x (+ ( | ))*:xs $) => [ (cons x xs) ] okeyword :xs ::= ~( | ) => [xs] name ::= :x ( | )*:xs => [ (concatenate 'string (string x) (coerce xs 'string))] onumber ::= +:ip ( $. +:fp => [(format nil "~A.~A" ip fp)] | => [ (read-from-string (coerce ip 'string)) ]) production ::= &(:name) :x ( )*:xs => [`(prod ,name ,(locals o) (or ,x ,@xs))] productionPart :requiredName ::= :name ?[(equal name requiredName)] :body ( :r => [(list 'action r)] | '> :r => [(list 'action r)] semanticPredicate ::= :r => [(list 'pred r)] ostring ::= $' (~$' )*:s $' => [(coerce s 'string)] osymbol ::= $# ( | :s => [ `(subseq ,s 1)] ):n => [ `(quote ,(intern (string-upcase (coerce n 'string)))) ] token :xs ::=