############################################################################
#
# 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
This page produced by UniDoc on 2021/04/15 @ 23:59:44.