############################################################################
#
#	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

