blob: 20c38964fcb3143c1db7fecfa16657d3c220d928 [file] [log] [blame]
<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>5.5.1.&nbsp;ASM Function Definition</title><link href="style.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.72.0" name="generator"><link rel="start" href="index.html" title="The VIATRA2 Model Transformation Framework"><link rel="up" href="sec_ASMFunctions.html" title="5.5.&nbsp;ASM Functions"><link rel="prev" href="sec_ASMFunctions.html" title="5.5.&nbsp;ASM Functions"><link rel="next" href="def_InitialValue.html" title="5.5.2.&nbsp;Initial Value"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">5.5.1.&nbsp;ASM Function Definition</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="sec_ASMFunctions.html">Prev</a>&nbsp;</td><th align="center" width="60%">5.5.&nbsp;ASM Functions</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="def_InitialValue.html">Next</a></td></tr></table><hr></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="def_AsmFunctionDef"></a>5.5.1.&nbsp;ASM Function Definition</h4></div></div></div><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Tip: Description"><tr><td valign="top" align="center" rowspan="2" width="25"><img alt="[Tip]" src="images/tip.png"></td><th align="left"><a name="def_AsmFunctionDef_Description"></a>Description</th></tr><tr><td valign="top" align="left"><p>
In terms of structured programming languages, an <span class="strong"><strong>ASM function definition</strong></span>
<a name="N12B96" class="indexterm"></a>
is an associative array (dictionary, map, etc.), which stores
<span class="emphasis"><em>data values</em></span> at <a href="def_AsmFunctionLocation.html" title="5.5.3.&nbsp;ASM Function Location">locations</a> (slots) defined by its
<span class="emphasis"><em>index elements</em></span>. However, a main difference is that these arrays are
very dynamic in the sense that they may store an arbitrarily large number of
elements, and the size of the array can be increased at any time during
execution in order to store a new element at a specific location (index).
</p></td></tr></table></div><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important: Syntax"><tr><td valign="top" align="center" rowspan="2" width="25"><img alt="[Important]" src="images/important.png"></td><th align="left"><a name="def_AsmFunctionDef_Syntax"></a>Syntax</th></tr><tr><td valign="top" align="left"><pre class="programlisting">
AsmFunctionDefAST ::= <a href="def_Annotation.html" title="1.2.2.&nbsp;Annotation">OptAnnotationsAST</a> <span class="token">asmfunction</span> <a href="def_ModelElementName.html" title="5.7.1.&nbsp;Model Element Name">TypeNameAST</a> <span class="token">/</span> ArityAST <a href="def_InitialValue.html" title="5.5.2.&nbsp;Initial Value">InitialValuesOptAST</a>
ArityAST ::= DecimalIntegerLiteral
</pre><p>
An <code class="computeroutput">ASM function</code> is identified by its
<a href="def_ModelElementName.html" title="5.7.1.&nbsp;Model Element Name">name</a> and its <span class="strong"><strong>arity</strong></span>,
<a name="N12BCE" class="indexterm"></a>
<a name="N12BD5" class="indexterm"></a>
which is the number of dimensions of the corresponding associative array.
In addition, we may optionally provided initial definitions of some slots storing some
values at certain locations (<a href="def_InitialValue.html" title="5.5.2.&nbsp;Initial Value">initial value</a>).
Unused locations of arrays are implicitly storing the <span class="emphasis"><em>undef</em></span> value.
</p><p>
An ASM function have to be declared at the global scope (that is, at machine
scope, outside any rules) prior to its first use.
</p></td></tr></table></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note: Semantics"><tr><td valign="top" align="center" rowspan="2" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left"><a name="def_AsmFunctionDef_Semantics"></a>Semantics</th></tr><tr><td valign="top" align="left"><p>
Mathematically, an ASM function is a partial mapping from its index domain
(called location or slot) to its value domain.
</p><p>
While ASM variables have a local scope in the sense that a variable becomes
non-accessible as soon as the execution leaves the rule (or the block) of its
scope, <span class="emphasis"><em>ASM functions</em></span>have a global visibility, thus they are
accessible from anywhere <span class="emphasis"><em>during the entire run of an ASM machine</em></span>. However,
the location-value assignments are not persistent, i.e. these are not
preserved between different runs of ASM machines (as it is the case in case
of model elements in the VPM model space).
</p><p>
Since ASM functions defined in other machines can also be invoked, the
interpreter provides lazy initialization for all ASM functions: these are
<span class="emphasis"><em>initialized on-demand</em></span>, i.e. just before their first use.
</p></td></tr></table></div><div class="highlights"><a name="def_AsmFunctionDef_DefinedIn"></a><p><b>Defined In:&nbsp;</b>
<a href="def_Machine.html" title="1.2.1.&nbsp;GTASM Machine Definition">GTASM Machine</a>
</p></div><div class="highlights"><a name="def_AsmFunctionDef_SeeAlso"></a><p><b>See Also:&nbsp;</b>
<a href="def_AsmFunctionLocation.html" title="5.5.3.&nbsp;ASM Function Location">ASM function location</a>,
<a href="def_UpdateRule.html" title="4.2.5.&nbsp;Update Rule">update rule</a>
</p></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="sec_ASMFunctions.html">Prev</a>&nbsp;</td><td align="center" width="20%"><a accesskey="u" href="sec_ASMFunctions.html">Up</a></td><td align="right" width="40%">&nbsp;<a accesskey="n" href="def_InitialValue.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">5.5.&nbsp;ASM Functions&nbsp;</td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td valign="top" align="right" width="40%">&nbsp;5.5.2.&nbsp;Initial Value</td></tr></table></div></body></html>