blob: 2d9cbfeb5bdfc8ff4892181b0e49afc0f0a71911 [file] [log] [blame]
<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>5.2.3.&nbsp;Base Logical Term</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_ASMLogicalTerms.html" title="5.2.&nbsp;Logical Terms"><link rel="prev" href="def_ConjLogicalTerm.html" title="5.2.2.&nbsp;Conjunctive Logical Term (Logical And Term)"><link rel="next" href="sec_ASMArithmeticTerms.html" title="5.3.&nbsp;Arithmetic Terms"></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.2.3.&nbsp;Base Logical Term</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="def_ConjLogicalTerm.html">Prev</a>&nbsp;</td><th align="center" width="60%">5.2.&nbsp;Logical Terms</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="sec_ASMArithmeticTerms.html">Next</a></td></tr></table><hr></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="def_BaseLogicalTerm"></a>5.2.3.&nbsp;Base Logical Term</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_BaseLogicalTerm_Description"></a>Description</th></tr><tr><td valign="top" align="left"><p>
A <span class="strong"><strong>base logical term</strong></span><a name="N1216D" class="indexterm"></a>
is the most elementary ASM term that evaluates to a boolean value.
</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_BaseLogicalTerm_Syntax"></a>Syntax</th></tr><tr><td valign="top" align="left"><pre class="programlisting">
EqualityTermAST ::= RelationalTermAST
| EqualityTermAST <span class="token">==</span> RelationalTermAST
| EqualityTermAST <span class="token">!=</span> RelationalTermAST
RelationalTermAST ::= <a href="def_ArithmeticTerm.html" title="5.3.1.&nbsp;Arithmetic Term">ArithmeticTermAST</a>
| RelationalTermAST RelationalOpAST <a href="def_ArithmeticTerm.html" title="5.3.1.&nbsp;Arithmetic Term">ArithmeticTermAST</a>
RelationalOpAST ::= <span class="token">&lt;</span> | <span class="token">&gt;</span> | <span class="token">&lt;=</span> | <span class="token">&gt;=</span>
</pre><p>
A <span class="strong"><strong>base logical term</strong></span><a name="N1219A" class="indexterm"></a> can be the following:
</p><div class="itemizedlist"><ul type="disc"><li><p>a relational expression</p></li><li><p>an <a href="def_ArithmeticTerm.html" title="5.3.1.&nbsp;Arithmetic Term">arithmetic term</a>, which evaluates to a boolean value, such as
<div class="itemizedlist"><ul type="circle"><li><p>a <a href="def_BooleanConstant.html" title="5.4.3.&nbsp;Boolean Constant">boolean constant</a>,
</p></li><li><p>the negation of a <span class="strong"><strong>base logical term</strong></span>,
</p></li><li><p>a general <a href="def_LogicalTerm.html" title="5.2.1.&nbsp;Logical Term">logical term</a> surrounded with parenthesis,
</p></li><li><p>a <a href="def_GraphPatternCall.html" title="2.1.4.&nbsp;Graph Pattern Call">graph pattern call</a>.
</p></li></ul></div>
</p></li></ul></div><p>
A <span class="emphasis"><em>relational expression</em></span>is a relation between two
<a href="def_ArithmeticTerm.html" title="5.3.1.&nbsp;Arithmetic Term">arithmetic terms</a>; the relational operator can be equality operators
(like equal, <code class="computeroutput">$==$</code> and not equal, <code class="computeroutput">!=</code>) or inequality operators such as
<code class="computeroutput">&gt;</code>, <code class="computeroutput">&lt;</code>, <code class="computeroutput">&gt;=</code>,
<code class="computeroutput">&lt;=</code> (where the latter has higher precedence).
</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_BaseLogicalTerm_Semantics"></a>Semantics</th></tr><tr><td valign="top" align="left"><p>
A <a href="def_GraphPatternCall.html" title="2.1.4.&nbsp;Graph Pattern Call">graph pattern call</a> results <code class="computeroutput">true</code> if a matching is found
and <code class="computeroutput">false</code> otherwise.
</p><p>
Relational operators are interpreted between data types according to
<a href="def_BaseLogicalTerm.html#tab_EqualNotEqual" title="Table&nbsp;2.4.&nbsp;Equal (==) and Not Equal (!=) operators">Table&nbsp;2.4, &ldquo;Equal (<code class="computeroutput">==</code>) and Not Equal (<code class="computeroutput">!=</code>) operators &rdquo;</a> and <a href="def_BaseLogicalTerm.html#tab_Inequality" title="Table&nbsp;2.5.&nbsp;Other relational inequality operators (<, >, <=, >=) and Not Equal (!=) operators">Table&nbsp;2.5, &ldquo;Other relational inequality operators (<code class="computeroutput">&lt;, &gt;, &lt;=, &gt;=</code>) and Not Equal (<code class="computeroutput">!=</code>) operators &rdquo;</a>.
The cells in the tables define the type of the result when evaluating a relational
expression with arguments of a specific datatype.
</p><p>
<span class="emphasis"><em>Equality</em></span> (and <span class="emphasis"><em>!=</em></span>) can be tested for any kinds of operands,
but the other relations are limited. Semantically the <span class="emphasis"><em>less than</em></span> and
<span class="emphasis"><em>greater than</em></span> relations are the usual (Java) ones for the <code class="computeroutput">Integer</code>
and <code class="computeroutput">Double</code> values. Regarding <code class="computeroutput">Multiplicity</code> values,
<div class="itemizedlist"><ul type="disc"><li><p>
<code class="computeroutput">one-to-one</code> is less than <code class="computeroutput">many-to-many</code>,
<code class="computeroutput">many-to-one</code>, and <code class="computeroutput">one-to-many</code>,
</p></li><li><p>
<code class="computeroutput">one-to-many</code> and <code class="computeroutput">many-to-one</code> is less than
<code class="computeroutput">many-to-many</code>;
</p></li><li><p>
but <code class="computeroutput">one-to-many</code> and <code class="computeroutput">many-to-one</code> are uncomparable to each other.
</p></li></ul></div>
</p><div class="table"><a name="tab_EqualNotEqual"></a><p class="title"><b>Table&nbsp;2.4.&nbsp;Equal (<code class="computeroutput">==</code>) and Not Equal (<code class="computeroutput">!=</code>) operators </b></p><div class="table-contents"><table summary="Equal (==) and Not Equal (!=) operators " border="1"><colgroup><col><col><col><col><col><col><col><col></colgroup><thead><tr><th align="center">&nbsp;</th><th align="center">Undef</th><th align="center">Boolean</th><th align="center">String</th><th align="center">Integer</th><th align="center">Double</th><th align="center">ModelElement</th><th align="center">Multiplicity</th></tr></thead><tbody><tr><td align="center"><span class="strong"><strong>Undef</strong></span></td><td align="center">Undef</td><td align="center">Undef</td><td align="center">Undef</td><td align="center">Undef</td><td align="center">Undef</td><td align="center">Undef</td><td align="center">Undef</td></tr><tr><td align="center"><span class="strong"><strong>Boolean</strong></span></td><td align="center">Undef</td><td align="center">Bool</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td></tr><tr><td align="center"><span class="strong"><strong>String</strong></span></td><td align="center">Undef</td><td align="center">&nbsp;</td><td align="center">Bool</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td></tr><tr><td align="center"><span class="strong"><strong>Integer</strong></span></td><td align="center">Undef</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">Bool</td><td align="center">Bool</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td></tr><tr><td align="center"><span class="strong"><strong>Double</strong></span></td><td align="center">Undef</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">Bool</td><td align="center">Bool</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td></tr><tr><td align="center"><span class="strong"><strong>ModelElement</strong></span></td><td align="center">Undef</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">Bool</td><td align="center">&nbsp;</td></tr><tr><td align="center"><span class="strong"><strong>Multiplicity</strong></span></td><td align="center">Undef</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">Bool</td></tr></tbody></table></div><p></p></div><br class="table-break"><div class="table"><a name="tab_Inequality"></a><p class="title"><b>Table&nbsp;2.5.&nbsp;Other relational inequality operators (<code class="computeroutput">&lt;, &gt;, &lt;=, &gt;=</code>) and Not Equal (<code class="computeroutput">!=</code>) operators </b></p><div class="table-contents"><table summary="Other relational inequality operators (<, >, <=, >=) and Not Equal (!=) operators " border="1"><colgroup><col><col><col><col><col><col><col><col></colgroup><thead><tr><th align="center">&nbsp;</th><th align="center">Undef</th><th align="center">Boolean</th><th align="center">String</th><th align="center">Integer</th><th align="center">Double</th><th align="center">ModelElement</th><th align="center">Multiplicity</th></tr></thead><tbody><tr><td align="center"><span class="strong"><strong>Undef</strong></span></td><td align="center">Undef</td><td align="center">Undef</td><td align="center">Undef</td><td align="center">Undef</td><td align="center">Undef</td><td align="center">Undef</td><td align="center">Undef</td></tr><tr><td align="center"><span class="strong"><strong>Boolean</strong></span></td><td align="center">Undef</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td></tr><tr><td align="center"><span class="strong"><strong>String</strong></span></td><td align="center">Undef</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td></tr><tr><td align="center"><span class="strong"><strong>Integer</strong></span></td><td align="center">Undef</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">Bool</td><td align="center">Bool</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td></tr><tr><td align="center"><span class="strong"><strong>Double</strong></span></td><td align="center">Undef</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">Bool</td><td align="center">Bool</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td></tr><tr><td align="center"><span class="strong"><strong>ModelElement</strong></span></td><td align="center">Undef</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td></tr><tr><td align="center"><span class="strong"><strong>Multiplicity</strong></span></td><td align="center">Undef</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">&nbsp;</td><td align="center">Bool</td></tr></tbody></table></div><p></p></div><br class="table-break"></td></tr></table></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning: Warning"><tr><td valign="top" align="center" rowspan="2" width="25"><img alt="[Warning]" src="images/warning.png"></td><th align="left"><a name="def_BaseLogicalTerm_Warning"></a>Warning</th></tr><tr><td valign="top" align="left"><p>
Note that the evaluation rules of relational operators changed in the
new release to be compliant with its use in Java.
</p></td></tr></table></div><div class="highlights"><a name="def_BaseLogicalTerm_Remark"></a><p><b>Remark.&nbsp;</b>
There is no implicit type casting on the input of the operands except between Integers and Doubles; conversion
operators have to be used if casting is required.
</p></div><div class="highlights"><a name="def_BaseLogicalTerm_DefinedIn"></a><p><b>Defined In:&nbsp;</b>
<a href="def_ConjLogicalTerm.html" title="5.2.2.&nbsp;Conjunctive Logical Term (Logical And Term)">conjuntive logical term</a>
</p></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="def_ConjLogicalTerm.html">Prev</a>&nbsp;</td><td align="center" width="20%"><a accesskey="u" href="sec_ASMLogicalTerms.html">Up</a></td><td align="right" width="40%">&nbsp;<a accesskey="n" href="sec_ASMArithmeticTerms.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">5.2.2.&nbsp;Conjunctive Logical Term (Logical And Term)&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.3.&nbsp;Arithmetic Terms</td></tr></table></div></body></html>