next up previous contents index
Next: 7.4 Prolog Code Generation Up: 7 Implementation Notes Previous: 7.2 Type-Checking

7.3 Lisp Code Generation

external

Lisp code generation takes as argument the environment generated by the type-checker. It produces a Lisp function ( #:L:formalism_create if L is the name of the formalism) that creates a VTP formalism. This function is put as an annotation ( LL_code) to the source specification. It first creates the formalism (formalism:make), empty phyla (phylum:make), and operators (operator:make). It then constructs the effective value of the phyla (phylum:insert), creates the ``meta'' operator then close the formalism (formalism:complete).

Here is the Lisp code generated for the previous example:

(defun #:L:formalism-create ()
  (lets ((L-form ({formalism}:make 'L))
         (Phy-phy ({phylum}:make 'Phy L-form))
         (f-op ({operator}:make 'f L-form 1 Phy-phy))
         (id-op ({operator}:make 'id L-form 0 {name})))
        ({phylum}:insert Phy-phy f-op)
        ({phylum}:insert Phy-phy id-op)
        ({formalism}:metavarop
            L-form 
            ({operator}:make 'meta L-form 0 {metavariable}))
        (addop_meta L-form)
        ({formalism}:complete L-form)
        L-form))

Notice that the Centaur VTP allows the use of a phylum belonging to a foreign formalism in the domain of an operator (formalism inclusion). As this was not the case in Mentor, such a formalism cannot be saved in a (.t) table. For the same reason, polish (.po) files cannot be used with AS defined formalisms.

external


next up previous contents index
Next: 7.4 Prolog Code Generation Up: 7 Implementation Notes Previous: 7.2 Type-Checking

Thierry Despeyroux
Fri May 16 15:24:06 MET DST 1997