ocompile ::= {#prod :name :locals :body} => [ (list 'defmethod (intern (string-upcase name)) `((o ,*ometa-compiler-target*)) (list 'let locals body))] | {#and *:parts} => [ `(oAnd o ,(cons 'list (loop for p in parts collect `(lambda (o) ,p)))) ] | {#or *:parts} => [ `(oOr o ,(cons 'list (loop for p in parts collect `(lambda (o) ,p)))) ] | {#many :term} => [ `(omany o (lambda (o) ,term)) ] | {#many1 :term} => [ `(omany1 o (lambda (o) ,term)) ] | {#form} => [ `(oform o (lambda (o) t)) ] | {#form :contents} => [ `(oform o (lambda (o) ,contents)) ] | {#not :pattern} => [ `(onot o (lambda (o) ,pattern)) ] | {#apply #super :prod *:args} => [ (error "call to rule in super class not supported yet ~A ~A" prod args) ] | {#apply (~'super' ):prod} => [ `(apply ,prod (list o)) ] | {#apply (~'super' ):prod *:args} => [ `(applyWithArguments ,prod o (list ,@args)) ] | {#assign :name :value} => [ `(let ((v ,value)) (setf ,(intern (string-upcase name)) v) v) ] | {#pred :code} => [ `(opred o ,(read-from-string code)) ] | {#action :code} => [ (read-from-string code) ]