1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
|
<HTML>
<HEAD>
<!-- This HTML file has been created by texi2html 1.29
from ../tnf/modlib.tnf on 12 Febuary 2003 -->
<TITLE>Introduction of specification modules - Instantiation and Use of Modules</TITLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000" BACKGROUND="gifs/bg.gif">
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0" VALIGN=BOTTOM>
<TR VALIGN=BOTTOM>
<TD WIDTH="160" VALIGN=BOTTOM><IMG SRC="gifs/elilogo.gif" BORDER=0> </TD>
<TD WIDTH="25" VALIGN=BOTTOM><img src="gifs/empty.gif" WIDTH=25 HEIGHT=25></TD>
<TD ALIGN=LEFT WIDTH="600" VALIGN=BOTTOM><IMG SRC="gifs/title.gif"></TD>
</TR>
</TABLE>
<HR size=1 noshade width=785 align=left>
<TABLE BORDER=0 CELLSPACING=2 CELLPADDING=0>
<TR>
<TD VALIGN=TOP WIDTH="160">
<h4>General Information</h4>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="index.html">Eli: Translator Construction Made Easy</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="gindex_toc.html">Global Index</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="faq_toc.html" >Frequently Asked Questions</a> </td></tr>
</table>
<h4>Tutorials</h4>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="EliRefCard_toc.html">Quick Reference Card</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="novice_toc.html">Guide For new Eli Users</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="news_toc.html">Release Notes of Eli</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="nametutorial_toc.html">Tutorial on Name Analysis</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="typetutorial_toc.html">Tutorial on Type Analysis</a></td></tr>
</table>
<h4>Reference Manuals</h4>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="ui_toc.html">User Interface</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="pp_toc.html">Eli products and parameters</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lidoref_toc.html">LIDO Reference Manual</a></td></tr>
</table>
<h4>Libraries</h4>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lib_toc.html">Eli library routines</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="modlib_toc.html">Specification Module Library</a></td></tr>
</table>
<h4>Translation Tasks</h4>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lex_toc.html">Lexical analysis specification</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="syntax_toc.html">Syntactic Analysis Manual</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="comptrees_toc.html">Computation in Trees</a></td></tr>
</table>
<h4>Tools</h4>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lcl_toc.html">LIGA Control Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="show_toc.html">Debugging Information for LIDO</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="gorto_toc.html">Graphical ORder TOol</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="fw_toc.html">FunnelWeb User's Manual</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="ptg_toc.html">Pattern-based Text Generator</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="deftbl_toc.html">Property Definition Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="oil_toc.html">Operator Identification Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="tp_toc.html">Tree Grammar Specification Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="clp_toc.html">Command Line Processing</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="cola_toc.html">COLA Options Reference Manual</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="idem_toc.html">Generating Unparsing Code</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="mon_toc.html">Monitoring a Processor's Execution</a> </td></tr>
</table>
<h4>Administration</h4>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="sysadmin_toc.html">System Administration Guide</a> </td></tr>
</table>
<HR WIDTH="100%">
<CENTER> <A HREF="mailto:elibugs@cs.colorado.edu"><IMG SRC="gifs/button_mail.gif" NOSAVE BORDER=0 HEIGHT=32 WIDTH=32></A><A HREF="mailto:elibugs@cs.colorado.edu">Questions, Comments, ....</A></CENTER>
</TD>
<TD VALIGN=TOP WIDTH="25"><img src="gifs/empty.gif" WIDTH=25 HEIGHT=25></TD>
<TD VALIGN=TOP WIDTH="600">
<H1>Introduction of specification modules</H1>
<P>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="modlib_1.html"><IMG SRC="gifs/prev.gif" ALT="Previous Chapter" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="modlib_toc.html"><IMG SRC="gifs/up.gif" ALT="Table of Contents" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT="">
<HR size=1 noshade width=600 align=left>
<H1><A NAME="SEC2" HREF="modlib_toc.html#SEC2">Instantiation and Use of Modules</A></H1>
<P>
To use a specification module, e.g. the <CODE>AlgScope</CODE> module in the
<CODE>Name</CODE> library,
it is instantiated by the line
<P>
<PRE>
$/Name/AlgScope.gnrc :inst
</PRE>
in a <CODE>.specs</CODE> file. All component specification files of the
module are thus included in the set of specifications. A derivation
<PRE>
x.specs:allspecs
</PRE>
can be used to inspect all the instantiated files.
<P>
The module instance obtained by the instantiation command above
provides <CODE>.lido</CODE> symbol computations for a symbol named <CODE>IdUseEnv</CODE>,
among other specifications.
<P>
The above instantiation command is sufficient if only one instantiation of
the <CODE>AlgScope</CODE> module is used.
<A NAME="IDX10"></A>
<A NAME="IDX9"></A>
Several instantiations of the same module are distinguished by generic
instance names supplied as arguments of the instantiation
<P>
<PRE>
$/Name/AlgScope.gnrc +instance=CtrlVar :inst
</PRE>
In this case another instance of the <CODE>AlgScope</CODE> module is generated
having the instance name <CODE>CtrlVar</CODE>. It may coexist with the
unnamed instance created above. The names of its files and
of specified entities (symbols, attributes, etc.) are
prefixed by the instance identifier, e.g.
<CODE>CtrlVarIdUseEnv</CODE>.
<A NAME="IDX11"></A>
<A NAME="IDX12"></A>
<P>
Some modules have a second generic parameter <CODE>referto</CODE>.
It may specialize the module in a second dimension on instantiation:
The <CODE>AlgScope</CODE> module provides compuations for <CODE>Key</CODE> attributes
in <CODE>IdUseEnv</CODE> contexts that represent applied occurrences of identifiers.
In some situations it may be necessary to compute more than one
<CODE>Key</CODE> attribute in an <CODE>IdUseEnv</CODE> context (if the identifier is
bound in different name spaces). Hence, the <CODE>referto</CODE> of
the <CODE>AlgScope</CODE> module modifies the names of the <CODE>Key</CODE> attributes.
If the <CODE>AlgScope</CODE> module is instantiated by
<P>
<PRE>
$/Name/AlgScope.gnrc +instance=CtrlVar +referto=Ctrl :inst
</PRE>
it provides computations for the attribute <CODE>CtrlVarIdUseEnv.CtrlKey</CODE>,
among other computations.
<P>
Other modules use the <CODE>referto</CODE> parameter for different purposes, e.g.
specifying the element type for a generic stack module.
<P>
If any of the two generic parameters <CODE>instance</CODE> or <CODE>referto</CODE>
is omitted, as in the first two examples, their value is
assumed to be the empty string.
<P>
If a module is instantiated as described its facilities can be used
in certain components of the user's specification:
Symbol computations as those provided by the <CODE>AlgScope</CODE> module
are associated to symbols of the user's tree grammar by <CODE>.lido</CODE>
constructs like
<P>
<PRE>
SYMBOL UseIdent INHERITS IdUseEnv END;
</PRE>
<P>
Note: The symbols provided by modules are <CODE>CLASS</CODE> symbols in the
sense of LIDO, i. e. they may not be used directly as tree grammar
symbols. <CODE>INHERITS</CODE> constructs like the above are needed
to bind their computations to symbols of user's specification.
This means avoids accidental coincidence between names of tree
grammar symbols and of module roles.
<P>
Further <CODE>.lido</CODE> specifications may be neccessary to supply information to
or obtain information from the thus inherited computations.
<P>
Modules may also provide C functions (directly or via specifications
for other tools), e.g. functions of the environment module in case of the
<CODE>AlgScope</CODE> module. They may be called in computations of the user's
<CODE>.lido</CODE> specification, or in user's C modules if the appropriate
header file is included.
<A NAME="IDX13"></A>
<P>
The same instantiation mechanism may be applied to include user defined modules:
<P>
<PRE>
/user/Lib/ModName.gnrc:inst
</PRE>
instantiates the module <CODE>ModName</CODE> of a user library.
<P>
Such a module must contain of at least two files , e.g.
<CODE>/user/Lib/ModName.fw</CODE> containing the module's specifications
and <CODE>/user/Lib/ModName.gnrc</CODE>. The latter is an executable
shell script that performs the generic module instantiation.
It should have the following form:
<P>
<PRE>
#!/bin/sh
moddir=`expr $0 : '\(.*\)/.*' \| '.'`
$1 -e "s/|NAME|/$2/g
s/|KEY|/$3/g" "$moddir"/ModName.fw > "$2"ModName.fw
</PRE>
The last two lines use <CODE>sed</CODE> to substitute the <CODE>instance</CODE>
parameter for any occurrence of <CODE>|NAME|</CODE> in the file <CODE>ModName.fw</CODE>
and the <CODE>referto</CODE> parameter for any occurrence of <CODE>|KEY|</CODE>.
<P>
<HR size=1 noshade width=600 align=left>
<P>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="modlib_1.html"><IMG SRC="gifs/prev.gif" ALT="Previous Chapter" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="modlib_toc.html"><IMG SRC="gifs/up.gif" ALT="Table of Contents" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT="">
<HR size=1 noshade width=600 align=left>
</TD>
</TR>
</TABLE>
</BODY></HTML>
|