############################################################################ # # File: emptygen.icn # # Subject: Procedures for meta-translation code generation # # Author: Ralph E. Griswold # # Date: December 5, 1995 # ############################################################################ # # This file is in the public domain. # ############################################################################ # # This program is designed to be linked with the output of the meta- # translator. As given here, they produce an identity translation. # Modifications can be made to effect different translations. # # The procedures here are just wrappers. This file is a skeleton that # can be used as a basis for code-generation procedures. # ############################################################################ # # Bug: The invocable declaration is not handled properly. "invocable all" # will get by, but some other forms produce syntax errors. The # problem is in the meta-translator itself, not in this program. # ############################################################################ # # Links: strings # ############################################################################ link strings procedure main() Mp() # call meta-procedure end procedure Alt(e1, e2) # e1 | e2 end procedure Apply(e1, e2) # e1 ! e2 end procedure Arg(e) # procedure argument (parameter) end procedure Asgnop(op, e1, e2) # e1 op e2 end procedure Augscan(e1, e2) # e1 ?:= e2 end procedure Bamper(e1, e2) # e1 & e2 end procedure Binop(op, e1, e2) # e1 op e2 end procedure Body(es[]) # procedure body end procedure Break(e) # break e end procedure Case(e, clist) # case e of { caselist } end procedure Cclause(e1, e2) # e1 : e2 end procedure Clist(cclause1, cclause2) # cclause1 ; cclause2 end procedure Clit(c) # 'c' end procedure Compound(es[]) # { e1; e2; ... } end procedure Create(e) # create e end procedure Default(e) # default: e end procedure End() # end end procedure Every(e) # every e end procedure EveryDo(e1, e2) # every e1 do e2 end procedure Fail() # fail end procedure Field(e, f) # e . f end procedure Global(vs[]) # global v1, v2, ... end procedure If(e1, e2) # if e1 then e2 end procedure IfElse(e1, e2, e3) # if e1 then e2 else e3 end procedure Ilit(i) # i end procedure Initial(e) # initial e end procedure Invocable(ss[]) # invocable s1, s2, ... (problem) end procedure Invoke(e, es[]) # e(e1, e2, ...) end procedure Key(s) # &s end procedure Limit(e1, e2) # e1 \ e2 end procedure Link(vs[]) # link "v1, v2, ..." end procedure List(es[]) # [e1, e2, ... ] end procedure Local(vs[]) # local v1, v2, ... end procedure Next() # next end procedure Not(e) # not e end procedure Null() # &null end procedure Paren(es[]) # (e1, e2, ... ) end procedure Pdco(e, es[]) # e{e1, e2, ... } end procedure Proc(n, vs[]) # procedure n(v1, v2, ...) end procedure Record(n, fs[]) # record n(f1, f2, ...) end procedure Repeat(e) # repeat e end procedure Return(e) # return e end procedure Rlit(r) # r end procedure Scan(e1, e2) # e1 ? e2 end procedure Section(op, e1, e2, e3) # e1[e2 op e3] end procedure Slit(s) # "s" end procedure Static(vs[]) # static v1, v2, .. end procedure Subscript(e1, e2) # e1[e2] end procedure Suspend(e) # suspend e end procedure SuspendDo(e1, e2) # suspend e1 do e2 end procedure To(e1, e2) # e1 to e2 end procedure ToBy(e1, e2, e3) # e1 to e2 by e3 end procedure Repalt(e) # |e end procedure Unop(op, e) # op e end procedure Until(e) # until e end procedure UntilDo(e1, e2) # until e1 do e2 end procedure Var(v) # v end procedure While(e) # while e end procedure WhileDo(e1, e2) # while e1 do e2 end