1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-02 23:14:57 +03:00

Refactored action name lists

This commit is contained in:
Graham Nelson 2021-02-28 15:12:19 +00:00
parent c1841fa031
commit 78686c1f11
23 changed files with 1373 additions and 1110 deletions

View file

@ -335,9 +335,9 @@ We begin with <a href="index.html" class="internal">core</a> itself.
<span class="definition-keyword">enum</span> <span class="constant-syntax">scene_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">slash_gpr_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">spatial_data_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">anl_link_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">anl_entry_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">action_pattern_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">anl_head_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">action_name_list_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ap_optional_clause_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">scene_connector_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">understanding_item_CLASS</span>
@ -369,9 +369,9 @@ We begin with <a href="index.html" class="internal">core</a> itself.
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">slash_gpr</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_data</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="identifier-syntax">anl_link</span><span class="plain-syntax">, </span><span class="constant-syntax">1000</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="identifier-syntax">anl_entry</span><span class="plain-syntax">, </span><span class="constant-syntax">1000</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax">, </span><span class="constant-syntax">100</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="identifier-syntax">anl_head</span><span class="plain-syntax">, </span><span class="constant-syntax">1000</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="identifier-syntax">action_name_list</span><span class="plain-syntax">, </span><span class="constant-syntax">1000</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap_optional_clause</span><span class="plain-syntax">, </span><span class="constant-syntax">400</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="identifier-syntax">scene_connector</span><span class="plain-syntax">, </span><span class="constant-syntax">1000</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="identifier-syntax">understanding_item</span><span class="plain-syntax">, </span><span class="constant-syntax">100</span><span class="plain-syntax">)</span>

View file

@ -86,8 +86,8 @@ function togglePopup(material_id) {
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *, </span><a href="4-ap2.html#SP4" class="function-link"><span class="function-syntax">ActionPatterns::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">grammar_verb</span><span class="plain-syntax"> *, </span><a href="5-gv.html#SP4" class="function-link"><span class="function-syntax">PL::Parsing::Verbs::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">grammar_line</span><span class="plain-syntax"> *, </span><a href="5-gl.html#SP3" class="function-link"><span class="function-syntax">PL::Parsing::Lines::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *, </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *, </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::log_anl_link</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *, </span><a href="4-anl.html#SP14" class="function-link"><span class="function-syntax">ActionNameLists::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *, </span><a href="4-anl.html#SP14" class="function-link"><span class="function-syntax">ActionNameLists::log_entry</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *, </span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::log</span></a><span class="plain-syntax">)</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">IFModule::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
@ -133,8 +133,8 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">, </span><a href="4-ap2.html#SP4" class="function-link"><span class="function-syntax">ActionPatterns::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'G'</span><span class="plain-syntax">, </span><a href="5-gv.html#SP4" class="function-link"><span class="function-syntax">PL::Parsing::Verbs::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'g'</span><span class="plain-syntax">, </span><a href="5-gl.html#SP3" class="function-link"><span class="function-syntax">PL::Parsing::Lines::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'L'</span><span class="plain-syntax">, </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'8'</span><span class="plain-syntax">, </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::log_anl_link</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'L'</span><span class="plain-syntax">, </span><a href="4-anl.html#SP14" class="function-link"><span class="function-syntax">ActionNameLists::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'8'</span><span class="plain-syntax">, </span><a href="4-anl.html#SP14" class="function-link"><span class="function-syntax">ActionNameLists::log_entry</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'l'</span><span class="plain-syntax">, </span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::log</span></a><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-im.html#SP2">&#167;2</a>.</li></ul>

View file

@ -227,7 +227,7 @@ scenes &mdash; to express which, the <a href="3-scn.html#SP10" class="internal">
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Instances::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">sc</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_instance</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure scene is private to this section.</li><li>The structure scene_end is private to this section.</li><li>The structure scene_connector is accessed in 2/ri, 3/tm, 3/ts, 4/ap, 4/av, 4/anl, 4/ap2, 5/tfg, 5/gl and here.</li></ul>
<ul class="endnotetexts"><li>The structure scene is private to this section.</li><li>The structure scene_end is private to this section.</li><li>The structure scene_connector is accessed in 2/ri, 3/tm, 3/ts, 4/ap, 4/av, 4/ap2, 5/tfg, 5/gl and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>A plugin called <span class="extract"><span class="extract-syntax">xyzzy</span></span> generally has a hunk of subject data called <span class="extract"><span class="extract-syntax">xyzzy_data</span></span>,
so we would normally have a structure called <span class="extract"><span class="extract-syntax">scenes_data</span></span>, but in fact that
structure is just going to be <a href="3-scn.html#SP10" class="internal">scene</a>. So:

View file

@ -85,137 +85,412 @@ MathJax = {
<!--Weave of 'Action Name Lists' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#4">Chapter 4: Actions</a></li><li><b>Action Name Lists</b></li></ul></div>
<p class="purpose">Action name lists provide a disjunction in the choice of action made by an action pattern. For instance, "taking or dropping the disc" results in a two-entry ANL. An empty ANL is also legal, and means "doing something" -- the generic I7 text for "any action at all".</p>
<p class="purpose">Action name lists are used in parsing action patterns, and identify which action names seem to be possible within them.</p>
<ul class="toc"><li><a href="4-anl.html#SP1">&#167;1. Definitions</a></li><li><a href="4-anl.html#SP10">&#167;10. Specificity of ANLs</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="4-anl.html#SP1">&#167;1. Data structure</a></li><li><a href="4-anl.html#SP11">&#167;11. Single and best actions</a></li><li><a href="4-anl.html#SP14">&#167;14. Logging</a></li><li><a href="4-anl.html#SP15">&#167;15. Parsing text to an ANL</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Definitions. </b></p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Data structure. </b>An ANL is a head object, an <a href="4-anl.html#SP1" class="internal">action_name_list</a>, which points to a linked
list of <a href="4-anl.html#SP3" class="internal">anl_entry</a> objects.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">body</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">anyone_specified</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">anl_head</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entries</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">negation_state</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::new_head</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::new_head</span></span>:<br/><a href="4-anl.html#SP3">&#167;3</a>, <a href="4-anl.html#SP3_1">&#167;3.1</a>, <a href="4-anl.html#SP3_2">&#167;3.2</a><br/>Action Patterns - <a href="4-ap2.html#SP25_1">&#167;25.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">negate_pattern</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">body</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">anyone_specified</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">negate_pattern</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"cannot"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negate_pattern</span><span class="plain-syntax"> = </span><span class="identifier-syntax">negate_pattern</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">head</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::new_list</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::new_list</span></span>:<br/><a href="4-anl.html#SP16">&#167;16</a>, <a href="4-anl.html#SP16_1">&#167;16.1</a>, <a href="4-anl.html#SP16_2">&#167;16.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">entries</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">negation_state</span><span class="plain-syntax"> = </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure action_name_list is accessed in 4/ap2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The "negation state" of a list is one of three possibilities, not two. The
difference is that "doing something other than examining the box", for example,
is <span class="extract"><span class="extract-syntax">ANL_NEGATED_LISTWISE</span></span>, whereas "doing something other than examining to the
box" is <span class="extract"><span class="extract-syntax">ANL_NEGATED_ITEMWISE</span></span>. Note that the state is set irrevocably when the
list is created.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">ANL_POSITIVE</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">ANL_NEGATED_LISTWISE</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">ANL_NEGATED_ITEMWISE</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::listwise_negated</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::listwise_negated</span></span>:<br/><a href="4-anl.html#SP14">&#167;14</a><br/>Action Patterns - <a href="4-ap2.html#SP34_1">&#167;34.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">list</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negation_state</span><span class="plain-syntax"> == </span><span class="constant-syntax">ANL_NEGATED_LISTWISE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::itemwise_negated</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::itemwise_negated</span></span>:<br/><a href="4-anl.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">list</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negation_state</span><span class="plain-syntax"> == </span><span class="constant-syntax">ANL_NEGATED_ITEMWISE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::positive</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::positive</span></span>:<br/><a href="4-anl.html#SP8">&#167;8</a>, <a href="4-anl.html#SP9">&#167;9</a>, <a href="4-anl.html#SP11">&#167;11</a>, <a href="4-anl.html#SP13">&#167;13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">list</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">negation_state</span><span class="plain-syntax"> == </span><span class="constant-syntax">ANL_POSITIVE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>An entry has some book-keeping fields, and is otherwise divided into the
item itself &mdash; either an action name or a named action pattern &mdash; and some
parsing data needed by the complicated algorithms for turning text into an
action list.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_item</span><span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next</span><span class="plain-syntax">; </span><span class="comment-syntax"> next in this ANL list</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">delete_this_link</span><span class="plain-syntax">; </span><span class="comment-syntax"> used temporarily during parsing</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_parsing_data</span><span class="plain-syntax"> </span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">marked_for_deletion</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_link</span><span class="plain-syntax">; </span><span class="comment-syntax"> next in this ANL list</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::new_entry_at</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::new_entry_at</span></span>:<br/><a href="4-anl.html#SP16_1">&#167;16.1</a>, <a href="4-anl.html#SP17_2">&#167;17.2</a>, <a href="4-anl.html#SP19_1">&#167;19.1</a>, <a href="4-anl.html#SP19_2">&#167;19.2</a>, <a href="4-anl.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP7" class="function-link"><span class="function-syntax">ActionNameLists::new_item</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP10" class="function-link"><span class="function-syntax">ActionNameLists::new_parsing_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">marked_for_deletion</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure anl_entry is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>The model here is that the list can be reduced in size by marking entries
for deletion and then, subsequently, having all such entries removed. Note
that the head <a href="4-anl.html#SP1" class="internal">action_name_list</a> object remains valid even if every entry
is removed.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::mark_for_deletion</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::mark_for_deletion</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_5">&#167;26.5</a>, <a href="4-ap2.html#SP26_5_6">&#167;26.5.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">X</span><span class="plain-syntax">) </span><span class="identifier-syntax">X</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">marked_for_deletion</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"tried to mark null entry for deletion"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::marked_for_deletion</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::marked_for_deletion</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_5_6">&#167;26.5.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">X</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">X</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">marked_for_deletion</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>This function actually does two things: deletes unwanted entries, and deletes
entries which fail to change the word position.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::remove_entries_marked_for_deletion</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::remove_entries_marked_for_deletion</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_5_7">&#167;26.5.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax">, *</span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">entry</span><span class="plain-syntax">; </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">marked_for_deletion</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pos</span><span class="plain-syntax"> == </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prev</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax"> = </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">prev</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax"> = </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">entry</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>When not pruning the list, these macros are useful for working through it:
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">LOOP_THROUGH_ANL</span><span class="plain-syntax">(</span><span class="identifier-syntax">var</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">list</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">var</span><span class="plain-syntax">; </span><span class="identifier-syntax">var</span><span class="plain-syntax"> = </span><span class="identifier-syntax">var</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax">)</span>
<span class="definition-keyword">define</span> <span class="identifier-syntax">LOOP_THROUGH_ANL_WITH_PREV</span><span class="plain-syntax">(</span><span class="identifier-syntax">var</span><span class="plain-syntax">, </span><span class="identifier-syntax">prev_var</span><span class="plain-syntax">, </span><span class="identifier-syntax">next_var</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">var</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">list</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">prev_var</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">next_var</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">var</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">var</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">var</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prev_var</span><span class="plain-syntax"> = </span><span class="identifier-syntax">var</span><span class="plain-syntax">, </span><span class="identifier-syntax">var</span><span class="plain-syntax"> = </span><span class="identifier-syntax">next_var</span><span class="plain-syntax">, </span><span class="identifier-syntax">next_var</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">next_var</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">next_var</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::length</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::length</span></span>:<br/><a href="4-anl.html#SP11">&#167;11</a><br/>Action Patterns - <a href="4-ap2.html#SP35">&#167;35</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_ANL</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">) </span><span class="identifier-syntax">C</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::nonempty</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::nonempty</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">list</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>The <a href="4-anl.html#SP7" class="internal">anl_item</a> material is the actual content we are trying to get at:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_item</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">action_listed</span><span class="plain-syntax">; </span><span class="comment-syntax"> the action in this ANL list entry</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nap_listed</span><span class="plain-syntax">; </span><span class="comment-syntax"> or a named pattern instead</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">anl_item</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">anl_item</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::new_item</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::new_item</span></span>:<br/><a href="4-anl.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_item</span><span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">item</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">anl_item</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::first_item</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::first_item</span></span>:<br/><a href="4-anl.html#SP11">&#167;11</a><br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a>, <a href="4-ap2.html#SP26_1">&#167;26.1</a>, <a href="4-ap2.html#SP34">&#167;34</a>, <a href="4-ap2.html#SP35">&#167;35</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">list</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure anl_item is accessed in 4/ap2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>The following is one of Inform's standardised comparison routines, which
takes a pair of objects A, B and returns 1 if A makes a more specific
description than B, 0 if they seem equally specific, or \(-1\) if B makes a
more specific description than A. This is transitive, and intended to be
used in sorting algorithms.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::compare_specificity</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::compare_specificity</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP27">&#167;27</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl1</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">count1</span><span class="plain-syntax">, </span><span class="identifier-syntax">count2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">count1</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP8" class="function-link"><span class="function-syntax">ActionNameLists::count_actions_covered</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">count2</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP8" class="function-link"><span class="function-syntax">ActionNameLists::count_actions_covered</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">count1</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">count2</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">count1</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">count2</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::count_actions_covered</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">infinity</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NUMBER_CREATED</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">list</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">infinity</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">infinity</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_ANL</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">k</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">infinity</span><span class="plain-syntax">)) </span><span class="identifier-syntax">k</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax"> = </span><span class="identifier-syntax">infinity</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::positive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">k</span><span class="plain-syntax"> = </span><span class="identifier-syntax">infinity</span><span class="plain-syntax"> - </span><span class="identifier-syntax">k</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::nap</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::nap</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_6">&#167;26.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::action</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::action</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_5_4">&#167;26.5.4</a>, <a href="4-ap2.html#SP26_5_5">&#167;26.5.5</a>, <a href="4-ap2.html#SP26_5_6">&#167;26.5.6</a>, <a href="4-ap2.html#SP26_6">&#167;26.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>A given action <span class="extract"><span class="extract-syntax">an</span></span> falls within the context of this list if it appears
positively in the list, or negatively by not falling into a category excluded
by it; for example, "examining" falls within "examining something", and also
within "doing something other than looking at something" (a case of itemwise
negation) but not "doing something other than looking".
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::covers_action</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::covers_action</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_ANL</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">item</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">within</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_listed</span><span class="plain-syntax"> == </span><span class="identifier-syntax">an</span><span class="plain-syntax">) </span><span class="identifier-syntax">within</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">) </span><span class="identifier-syntax">within</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="4-nap.html#SP3" class="function-link"><span class="function-syntax">NamedActionPatterns::covers_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (((</span><span class="identifier-syntax">within</span><span class="plain-syntax">) &amp;&amp; (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::positive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">))) ||</span>
<span class="plain-syntax"> ((</span><span class="identifier-syntax">within</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp; (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::positive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>The <a href="4-anl.html#SP10" class="internal">anl_parsing_data</a> material is needed on a temporary basis when parsing
the text leading to a list:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_parsing_data</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">word_position</span><span class="plain-syntax">; </span><span class="comment-syntax"> and some values used temporarily during parsing</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">negate_pattern</span><span class="plain-syntax">; </span><span class="comment-syntax"> parity of the entire list which this heads</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">parc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">parameter</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">in_clause</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">abbreviation_level</span><span class="plain-syntax">; </span><span class="comment-syntax"> number of words missing</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">anl_parsing_data</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">anl_item</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">action_listed</span><span class="plain-syntax">; </span><span class="comment-syntax"> the action in this ANL list entry</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nap_listed</span><span class="plain-syntax">; </span><span class="comment-syntax"> or a named pattern instead</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">parity</span><span class="plain-syntax">; </span><span class="comment-syntax"> parity of just this individual item</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">anl_item</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">anl_item</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::first_item</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::first_item</span></span>:<br/><a href="4-anl.html#SP9">&#167;9</a><br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a>, <a href="4-ap2.html#SP33">&#167;33</a>, <a href="4-ap2.html#SP34">&#167;34</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">list</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> &amp;(</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">anl_parsing_data</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::new_parsing_data</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::new_parsing_data</span></span>:<br/><a href="4-anl.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">at</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_parsing_data</span><span class="plain-syntax"> </span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">in_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">abbreviation_level</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::length</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::length</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a>, <a href="4-ap2.html#SP34">&#167;34</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">list</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">; </span><span class="identifier-syntax">anl</span><span class="plain-syntax">; </span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::parc</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::parc</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_5">&#167;26.5</a>, <a href="4-ap2.html#SP26_5_1">&#167;26.5.1</a>, <a href="4-ap2.html#SP26_6">&#167;26.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::first_position</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::first_position</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_5">&#167;26.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">list</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-anl.html#SP10" class="function-link"><span class="function-syntax">ActionNameLists::word_position</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">entries</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::word_position</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::word_position</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_5">&#167;26.5</a>, <a href="4-ap2.html#SP26_5_1_1">&#167;26.5.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::same_word_position</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::same_word_position</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_5_6">&#167;26.5.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">Y</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Y</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Y</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::par</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::par</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_5_4">&#167;26.5.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">i</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::in_clause</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::in_clause</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_5_4">&#167;26.5.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">in_clause</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure anl_head is accessed in 4/ap2 and here.</li><li>The structure anl_link is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/ap2, 5/tfg, 5/gl and here.</li><li>The structure anl_item is accessed in 4/ap2 and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The action name list is the part of an action pattern identifying
which actions are allowed: "taking, dropping or examining" for
example. The following routine extracts this from a potentially longer
text (e.g. "taking, dropping or examining a door").
<ul class="endnotetexts"><li>The structure anl_parsing_data is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Single and best actions. </b>This tests whether the list gives a single positive action:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::new_link</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::new_link</span></span>:<br/><a href="4-anl.html#SP3_1">&#167;3.1</a>, <a href="4-anl.html#SP4_2">&#167;4.2</a>, <a href="4-anl.html#SP6_1">&#167;6.1</a>, <a href="4-anl.html#SP6_2">&#167;6.2</a>, <a href="4-anl.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">anl_link</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_position</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">parity</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negate_pattern</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">in_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">abbreviation_level</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">delete_this_link</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::single_positive_action</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::single_positive_action</span></span>:<br/><a href="4-anl.html#SP12">&#167;12</a><br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="4-anl.html#SP6" class="function-link"><span class="function-syntax">ActionNameLists::length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">) == </span><span class="constant-syntax">1</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::positive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-anl.html#SP7" class="function-link"><span class="function-syntax">ActionNameLists::first_item</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">)-&gt;</span><span class="element-syntax">action_listed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>This is used only when the list is part of an exactly known action, so
that it should contain just one item, and this should be an actual action,
not a NAP.
</p>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::log</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::log</span></span>:<br/>IF Module - <a href="1-im.html#SP2">&#167;2</a>, <a href="1-im.html#SP2_3">&#167;2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">head</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::log_anl_link</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::log_anl_link</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::log_anl_link</span></span>:<br/>IF Module - <a href="1-im.html#SP2">&#167;2</a>, <a href="1-im.html#SP2_3">&#167;2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">anl</span><span class="plain-syntax">; </span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"ANL entry %s(%d@%d): %s "</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">delete_this_link</span><span class="plain-syntax">)?</span><span class="string-syntax">"(to be deleted) "</span><span class="plain-syntax">:</span><span class="string-syntax">""</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">, </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_position</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">parity</span><span class="plain-syntax">==1)?</span><span class="string-syntax">"+"</span><span class="plain-syntax">:</span><span class="string-syntax">"-"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::tensed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_noun</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"NULL"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;anl-&gt;</span><span class="element-syntax">parc</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" [%d: %W]"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" [in: %W]\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">in_clause</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::log_briefly</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::log_briefly</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">head</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;null-anl&gt;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negate_pattern</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"NOT[ "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">a</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">a</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">; </span><span class="identifier-syntax">a</span><span class="plain-syntax">; </span><span class="identifier-syntax">a</span><span class="plain-syntax"> = </span><span class="identifier-syntax">a</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">a</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">a</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">parity</span><span class="plain-syntax"> == -1) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"not-"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%W / "</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_noun</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">a</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"ANY / "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">a</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">parity</span><span class="plain-syntax"> == -1) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"not-"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%W / "</span><span class="plain-syntax">, </span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::tensed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negate_pattern</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" ]"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::get_singleton_action</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::get_singleton_action</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP28">&#167;28</a>, <a href="4-ap2.html#SP32">&#167;32</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"Supposed singleton ANL is empty"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"Supposed singleton ANL is empty"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">;</span>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::get_the_one_true_action</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::get_the_one_true_action</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP29">&#167;29</a>, <a href="4-ap2.html#SP33">&#167;33</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP11" class="function-link"><span class="function-syntax">ActionNameLists::single_positive_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">an</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"Singleton ANL points to null AN"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl_being_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>The following handles action name lists, such as:
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>The "best" action is the one maximising the number of words in the fixed
part of an action name: thus if there are actions "throwing away" and
"throwing", then in the ANL arising from the text "throwing away the fish",
the action "throwing away" is better than the action "throwing".
</p>
<p class="commentary">If the list includes actions at two different word positions, so that they
are not alternate readings from the same point, then by definition there
is no best action. (For example, in "throwing or removing something".)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::get_best_action</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::get_best_action</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_3">&#167;26.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">posn</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">best_score</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">best</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">RULE_ATTACHMENTS</span><span class="plain-syntax">, </span><span class="string-syntax">"Getting single action from:\n$L\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::positive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_ANL</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">score</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP13" class="function-link"><span class="function-syntax">ActionNameLists::entry_score</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax"> != </span><span class="identifier-syntax">posn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">posn</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">posn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">best</span><span class="plain-syntax"> = </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">best_score</span><span class="plain-syntax"> = </span><span class="identifier-syntax">score</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">score</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">best_score</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">best_score</span><span class="plain-syntax"> = </span><span class="identifier-syntax">score</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">best</span><span class="plain-syntax"> = </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">RULE_ATTACHMENTS</span><span class="plain-syntax">, </span><span class="string-syntax">"Posn %d AN $l\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">posn</span><span class="plain-syntax">, </span><span class="identifier-syntax">best</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">best</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::entry_score</span><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-ann.html#SP7" class="function-link"><span class="function-syntax">ActionNameNames::non_it_length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">) -</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">abbreviation_level</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. Logging. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::log</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::log</span></span>:<br/>IF Module - <a href="1-im.html#SP2">&#167;2</a>, <a href="1-im.html#SP2_3">&#167;2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">list</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;null-anl&gt;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::listwise_negated</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"L-NOT[ "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::itemwise_negated</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"I-NOT[ "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_ANL</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"(%d). "</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-anl.html#SP14" class="function-link"><span class="function-syntax">ActionNameLists::log_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::listwise_negated</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" ]"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::log_briefly</span><button class="popup" onclick="togglePopup('usagePopup28')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup28">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::log_briefly</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">list</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;null-anl&gt;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::listwise_negated</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"L-NOT[ "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::itemwise_negated</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"I-NOT[ "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_ANL</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" / "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-anl.html#SP14" class="function-link"><span class="function-syntax">ActionNameLists::log_entry_briefly</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::listwise_negated</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">list</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" ]"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::log_entry</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::log_entry</span></span>:<br/>IF Module - <a href="1-im.html#SP2">&#167;2</a>, <a href="1-im.html#SP2_3">&#167;2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;null-entry&gt;"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"ANL entry %s(@%d): "</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">marked_for_deletion</span><span class="plain-syntax">)?</span><span class="string-syntax">"(to be deleted) "</span><span class="plain-syntax">:</span><span class="string-syntax">""</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::tensed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_noun</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"NULL"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;entry-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" [%d: %W]"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">in_clause</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" [in: %W]\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">in_clause</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::log_entry_briefly</span><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_noun</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"ANY"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::tensed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. Parsing text to an ANL. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl_being_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>The following handles action name lists, such as:
</p>
<blockquote>
@ -235,14 +510,14 @@ operands.
<span class="Preform-function-syntax">&lt;action-list&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">doing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something/anything</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">other</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">than</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-excluded&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { FALSE, RP[1] }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">doing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something/anything</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">except</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-excluded&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { FALSE, RP[1] }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">doing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something/anything</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to/with</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-to-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, ActionNameLists::new_head(RP[1], FALSE) }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">doing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something/anything</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Construct ANL for anything</span><span class="named-paragraph-number">3.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">doing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something/anything</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to/with</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-to-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, ActionNameLists::new_list(RP[1], ANL_POSITIVE) }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">doing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something/anything</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP16_1" class="named-paragraph-link"><span class="named-paragraph">Construct ANL for anything</span><span class="named-paragraph-number">16.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">doing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something/anything</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { fail }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, ActionNameLists::new_head(RP[1], FALSE) }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, ActionNameLists::new_list(RP[1], ANL_POSITIVE) }</span>
<span class="Preform-function-syntax">&lt;anl-excluded&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to/with</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{&lt;anl-minimal-common-operand&gt;}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Add to-clause to excluded ANL</span><span class="named-paragraph-number">3.2</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, ActionNameLists::new_head(RP[1], TRUE) }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to/with</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{&lt;anl-minimal-common-operand&gt;}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP16_2" class="named-paragraph-link"><span class="named-paragraph">Add to-clause to excluded ANL</span><span class="named-paragraph-number">16.2</span></a></span><span class="Preform-constant-syntax">;</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, ActionNameLists::new_list(RP[1], ANL_NEGATED_LISTWISE) }</span>
<span class="Preform-function-syntax">&lt;anl-minimal-common-operand&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_,/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { fail }</span>
@ -250,16 +525,15 @@ operands.
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Construct ANL for anything</span><span class="named-paragraph-number">3.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP16_1" class="paragraph-anchor"></a><b>&#167;16.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Construct ANL for anything</span><span class="named-paragraph-number">16.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::new_link</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><a href="4-anl.html#SP1" class="function-link"><span class="function-syntax">ActionNameLists::new_head</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) };</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP3" class="function-link"><span class="function-syntax">ActionNameLists::new_entry_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><a href="4-anl.html#SP1" class="function-link"><span class="function-syntax">ActionNameLists::new_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">, </span><span class="constant-syntax">ANL_POSITIVE</span><span class="plain-syntax">) };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>The trickiest form is:
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP16">&#167;16</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>The trickiest form is:
</p>
<blockquote>
@ -277,11 +551,11 @@ for instance, we don't want to count the "in" from "fixed in place".
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;anl-to-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-operand&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-in-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Augment ANL with in clause</span><span class="named-paragraph-number">4.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-operand&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-in-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP17_1" class="named-paragraph-link"><span class="named-paragraph">Augment ANL with in clause</span><span class="named-paragraph-number">17.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-operand&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { pass 1 }</span>
<span class="Preform-function-syntax">&lt;anl-operand&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Construct ANL for anything applied</span><span class="named-paragraph-number">4.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP17_2" class="named-paragraph-link"><span class="named-paragraph">Construct ANL for anything applied</span><span class="named-paragraph-number">17.2</span></a></span>
<span class="Preform-function-syntax">&lt;anl-in-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">fixed</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">place</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { advance Wordings::delta(WR[1], W) }</span>
@ -289,35 +563,32 @@ for instance, we don't want to count the "in" from "fixed in place".
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, - }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Augment ANL with in clause</span><span class="named-paragraph-number">4.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP17_1" class="paragraph-anchor"></a><b>&#167;17.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Augment ANL with in clause</span><span class="named-paragraph-number">17.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">in_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;anl-in-tail&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">in_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;anl-in-tail&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>&#167;4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Construct ANL for anything applied</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP17">&#167;17</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_2" class="paragraph-anchor"></a><b>&#167;17.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Construct ANL for anything applied</span><span class="named-paragraph-number">17.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((!</span><span class="identifier-syntax">preform_lookahead_mode</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">anl_being_parsed</span><span class="plain-syntax">)) </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl_being_parsed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::new_link</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parc</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP3" class="function-link"><span class="function-syntax">ActionNameLists::new_entry_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>Now for the basic list of actions being included:
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP17">&#167;17</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>Now for the basic list of actions being included:
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;anl&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-entry&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Join parsed ANLs</span><span class="named-paragraph-number">5.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-entry&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP18_1" class="named-paragraph-link"><span class="named-paragraph">Join parsed ANLs</span><span class="named-paragraph-number">18.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-entry&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { pass 1 }</span>
<span class="Preform-function-syntax">&lt;anl-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
@ -325,7 +596,7 @@ for instance, we don't want to count the "in" from "fixed in place".
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_,/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { pass 1 }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Which reduces us to an internal nonterminal for an entry in this list.
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>Which reduces us to an internal nonterminal for an entry in this list.
It actually produces multiple matches: for example,
</p>
@ -341,8 +612,8 @@ end, but it's syntactically valid.)
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;anl-entry&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;named-action-pattern&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Make an action pattern from named behaviour</span><span class="named-paragraph-number">6.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;named-action-pattern&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-in-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Make an action pattern from named behaviour plus in</span><span class="named-paragraph-number">6.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;named-action-pattern&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP19_1" class="named-paragraph-link"><span class="named-paragraph">Make an action pattern from named behaviour</span><span class="named-paragraph-number">19.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;named-action-pattern&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-in-tail&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-anl.html#SP19_2" class="named-paragraph-link"><span class="named-paragraph">Make an action pattern from named behaviour plus in</span><span class="named-paragraph-number">19.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-entry-with-action&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { pass 1 }</span>
<span class="Preform-function-syntax">&lt;named-action-pattern&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
@ -354,7 +625,7 @@ end, but it's syntactically valid.)
<span class="Preform-plain-syntax">}</span>
<span class="Preform-function-syntax">&lt;anl-entry-with-action&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">anl_link</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">anl</span><span class="Preform-plain-syntax"> = </span><a href="4-anl.html#SP9" class="function-link"><span class="Preform-function-syntax">ActionNameLists::anl_parse_internal</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">anl_entry</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">anl</span><span class="Preform-plain-syntax"> = </span><a href="4-anl.html#SP21" class="function-link"><span class="Preform-function-syntax">ActionNameLists::anl_parse_internal</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">anl</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> ==&gt; { -, </span><span class="Preform-identifier-syntax">anl</span><span class="Preform-plain-syntax"> }; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
<span class="Preform-plain-syntax"> }</span>
@ -362,75 +633,63 @@ end, but it's syntactically valid.)
<span class="Preform-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make an action pattern from named behaviour</span><span class="named-paragraph-number">6.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP19_1" class="paragraph-anchor"></a><b>&#167;19.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make an action pattern from named behaviour</span><span class="named-paragraph-number">19.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::new_link</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP3" class="function-link"><span class="function-syntax">ActionNameLists::new_entry_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make an action pattern from named behaviour plus in</span><span class="named-paragraph-number">6.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP19">&#167;19</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP19_2" class="paragraph-anchor"></a><b>&#167;19.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make an action pattern from named behaviour plus in</span><span class="named-paragraph-number">19.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::new_link</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP3" class="function-link"><span class="function-syntax">ActionNameLists::new_entry_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">in_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;anl-in-tail&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">in_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;anl-in-tail&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP6">&#167;6</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2" class="paragraph-anchor"></a><b>&#167;3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add to-clause to excluded ANL</span><span class="named-paragraph-number">3.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP19">&#167;19</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP16_2" class="paragraph-anchor"></a><b>&#167;16.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add to-clause to excluded ANL</span><span class="named-paragraph-number">16.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><a href="4-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::can_have_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">fail</span><span class="plain-syntax"> </span><span class="identifier-syntax">production</span><span class="plain-syntax"> };</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;anl-excluded&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parc</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP1" class="function-link"><span class="function-syntax">ActionNameLists::new_head</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-anl.html#SP7" class="function-link"><span class="function-syntax">ActionNameLists::negate_all</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">head</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">head</span><span class="plain-syntax"> };</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;anl-excluded&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP1" class="function-link"><span class="function-syntax">ActionNameLists::new_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">, </span><span class="constant-syntax">ANL_NEGATED_ITEMWISE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">list</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_1" class="paragraph-anchor"></a><b>&#167;5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Join parsed ANLs</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP16">&#167;16</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1" class="paragraph-anchor"></a><b>&#167;18.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Join parsed ANLs</span><span class="named-paragraph-number">18.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">join</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">left_atom</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">right_tail</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">join</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">left_atom</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">right_tail</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RP</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">left_atom</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">join</span><span class="plain-syntax"> = </span><span class="identifier-syntax">right_tail</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">right_tail</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">join</span><span class="plain-syntax"> = </span><span class="identifier-syntax">left_atom</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">right_tail</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">left_atom</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">right_tail</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax"> = </span><span class="identifier-syntax">left_atom</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">join</span><span class="plain-syntax"> = </span><span class="identifier-syntax">right_tail</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">join</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::negate_all</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::negate_all</span></span>:<br/><a href="4-anl.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">head</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">body</span><span class="plain-syntax">; </span><span class="identifier-syntax">L</span><span class="plain-syntax">; </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">parity</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">parity</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">)?(-1):1;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b></p>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP18">&#167;18</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">anl_parsing_tense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::parse</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::parse</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP22">&#167;22</a>, <a href="4-ap2.html#SP25_3">&#167;25.3</a>, <a href="4-ap2.html#SP25_4">&#167;25.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::parse</span><button class="popup" onclick="togglePopup('usagePopup30')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup30">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::parse</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP23">&#167;23</a>, <a href="4-ap2.html#SP26_3">&#167;26.3</a>, <a href="4-ap2.html#SP26_4">&#167;26.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::mismatched_brackets</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl_parsing_tense</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl_parsing_tense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tense</span><span class="plain-syntax">;</span>
@ -440,17 +699,17 @@ end, but it's syntactically valid.)
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b></p>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::anl_parse_internal</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::anl_parse_internal</span></span>:<br/><a href="4-anl.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::anl_parse_internal</span><button class="popup" onclick="togglePopup('usagePopup31')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup31">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::anl_parse_internal</span></span>:<br/><a href="4-anl.html#SP19">&#167;19</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACTION_PATTERN_PARSING</span><span class="plain-syntax">, </span><span class="string-syntax">"Parsing ANL from %W (tense %d)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">anl_parsing_tense</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl_parsing_tense</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::new_link</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP3" class="function-link"><span class="function-syntax">ActionNameLists::new_entry_at</span></a><span class="plain-syntax">(-1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">x_ended</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -459,10 +718,9 @@ end, but it's syntactically valid.)
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">abbreviable</span><span class="plain-syntax"> = </span><a href="4-ann.html#SP8" class="function-link"><span class="function-syntax">ActionNameNames::abbreviable</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::tensed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">an</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">parity</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">in_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">word_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">in_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">w_m</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">), </span><span class="identifier-syntax">x_m</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">w_m</span><span class="plain-syntax"> &lt;= </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">x_m</span><span class="plain-syntax"> &lt;= </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">x_m</span><span class="plain-syntax">++) != </span><span class="identifier-syntax">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">w_m</span><span class="plain-syntax">++)) {</span>
@ -476,11 +734,11 @@ end, but it's syntactically valid.)
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">k</span><span class="plain-syntax">) == </span><span class="identifier-syntax">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">x_m</span><span class="plain-syntax">+1)) { </span><span class="identifier-syntax">j</span><span class="plain-syntax"> = </span><span class="identifier-syntax">k</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">j</span><span class="plain-syntax">&lt;0) { </span><span class="identifier-syntax">fc</span><span class="plain-syntax">=2; </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">DontInclude</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">j</span><span class="plain-syntax">-1 &gt;= </span><span class="identifier-syntax">w_m</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">w_m</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">-1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parc</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">w_m</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">-1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">parc</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="reserved-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">parc</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">w_m</span><span class="plain-syntax"> = </span><span class="identifier-syntax">j</span><span class="plain-syntax">; </span><span class="identifier-syntax">x_m</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
@ -491,12 +749,12 @@ end, but it's syntactically valid.)
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">abbreviable</span><span class="plain-syntax">) </span><span class="identifier-syntax">x_ended</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> { </span><span class="identifier-syntax">fc</span><span class="plain-syntax">=3; </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">DontInclude</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">x_m</span><span class="plain-syntax"> &lt;= </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">)) </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">abbreviation_level</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">)-</span><span class="identifier-syntax">x_m</span><span class="plain-syntax">+1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">x_m</span><span class="plain-syntax"> &lt;= </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">)) </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">abbreviation_level</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">)-</span><span class="identifier-syntax">x_m</span><span class="plain-syntax">+1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">inc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">w_m</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">inc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;anl-in-tail&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::from</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">w_m</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">in_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;anl-in-tail&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">in_clause</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;anl-in-tail&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::can_have_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl_being_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">;</span>
@ -505,139 +763,23 @@ end, but it's syntactically valid.)
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl_being_parsed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inc</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl_list</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">anl_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl_list</span><span class="plain-syntax">, *</span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pos</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">pos</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">abbreviation_level</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">abbreviation_level</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pos</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prev</span><span class="plain-syntax">) </span><span class="identifier-syntax">prev</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">anl_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pos</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl_list</span><span class="plain-syntax">, *</span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pos</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">pos</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">abbreviation_level</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parsing_data</span><span class="plain-syntax">.</span><span class="element-syntax">abbreviation_level</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pos</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prev</span><span class="plain-syntax">) </span><span class="identifier-syntax">prev</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">anl_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_link</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pos</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::new_link</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP3" class="function-link"><span class="function-syntax">ActionNameLists::new_entry_at</span></a><span class="plain-syntax">(-1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DontInclude:</span><span class="plain-syntax"> ;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACTION_PATTERN_PARSING</span><span class="plain-syntax">, </span><span class="string-syntax">"Parsing ANL from %W resulted in:\n$8\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">anl_list</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">anl_list</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">scanning_anl_only_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::extract_actions_only</span><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><span class="identifier-syntax">scanning_anl_only_mode</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">scanning_anl_only_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">permit_trying_omission</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">permit_trying_omission</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;action-pattern&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><a href="4-ap2.html#SP4" class="function-link"><span class="function-syntax">ActionPatterns::list</span></a><span class="plain-syntax">(</span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">anl</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">anyone_specified</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax"> == </span><span class="constant-syntax">ACTOR_EXPLICITLY_UNIVERSAL</span><span class="plain-syntax">) </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">anyone_specified</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">scanning_anl_only_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">permit_trying_omission</span><span class="plain-syntax"> = </span><span class="identifier-syntax">s2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::get_single_action</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::get_single_action</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP25_3">&#167;25.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">posn</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">matchl</span><span class="plain-syntax"> = -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">RULE_ATTACHMENTS</span><span class="plain-syntax">, </span><span class="string-syntax">"Getting single action from:\n$L\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">head</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-anl.html#SP9" class="function-link"><span class="function-syntax">ActionNameLists::negated</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">head</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">head</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">parity</span><span class="plain-syntax"> == -1) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negate_pattern</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax"> = </span><a href="4-ann.html#SP7" class="function-link"><span class="function-syntax">ActionNameNames::non_it_length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">) - </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">abbreviation_level</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_position</span><span class="plain-syntax"> != </span><span class="identifier-syntax">posn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">posn</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">posn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_position</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">matchl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">k</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">k</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">matchl</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">matchl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">k</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">RULE_ATTACHMENTS</span><span class="plain-syntax">, </span><span class="string-syntax">"Posn %d AN $l\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">posn</span><span class="plain-syntax">, </span><span class="identifier-syntax">anf</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">anf</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::get_explicit_anyone_flag</span><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">anyone_specified</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::negated</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::negated</span></span>:<br/><a href="4-anl.html#SP11">&#167;11</a><br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a>, <a href="4-ap2.html#SP33_1">&#167;33.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">head</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negate_pattern</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::nonempty</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::nonempty</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">head</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::within_action_context</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::within_action_context</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">head</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">item</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP1" class="function-link"><span class="function-syntax">ActionNameLists::first_item</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">head</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">item</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-nap.html#SP3" class="function-link"><span class="function-syntax">NamedActionPatterns::within_action_context</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">; </span><span class="identifier-syntax">anl</span><span class="plain-syntax">; </span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">item</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (((</span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_listed</span><span class="plain-syntax"> == </span><span class="identifier-syntax">an</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parity</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">)) ||</span>
<span class="plain-syntax"> ((</span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_listed</span><span class="plain-syntax"> != </span><span class="identifier-syntax">an</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">item</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parity</span><span class="plain-syntax"> == -1)))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. Specificity of ANLs. </b>The following is one of Inform's standardised comparison routines, which
takes a pair of objects A, B and returns 1 if A makes a more specific
description than B, 0 if they seem equally specific, or \(-1\) if B makes a
more specific description than A. This is transitive, and intended to be
used in sorting algorithms.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::compare_specificity</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::compare_specificity</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26">&#167;26</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl1</span><span class="plain-syntax">, </span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">count1</span><span class="plain-syntax">, </span><span class="identifier-syntax">count2</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">count1</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP11" class="function-link"><span class="function-syntax">ActionNameLists::count_actions_covered</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">count2</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP11" class="function-link"><span class="function-syntax">ActionNameLists::count_actions_covered</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">count1</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">count2</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">count1</span><span class="plain-syntax"> &gt; </span><span class="identifier-syntax">count2</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>Where:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::count_actions_covered</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::count_actions_covered</span></span>:<br/><a href="4-anl.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">parity</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">infinity</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NUMBER_CREATED</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">head</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">infinity</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">infinity</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-anl.html#SP9" class="function-link"><span class="function-syntax">ActionNameLists::negated</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">head</span><span class="plain-syntax">)) </span><span class="identifier-syntax">parity</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">anl</span><span class="plain-syntax">; </span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">nap_listed</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">parity</span><span class="plain-syntax"> == -1) </span><span class="identifier-syntax">parity</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">item</span><span class="plain-syntax">.</span><span class="element-syntax">action_listed</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">k</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">infinity</span><span class="plain-syntax">)) </span><span class="identifier-syntax">k</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax"> = </span><span class="identifier-syntax">infinity</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">parity</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">k</span><span class="plain-syntax"> = </span><span class="identifier-syntax">infinity</span><span class="plain-syntax"> - </span><span class="identifier-syntax">k</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-ann.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-anaa.html">anaa</a></li><li class="progresssection"><a href="4-act.html">act</a></li><li class="progresssection"><a href="4-as.html">as</a></li><li class="progresssection"><a href="4-av.html">av</a></li><li class="progresssection"><a href="4-ann.html">ann</a></li><li class="progresscurrent">anl</li><li class="progresssection"><a href="4-ap2.html">ap2</a></li><li class="progresssection"><a href="4-nap.html">nap</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="4-ap2.html">&#10095;</a></li></ul></div>

View file

@ -148,7 +148,7 @@ enough that this is almost never used.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::tensed</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::tensed</span></span>:<br/><a href="4-ann.html#SP10">&#167;10</a>, <a href="4-ann.html#SP11">&#167;11</a>, <a href="4-ann.html#SP13">&#167;13</a><br/>Actions Plugin - <a href="4-ap.html#SP8">&#167;8</a><br/>Actions-Only Nodes and Annotations - <a href="4-anaa.html#SP3">&#167;3</a><br/>Actions - <a href="4-act.html#SP3">&#167;3</a><br/>Action Semantics - <a href="4-as.html#SP6_1">&#167;6.1</a><br/>Action Name Lists - <a href="4-anl.html#SP2">&#167;2</a>, <a href="4-anl.html#SP9">&#167;9</a><br/>Grammar Lines - <a href="5-gl.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::tensed</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::tensed</span></span>:<br/><a href="4-ann.html#SP10">&#167;10</a>, <a href="4-ann.html#SP11">&#167;11</a>, <a href="4-ann.html#SP13">&#167;13</a><br/>Actions Plugin - <a href="4-ap.html#SP8">&#167;8</a><br/>Actions-Only Nodes and Annotations - <a href="4-anaa.html#SP3">&#167;3</a><br/>Actions - <a href="4-act.html#SP3">&#167;3</a><br/>Action Semantics - <a href="4-as.html#SP6_1">&#167;6.1</a><br/>Action Name Lists - <a href="4-anl.html#SP14">&#167;14</a>, <a href="4-anl.html#SP21">&#167;21</a><br/>Grammar Lines - <a href="5-gl.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">present_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tense</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HASBEEN_TENSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">past_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"action tense unsupported"</span><span class="plain-syntax">);</span>
@ -198,7 +198,7 @@ pronoun. For example, the non-it length of "unlocking it with" is 2.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::non_it_length</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::non_it_length</span></span>:<br/>Action Name Lists - <a href="4-anl.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::non_it_length</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::non_it_length</span></span>:<br/>Action Name Lists - <a href="4-anl.html#SP13">&#167;13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_WORDING</span><span class="plain-syntax">(</span><span class="identifier-syntax">k</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">present_name</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (!(</span><span class="function-syntax">&lt;object-pronoun&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::one_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">k</span><span class="plain-syntax">))))</span>
@ -211,7 +211,7 @@ preposition can be abbreviated is under the author's control:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::it_optional</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::it_optional</span></span>:<br/>Action Name Lists - <a href="4-anl.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::it_optional</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::it_optional</span></span>:<br/>Action Name Lists - <a href="4-anl.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">it_optional</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -219,7 +219,7 @@ preposition can be abbreviated is under the author's control:
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">abbreviable</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::abbreviable</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::abbreviable</span></span>:<br/>Action Name Lists - <a href="4-anl.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameNames::abbreviable</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::abbreviable</span></span>:<br/>Action Name Lists - <a href="4-anl.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">naming_data</span><span class="plain-syntax">.</span><span class="element-syntax">abbreviable</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -304,7 +304,7 @@ number of words.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameNames::longest_nounless</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::longest_nounless</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP25_3">&#167;25.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">posn</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameNames::longest_nounless</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ActionNameNames::longest_nounless</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_3">&#167;26.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">posn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::can_have_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>

File diff suppressed because it is too large Load diff

View file

@ -185,12 +185,12 @@ preferred way to do that is to use activities for selecting missing parameters.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::can_have_noun</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::can_have_noun</span></span>:<br/><a href="4-as.html#SP7">&#167;7</a><br/>Action Name Names - <a href="4-ann.html#SP13">&#167;13</a><br/>Action Name Lists - <a href="4-anl.html#SP3_2">&#167;3.2</a>, <a href="4-anl.html#SP9">&#167;9</a><br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a>, <a href="4-ap2.html#SP25_5_6">&#167;25.5.6</a>, <a href="4-ap2.html#SP25_6">&#167;25.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::can_have_noun</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::can_have_noun</span></span>:<br/><a href="4-as.html#SP7">&#167;7</a><br/>Action Name Names - <a href="4-ann.html#SP13">&#167;13</a><br/>Action Name Lists - <a href="4-anl.html#SP16_2">&#167;16.2</a>, <a href="4-anl.html#SP21">&#167;21</a><br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a>, <a href="4-ap2.html#SP26_5_6">&#167;26.5.6</a>, <a href="4-ap2.html#SP26_6">&#167;26.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_parameters</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::can_have_second</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::can_have_second</span></span>:<br/><a href="4-as.html#SP7">&#167;7</a><br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a>, <a href="4-ap2.html#SP25_5_6">&#167;25.5.6</a>, <a href="4-ap2.html#SP25_6">&#167;25.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::can_have_second</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::can_have_second</span></span>:<br/><a href="4-as.html#SP7">&#167;7</a><br/>Action Patterns - <a href="4-ap2.html#SP4">&#167;4</a>, <a href="4-ap2.html#SP26_5_6">&#167;26.5.6</a>, <a href="4-ap2.html#SP26_6">&#167;26.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_parameters</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -214,7 +214,7 @@ preferred way to do that is to use activities for selecting missing parameters.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::is_out_of_world</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::is_out_of_world</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP25_6">&#167;25.6</a><br/>Grammar Lines - <a href="5-gl.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::is_out_of_world</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::is_out_of_world</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_6">&#167;26.6</a><br/>Grammar Lines - <a href="5-gl.html#SP21">&#167;21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">out_of_world</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -227,11 +227,11 @@ preferred way to do that is to use activities for selecting missing parameters.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">second_access</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionSemantics::kind_of_noun</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::kind_of_noun</span></span>:<br/><a href="4-as.html#SP6">&#167;6</a>, <a href="4-as.html#SP7">&#167;7</a><br/>Action Patterns - <a href="4-ap2.html#SP25_5_5">&#167;25.5.5</a>, <a href="4-ap2.html#SP25_5_6">&#167;25.5.6</a>, <a href="4-ap2.html#SP25_6">&#167;25.6</a>, <a href="4-ap2.html#SP28">&#167;28</a>, <a href="4-ap2.html#SP33">&#167;33</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionSemantics::kind_of_noun</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::kind_of_noun</span></span>:<br/><a href="4-as.html#SP6">&#167;6</a>, <a href="4-as.html#SP7">&#167;7</a><br/>Action Patterns - <a href="4-ap2.html#SP26_5_5">&#167;26.5.5</a>, <a href="4-ap2.html#SP26_5_6">&#167;26.5.6</a>, <a href="4-ap2.html#SP26_6">&#167;26.6</a>, <a href="4-ap2.html#SP29">&#167;29</a>, <a href="4-ap2.html#SP34">&#167;34</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">noun_kind</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionSemantics::kind_of_second</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::kind_of_second</span></span>:<br/><a href="4-as.html#SP6">&#167;6</a><br/>Action Patterns - <a href="4-ap2.html#SP25_5_4">&#167;25.5.4</a>, <a href="4-ap2.html#SP25_5_5">&#167;25.5.5</a>, <a href="4-ap2.html#SP25_5_6">&#167;25.5.6</a>, <a href="4-ap2.html#SP25_6">&#167;25.6</a>, <a href="4-ap2.html#SP28">&#167;28</a>, <a href="4-ap2.html#SP33">&#167;33</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionSemantics::kind_of_second</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::kind_of_second</span></span>:<br/><a href="4-as.html#SP6">&#167;6</a><br/>Action Patterns - <a href="4-ap2.html#SP26_5_4">&#167;26.5.4</a>, <a href="4-ap2.html#SP26_5_5">&#167;26.5.5</a>, <a href="4-ap2.html#SP26_5_6">&#167;26.5.6</a>, <a href="4-ap2.html#SP26_6">&#167;26.6</a>, <a href="4-ap2.html#SP29">&#167;29</a>, <a href="4-ap2.html#SP34">&#167;34</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">semantics</span><span class="plain-syntax">.</span><span class="element-syntax">second_kind</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -347,7 +347,7 @@ clear from the implementation in <a href="../runtime-module/5-act.html" class="i
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::can_be_compiled_in_past_tense</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::can_be_compiled_in_past_tense</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP34">&#167;34</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionSemantics::can_be_compiled_in_past_tense</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">ActionSemantics::can_be_compiled_in_past_tense</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP35">&#167;35</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::can_have_second</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="4-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::can_have_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><a href="4-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::kind_of_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>

View file

@ -297,7 +297,7 @@ action patterns. For example, the Standard Rules define:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">stacked_variable</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionVariables::parse_match_clause</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ActionVariables::parse_match_clause</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP25_3">&#167;25.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">stacked_variable</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionVariables::parse_match_clause</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ActionVariables::parse_match_clause</span></span>:<br/>Action Patterns - <a href="4-ap2.html#SP26_3">&#167;26.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">StackedVariables::parse_match_clause</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_variables</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -106,7 +106,7 @@ this category if it matches one of the patterns.
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">nape</span><span class="plain-syntax">, </span><span class="reserved-syntax">named_action_pattern_entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">nap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">patterns</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">NamedActionPatterns::by_name</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">NamedActionPatterns::by_name</span></span>:<br/>Action Name Lists - <a href="4-anl.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="function-syntax">NamedActionPatterns::by_name</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">NamedActionPatterns::by_name</span></span>:<br/>Action Name Lists - <a href="4-anl.html#SP19">&#167;19</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lexicon::retrieve</span><span class="plain-syntax">(</span><span class="identifier-syntax">NAMED_AP_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::to_named_action_pattern</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -127,7 +127,7 @@ if and only if it appears in one of the patterns in the list:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">NamedActionPatterns::within_action_context</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">NamedActionPatterns::within_action_context</span></span>:<br/>Action Name Lists - <a href="4-anl.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nap</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">NamedActionPatterns::covers_action</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">NamedActionPatterns::covers_action</span></span>:<br/>Action Name Lists - <a href="4-anl.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nap</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">named_action_pattern_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nape</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nap</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">nape</span><span class="plain-syntax">, </span><span class="reserved-syntax">named_action_pattern_entry</span><span class="plain-syntax">, </span><span class="identifier-syntax">nap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">patterns</span><span class="plain-syntax">)</span>

View file

@ -108,7 +108,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">understanding_reference</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">understanding_reference</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure understanding_item is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/anl, 4/ap2, 5/gl and here.</li><li>The structure understanding_reference is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/anl, 4/ap2, 5/gl and here.</li></ul>
<ul class="endnotetexts"><li>The structure understanding_item is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/ap2, 5/gl and here.</li><li>The structure understanding_reference is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/ap2, 5/gl and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>New grammar arrives in the system in two ways: primarily by means of explicit
Understand sentences in the source text, but also secondarily in the form
of table entries or other values used to match against snippets. For example:

View file

@ -221,7 +221,7 @@
<li>
<p class="sectionentry"><a href="4-anl.html">
<spon class="sectiontitle">Action Name Lists</span></a> -
<span class="sectionpurpose">Action name lists provide a disjunction in the choice of action made by an action pattern. For instance, "taking or dropping the disc" results in a two-entry ANL. An empty ANL is also legal, and means "doing something" -- the generic I7 text for "any action at all".</span></p>
<span class="sectionpurpose">Action name lists are used in parsing action patterns, and identify which action names seem to be possible within them.</span></p>
</li>
<li>
<p class="sectionentry"><a href="4-ap2.html">

View file

@ -232,10 +232,10 @@ generated from the PHUD elsewhere.
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_WORDING</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">PW</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">NamedActionPatterns::by_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::from</span><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">NotSingleAction</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ActionNameLists::extract_actions_only</span><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ActionNameLists::get_single_action</span><span class="plain-syntax">(</span><span class="identifier-syntax">head</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-rls.html#SP24" class="function-link"><span class="function-syntax">Rules::set_marked_for_anyone</span></a><span class="plain-syntax">(</span><a href="2-rb.html#SP5" class="function-link"><span class="function-syntax">Rules::Bookings::get_rule</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">br</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ActionNameLists::get_explicit_anyone_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">head</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">anyone</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ActionPatterns::list_of_actions_only</span><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">anyone</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ActionNameLists::get_best_action</span><span class="plain-syntax">(</span><span class="identifier-syntax">head</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-rls.html#SP24" class="function-link"><span class="function-syntax">Rules::set_marked_for_anyone</span></a><span class="plain-syntax">(</span><a href="2-rb.html#SP5" class="function-link"><span class="function-syntax">Rules::Bookings::get_rule</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">br</span><span class="plain-syntax">), </span><span class="identifier-syntax">anyone</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">waiver</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>

View file

@ -457,21 +457,16 @@ infrastructure, and we access it with a single call.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">20000</span><span class="plain-syntax"> + </span><span class="identifier-syntax">an</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTActions::emit_anl</span><span class="plain-syntax">(</span><span class="identifier-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">head</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">head</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">body</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTActions::emit_anl</span><span class="plain-syntax">(</span><span class="identifier-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ActionNameLists::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">head</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">ACTION_PATTERN_COMPILATION</span><span class="plain-syntax">, </span><span class="string-syntax">"Emitting action name list: $L"</span><span class="plain-syntax">, </span><span class="identifier-syntax">head</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">; </span><span class="identifier-syntax">L</span><span class="plain-syntax">; </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) </span><span class="identifier-syntax">C</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">item</span><span class="plain-syntax">.</span><span class="identifier-syntax">parity</span><span class="plain-syntax"> == -1) { </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">NOT_BIP</span><span class="plain-syntax">); </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">()); }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">neg</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ActionNameLists::itemwise_negated</span><span class="plain-syntax">(</span><span class="identifier-syntax">head</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">neg</span><span class="plain-syntax">) { </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">NOT_BIP</span><span class="plain-syntax">); </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">()); }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">downs</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">; </span><span class="identifier-syntax">L</span><span class="plain-syntax">; </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">item</span><span class="plain-syntax">.</span><span class="identifier-syntax">parity</span><span class="plain-syntax"> != </span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">item</span><span class="plain-syntax">.</span><span class="identifier-syntax">parity</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"mixed parity"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_ANL</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">head</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">C</span><span class="plain-syntax">) { </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">OR_BIP</span><span class="plain-syntax">); </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">()); </span><span class="identifier-syntax">downs</span><span class="plain-syntax">++; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">item</span><span class="plain-syntax">.</span><span class="identifier-syntax">nap_listed</span><span class="plain-syntax">) {</span>
@ -489,8 +484,7 @@ infrastructure, and we access it with a single call.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">downs</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">()); </span><span class="identifier-syntax">downs</span><span class="plain-syntax">--; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">item</span><span class="plain-syntax">.</span><span class="identifier-syntax">parity</span><span class="plain-syntax"> == -1) </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">neg</span><span class="plain-syntax">) </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -6165,7 +6165,7 @@ ROOT_NT
INVOCATION_NT'try looking' {phrase invoked: call}
RVALUE_CONTEXT_NT'looking' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'looking' {kind: action} {action pattern: <action: looking / >}
CONSTANT_NT'looking' {kind: action} {action pattern: <action: looking>}
RULE_NT'a first turn sequence rule ( this is the every turn stage ru' {unit: 2}
CODE_BLOCK_NT
INVOCATION_LIST_NT'follow the every turn rules'
@ -7096,7 +7096,7 @@ ROOT_NT
INVOCATION_NT'try looking' {phrase invoked: call}
RVALUE_CONTEXT_NT'looking' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'looking' {kind: action} {action pattern: <action: looking / >}
CONSTANT_NT'looking' {kind: action} {action pattern: <action: looking>}
SENTENCE_NT'constructing the status line ( documented at act_csl ) is an' {unit: 2} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-activity}
UNPARSED_NOUN_NT'constructing the status line ( documented at act_csl )'
@ -9222,7 +9222,7 @@ ROOT_NT
INVOCATION_NT'silently try the actor trying inserting the transferred item' {phrase invoked: call}
RVALUE_CONTEXT_NT'actor trying inserting the transferred item into the current' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'actor trying inserting the transferred item into the current' {kind: action} {action pattern: <action: inserting it into / noun: LOCAL_VARIABLE_NT'the transferred item' {local: LV<unallocated> object} second: LOCAL_VARIABLE_NT'the current working sack' {local: LV"current working sack"-player's holdall player's holdall}>}
CONSTANT_NT'actor trying inserting the transferred item into the current' {kind: action} {action pattern: <action: inserting it into noun: LOCAL_VARIABLE_NT'the transferred item' {local: LV<unallocated> object} second: LOCAL_VARIABLE_NT'the current working sack' {local: LV"current working sack"-player's holdall player's holdall}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the transferred item is not in the current working sack' {colon_block_command} {indent: 4}
INVOCATION_NT'if the transferred item is not in the current working sack' {phrase invoked: call}
@ -9570,7 +9570,7 @@ ROOT_NT
INVOCATION_NT'silently try the actor trying taking off the noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'actor trying taking off the noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the actor is wearing the noun' {indent: 2} {colon_block_command}
INVOCATION_NT'if the actor is wearing the noun' {phrase invoked: call}
@ -9921,7 +9921,7 @@ ROOT_NT
INVOCATION_NT'silently try the actor trying taking off the noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'actor trying taking off the noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the actor is wearing the noun' {indent: 2} {colon_block_command}
INVOCATION_NT'if the actor is wearing the noun' {phrase invoked: call}
@ -10251,7 +10251,7 @@ ROOT_NT
INVOCATION_NT'silently try the actor trying taking off the noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'actor trying taking off the noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the actor is wearing the noun' {indent: 2} {colon_block_command}
INVOCATION_NT'if the actor is wearing the noun' {phrase invoked: call}
@ -10429,7 +10429,7 @@ ROOT_NT
INVOCATION_NT'try the actor trying taking off the noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'actor trying taking off the noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the actor is wearing the noun' {indent: 2} {colon_block_command}
INVOCATION_NT'if the actor is wearing the noun' {phrase invoked: call}
@ -10692,7 +10692,7 @@ ROOT_NT
INVOCATION_NT'silently try the actor exiting' {phrase invoked: call}
RVALUE_CONTEXT_NT'actor exiting' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'actor exiting' {kind: action} {action pattern: <action: exiting / >}
CONSTANT_NT'actor exiting' {kind: action} {action pattern: <action: exiting>}
RULE_NT'check an actor going ( this is the can't travel in what's no' {unit: 2}
CODE_BLOCK_NT
INVOCATION_LIST_NT'let nonvehicle be the holder of the actor' {indent: 1}
@ -10817,7 +10817,7 @@ ROOT_NT
INVOCATION_NT'silently try the actor opening the door gone through' {phrase invoked: call}
RVALUE_CONTEXT_NT'actor opening the door gone through' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'actor opening the door gone through' {kind: action} {action pattern: <action: opening / noun: NONLOCAL_VARIABLE_NT'the door gone through' {nonlocal: 'door gone through'(var)object}>}
CONSTANT_NT'actor opening the door gone through' {kind: action} {action pattern: <action: opening noun: NONLOCAL_VARIABLE_NT'the door gone through' {nonlocal: 'door gone through'(var)object}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the door gone through is open' {indent: 2} {colon_block_command}
INVOCATION_NT'if the door gone through is open' {phrase invoked: call}
@ -11391,7 +11391,7 @@ ROOT_NT
INVOCATION_NT'try looking' {phrase invoked: call}
RVALUE_CONTEXT_NT'looking' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'looking' {kind: action} {action pattern: <action: looking / >}
CONSTANT_NT'looking' {kind: action} {action pattern: <action: looking>}
INVOCATION_LIST_NT'continue the action' {indent: 3}
INVOCATION_NT'continue the action' {phrase invoked: call}
CODE_BLOCK_NT'say "."' {control structure: SAY}
@ -11867,7 +11867,7 @@ ROOT_NT
INVOCATION_NT'silently try the actor trying exiting' {phrase invoked: call}
RVALUE_CONTEXT_NT'actor trying exiting' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'actor trying exiting' {kind: action} {action pattern: <action: exiting / >}
CONSTANT_NT'actor trying exiting' {kind: action} {action pattern: <action: exiting>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the holder of the actor is the current home' {indent: 2} {colon_block_command}
INVOCATION_NT'if the holder of the actor is the current home' {phrase invoked: call}
@ -11996,7 +11996,7 @@ ROOT_NT
INVOCATION_NT'silently try the actor trying entering the target' {phrase invoked: call}
RVALUE_CONTEXT_NT'actor trying entering the target' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'actor trying entering the target' {kind: action} {action pattern: <action: entering / noun: LOCAL_VARIABLE_NT'the target' {local: LV"target"-object object}>}
CONSTANT_NT'actor trying entering the target' {kind: action} {action pattern: <action: entering noun: LOCAL_VARIABLE_NT'the target' {local: LV"target"-object object}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the holder of the actor is not the target' {indent: 3} {colon_block_command}
INVOCATION_NT'if the holder of the actor is not the target' {phrase invoked: call}
@ -14654,7 +14654,7 @@ ROOT_NT
INVOCATION_NT'silently try the actor trying taking off the noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'actor trying taking off the noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the actor is wearing the noun' {indent: 2} {colon_block_command}
INVOCATION_NT'if the actor is wearing the noun' {phrase invoked: call}
@ -14907,7 +14907,7 @@ ROOT_NT
INVOCATION_NT'silently try the actor trying taking off the noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'actor trying taking off the noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CONSTANT_NT'actor trying taking off the noun' {kind: action} {action pattern: <action: taking off noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the actor is wearing the noun' {indent: 2} {colon_block_command}
INVOCATION_NT'if the actor is wearing the noun' {phrase invoked: call}
@ -15228,7 +15228,7 @@ ROOT_NT
INVOCATION_NT'try taking inventory' {phrase invoked: call}
RVALUE_CONTEXT_NT'taking inventory' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'taking inventory' {kind: action} {action pattern: <action: taking inventory / >}
CONSTANT_NT'taking inventory' {kind: action} {action pattern: <action: taking inventory>}
CODE_BLOCK_NT {control structure: INS}
RULE_NT'check an actor asking something for ( this is the translate ' {unit: 2}
CODE_BLOCK_NT
@ -18638,7 +18638,7 @@ ROOT_NT
INVOCATION_NT'try the current owner closing the escape' {phrase invoked: call}
RVALUE_CONTEXT_NT'current owner closing the escape' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'current owner closing the escape' {kind: action} {action pattern: <action: closing / noun: LOCAL_VARIABLE_NT'the escape' {local: LV"escape"-door door}>}
CONSTANT_NT'current owner closing the escape' {kind: action} {action pattern: <action: closing noun: LOCAL_VARIABLE_NT'the escape' {local: LV"escape"-door door}>}
CODE_BLOCK_NT {control structure: INS}
RULE_NT'report someone closing a door when the person asked owns the' {unit: 4}
CODE_BLOCK_NT
@ -18703,7 +18703,7 @@ ROOT_NT
INVOCATION_NT'try the current owner filing the target' {phrase invoked: call}
RVALUE_CONTEXT_NT'current owner filing the target' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'current owner filing the target' {kind: action} {action pattern: <action: filing / noun: LOCAL_VARIABLE_NT'the target' {local: LV"target"-artwork artwork}>}
CONSTANT_NT'current owner filing the target' {kind: action} {action pattern: <action: filing noun: LOCAL_VARIABLE_NT'the target' {local: LV"target"-artwork artwork}>}
SENTENCE_NT'filing is an action applying to one thing' {unit: 4} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'filing'
@ -18714,7 +18714,7 @@ ROOT_NT
INVOCATION_NT'try the person asked taking the noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked taking the noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked taking the noun' {kind: action} {action pattern: <action: taking / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CONSTANT_NT'person asked taking the noun' {kind: action} {action pattern: <action: taking noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CODE_BLOCK_NT {control structure: INS}
RULE_NT'carry out someone filing' {unit: 4}
CODE_BLOCK_NT
@ -18793,7 +18793,7 @@ ROOT_NT
INVOCATION_NT'try the current actor resolving the problem' {phrase invoked: call}
RVALUE_CONTEXT_NT'current actor resolving the problem' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'current actor resolving the problem' {kind: action} {action pattern: <action: resolving / noun: LOCAL_VARIABLE_NT'the problem' {local: LV"problem"-thing thing}>}
CONSTANT_NT'current actor resolving the problem' {kind: action} {action pattern: <action: resolving noun: LOCAL_VARIABLE_NT'the problem' {local: LV"problem"-thing thing}>}
CODE_BLOCK_NT {control structure: INS}
RULE_NT'a shopper rule' {unit: 4}
CODE_BLOCK_NT
@ -18811,7 +18811,7 @@ ROOT_NT
INVOCATION_NT'try the current actor approaching the pool hall' {phrase invoked: call}
RVALUE_CONTEXT_NT'current actor approaching the pool hall' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'current actor approaching the pool hall' {kind: action} {action pattern: <action: approaching / noun: CONSTANT_NT'the pool hall' {kind: room} {instance: I88'alfred cralle pool hall'} {enumeration: 0}>}
CONSTANT_NT'current actor approaching the pool hall' {kind: action} {action pattern: <action: approaching noun: CONSTANT_NT'the pool hall' {kind: room} {instance: I88'alfred cralle pool hall'} {enumeration: 0}>}
CODE_BLOCK_NT'otherwise' {colon_block_command} {indent: 1} {control structure: O}
INVOCATION_LIST_NT'let way be a random direction' {indent: 2}
INVOCATION_NT'let way be a random direction' {phrase invoked: call}
@ -18830,7 +18830,7 @@ ROOT_NT
INVOCATION_NT'try the current actor going the way' {phrase invoked: call}
RVALUE_CONTEXT_NT'current actor going the way' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'current actor going the way' {kind: action} {action pattern: <action: going / noun: LOCAL_VARIABLE_NT'the way' {local: LV<unallocated> direction}>}
CONSTANT_NT'current actor going the way' {kind: action} {action pattern: <action: going noun: LOCAL_VARIABLE_NT'the way' {local: LV<unallocated> direction}>}
RULE_NT'definition' {unit: 4}
CODE_BLOCK_NT
CODE_BLOCK_NT {control structure: IF}
@ -18922,7 +18922,7 @@ ROOT_NT
INVOCATION_NT'try the person asked approaching the public library' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked approaching the public library' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked approaching the public library' {kind: action} {action pattern: <action: approaching / noun: CONSTANT_NT'the public library' {kind: room} {instance: I110'public library'} {enumeration: 0}>}
CONSTANT_NT'person asked approaching the public library' {kind: action} {action pattern: <action: approaching noun: CONSTANT_NT'the public library' {kind: room} {instance: I110'public library'} {enumeration: 0}>}
CODE_BLOCK_NT {control structure: INS}
RULE_NT'carry out someone resolving a book' {unit: 4}
CODE_BLOCK_NT
@ -18985,7 +18985,7 @@ ROOT_NT
INVOCATION_NT'try the person asked approaching the post office' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked approaching the post office' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked approaching the post office' {kind: action} {action pattern: <action: approaching / noun: CONSTANT_NT'the post office' {kind: room} {instance: I96'post office'} {enumeration: 0}>}
CONSTANT_NT'person asked approaching the post office' {kind: action} {action pattern: <action: approaching noun: CONSTANT_NT'the post office' {kind: room} {instance: I96'post office'} {enumeration: 0}>}
CODE_BLOCK_NT {control structure: INS}
RULE_NT'carry out someone resolving a stamped envelope' {unit: 4}
CODE_BLOCK_NT
@ -19068,7 +19068,7 @@ ROOT_NT
INVOCATION_NT'try the person asked approaching the rental store' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked approaching the rental store' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked approaching the rental store' {kind: action} {action pattern: <action: approaching / noun: CONSTANT_NT'the rental store' {kind: room} {instance: I104'movie rental store'} {enumeration: 0}>}
CONSTANT_NT'person asked approaching the rental store' {kind: action} {action pattern: <action: approaching noun: CONSTANT_NT'the rental store' {kind: room} {instance: I104'movie rental store'} {enumeration: 0}>}
CODE_BLOCK_NT {control structure: INS}
RULE_NT'carry out someone resolving a dvd' {unit: 4}
CODE_BLOCK_NT
@ -19194,7 +19194,7 @@ ROOT_NT
INVOCATION_NT'try the person asked going the way' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked going the way' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked going the way' {kind: action} {action pattern: <action: going / noun: LOCAL_VARIABLE_NT'the way' {local: LV"way"-object object}>}
CONSTANT_NT'person asked going the way' {kind: action} {action pattern: <action: going noun: LOCAL_VARIABLE_NT'the way' {local: LV"way"-object object}>}
CODE_BLOCK_NT'otherwise' {results_from_splitting} {control structure: O}
INVOCATION_LIST_NT'stop the action' {indent: 1}
INVOCATION_NT'stop the action' {phrase invoked: call}
@ -19209,7 +19209,7 @@ ROOT_NT
INVOCATION_NT'try the person asked giving the noun to vanessa' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked giving the noun to vanessa' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked giving the noun to vanessa' {kind: action} {action pattern: <action: giving it to / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}} second: CONSTANT_NT'vanessa' {kind: woman} {instance: I129'vanessa'} {enumeration: 0}>}
CONSTANT_NT'person asked giving the noun to vanessa' {kind: action} {action pattern: <action: giving it to noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}} second: CONSTANT_NT'vanessa' {kind: woman} {instance: I129'vanessa'} {enumeration: 0}>}
SENTENCE_NT'the block giving rule is not listed in any rulebook' {unit: 4} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {rule placement sense: negative} {special meaning: rule-listed-in}
UNPARSED_NOUN_NT'the block giving rule'
@ -19227,7 +19227,7 @@ ROOT_NT
INVOCATION_NT'try the person asked approaching cold comfort' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked approaching cold comfort' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked approaching cold comfort' {kind: action} {action pattern: <action: approaching / noun: CONSTANT_NT'cold comfort' {kind: room} {instance: I100'cold comfort ice cream'} {enumeration: 0}>}
CONSTANT_NT'person asked approaching cold comfort' {kind: action} {action pattern: <action: approaching noun: CONSTANT_NT'cold comfort' {kind: room} {instance: I100'cold comfort ice cream'} {enumeration: 0}>}
CODE_BLOCK_NT {control structure: INS}
RULE_NT'after someone giving a coupon to vanessa' {unit: 4}
CODE_BLOCK_NT
@ -19495,7 +19495,7 @@ ROOT_NT
INVOCATION_NT'try the person asked eating the noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked eating the noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked eating the noun' {kind: action} {action pattern: <action: eating / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CONSTANT_NT'person asked eating the noun' {kind: action} {action pattern: <action: eating noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CODE_BLOCK_NT {control structure: INS}
RULE_NT'instead of someone eating a fresh ice cream cone' {unit: 4}
CODE_BLOCK_NT
@ -19633,7 +19633,7 @@ ROOT_NT
INVOCATION_NT'try typhoid mary sneezing on the random bystander' {phrase invoked: call}
RVALUE_CONTEXT_NT'typhoid mary sneezing on the random bystander' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'typhoid mary sneezing on the random bystander' {kind: action} {action pattern: <action: sneezing on / noun: LOCAL_VARIABLE_NT'the random bystander' {local: LV"random bystander"-person person}>}
CONSTANT_NT'typhoid mary sneezing on the random bystander' {kind: action} {action pattern: <action: sneezing on noun: LOCAL_VARIABLE_NT'the random bystander' {local: LV"random bystander"-person person}>}
SENTENCE_NT'a person can be infected or clean' {unit: 4} {classified}
VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}
COMMON_NOUN_NT'a person' {refined} {refers: infs'person'} {creation: << kind=person(x) >>} {eval: TEST_VALUE_NT}
@ -19973,7 +19973,7 @@ ROOT_NT
INVOCATION_NT'try opening the blocking door' {phrase invoked: call}
RVALUE_CONTEXT_NT'opening the blocking door' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'opening the blocking door' {kind: action} {action pattern: <action: opening / noun: LOCAL_VARIABLE_NT'the blocking door' {local: LV"blocking door"-door door}>}
CONSTANT_NT'opening the blocking door' {kind: action} {action pattern: <action: opening noun: LOCAL_VARIABLE_NT'the blocking door' {local: LV"blocking door"-door door}>}
CODE_BLOCK_NT'otherwise' {colon_block_command} {indent: 1} {control structure: O}
CODE_BLOCK_NT'say "(first opening [the blocking door])[command clarificati' {control structure: SAY}
INVOCATION_LIST_SAY_NT'"(first opening [the blocking door])[command clarification b'
@ -19985,7 +19985,7 @@ ROOT_NT
INVOCATION_NT'silently try opening the blocking door' {phrase invoked: call}
RVALUE_CONTEXT_NT'opening the blocking door' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'opening the blocking door' {kind: action} {action pattern: <action: opening / noun: LOCAL_VARIABLE_NT'the blocking door' {local: LV"blocking door"-door door}>}
CONSTANT_NT'opening the blocking door' {kind: action} {action pattern: <action: opening noun: LOCAL_VARIABLE_NT'the blocking door' {local: LV"blocking door"-door door}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the blocking door is closed' {indent: 1} {colon_block_command}
INVOCATION_NT'if the blocking door is closed' {phrase invoked: call}
@ -20010,7 +20010,7 @@ ROOT_NT
INVOCATION_NT'try closing the door ajar' {phrase invoked: call}
RVALUE_CONTEXT_NT'closing the door ajar' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'closing the door ajar' {kind: action} {action pattern: <action: closing / noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CONSTANT_NT'closing the door ajar' {kind: action} {action pattern: <action: closing noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CODE_BLOCK_NT'otherwise' {colon_block_command} {indent: 1} {control structure: O}
CODE_BLOCK_NT'say "(first closing [the door ajar])[command clarification b' {control structure: SAY}
INVOCATION_LIST_SAY_NT'"(first closing [the door ajar])[command clarification break'
@ -20022,7 +20022,7 @@ ROOT_NT
INVOCATION_NT'silently try closing the door ajar' {phrase invoked: call}
RVALUE_CONTEXT_NT'closing the door ajar' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'closing the door ajar' {kind: action} {action pattern: <action: closing / noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CONSTANT_NT'closing the door ajar' {kind: action} {action pattern: <action: closing noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the door ajar is open' {indent: 1} {colon_block_command}
INVOCATION_NT'if the door ajar is open' {phrase invoked: call}
@ -20047,7 +20047,7 @@ ROOT_NT
INVOCATION_NT'try closing the door ajar' {phrase invoked: call}
RVALUE_CONTEXT_NT'closing the door ajar' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'closing the door ajar' {kind: action} {action pattern: <action: closing / noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CONSTANT_NT'closing the door ajar' {kind: action} {action pattern: <action: closing noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CODE_BLOCK_NT'otherwise' {colon_block_command} {indent: 1} {control structure: O}
CODE_BLOCK_NT'say "(first closing [the door ajar])[command clarification b' {control structure: SAY}
INVOCATION_LIST_SAY_NT'"(first closing [the door ajar])[command clarification break'
@ -20059,7 +20059,7 @@ ROOT_NT
INVOCATION_NT'silently try closing the door ajar' {phrase invoked: call}
RVALUE_CONTEXT_NT'closing the door ajar' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'closing the door ajar' {kind: action} {action pattern: <action: closing / noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CONSTANT_NT'closing the door ajar' {kind: action} {action pattern: <action: closing noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the door ajar is open' {indent: 1} {colon_block_command}
INVOCATION_NT'if the door ajar is open' {phrase invoked: call}
@ -20084,7 +20084,7 @@ ROOT_NT
INVOCATION_NT'try unlocking keylessly the sealed chest' {phrase invoked: call}
RVALUE_CONTEXT_NT'unlocking keylessly the sealed chest' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'unlocking keylessly the sealed chest' {kind: action} {action pattern: <action: unlocking keylessly / noun: LOCAL_VARIABLE_NT'the sealed chest' {local: LV"sealed chest"-thing thing}>}
CONSTANT_NT'unlocking keylessly the sealed chest' {kind: action} {action pattern: <action: unlocking keylessly noun: LOCAL_VARIABLE_NT'the sealed chest' {local: LV"sealed chest"-thing thing}>}
CODE_BLOCK_NT'otherwise' {colon_block_command} {indent: 1} {control structure: O}
CODE_BLOCK_NT'say "(first unlocking [the sealed chest])[command clarificat' {control structure: SAY}
INVOCATION_LIST_SAY_NT'"(first unlocking [the sealed chest])[command clarification '
@ -20096,7 +20096,7 @@ ROOT_NT
INVOCATION_NT'silently try unlocking keylessly the sealed chest' {phrase invoked: call}
RVALUE_CONTEXT_NT'unlocking keylessly the sealed chest' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'unlocking keylessly the sealed chest' {kind: action} {action pattern: <action: unlocking keylessly / noun: LOCAL_VARIABLE_NT'the sealed chest' {local: LV"sealed chest"-thing thing}>}
CONSTANT_NT'unlocking keylessly the sealed chest' {kind: action} {action pattern: <action: unlocking keylessly noun: LOCAL_VARIABLE_NT'the sealed chest' {local: LV"sealed chest"-thing thing}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the sealed chest is locked' {indent: 1} {colon_block_command}
INVOCATION_NT'if the sealed chest is locked' {phrase invoked: call}
@ -20113,7 +20113,7 @@ ROOT_NT
INVOCATION_NT'try the person asked trying opening the blocking door' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked trying opening the blocking door' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked trying opening the blocking door' {kind: action} {action pattern: <action: opening / noun: LOCAL_VARIABLE_NT'the blocking door' {local: LV"blocking door"-door door}>}
CONSTANT_NT'person asked trying opening the blocking door' {kind: action} {action pattern: <action: opening noun: LOCAL_VARIABLE_NT'the blocking door' {local: LV"blocking door"-door door}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the blocking door is closed' {colon_block_command}
INVOCATION_NT'if the blocking door is closed' {phrase invoked: call}
@ -20130,7 +20130,7 @@ ROOT_NT
INVOCATION_NT'try the person asked trying closing the door ajar' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked trying closing the door ajar' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked trying closing the door ajar' {kind: action} {action pattern: <action: closing / noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CONSTANT_NT'person asked trying closing the door ajar' {kind: action} {action pattern: <action: closing noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the door ajar is open' {colon_block_command}
INVOCATION_NT'if the door ajar is open' {phrase invoked: call}
@ -20147,7 +20147,7 @@ ROOT_NT
INVOCATION_NT'try the person asked trying closing the door ajar' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked trying closing the door ajar' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked trying closing the door ajar' {kind: action} {action pattern: <action: closing / noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CONSTANT_NT'person asked trying closing the door ajar' {kind: action} {action pattern: <action: closing noun: LOCAL_VARIABLE_NT'the door ajar' {local: LV"door ajar"-thing thing}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the door ajar is open' {colon_block_command}
INVOCATION_NT'if the door ajar is open' {phrase invoked: call}
@ -20164,7 +20164,7 @@ ROOT_NT
INVOCATION_NT'try the person asked trying unlocking keylessly the sealed c' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked trying unlocking keylessly the sealed chest' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked trying unlocking keylessly the sealed chest' {kind: action} {action pattern: <action: unlocking keylessly / noun: LOCAL_VARIABLE_NT'the sealed chest' {local: LV"sealed chest"-thing thing}>}
CONSTANT_NT'person asked trying unlocking keylessly the sealed chest' {kind: action} {action pattern: <action: unlocking keylessly noun: LOCAL_VARIABLE_NT'the sealed chest' {local: LV"sealed chest"-thing thing}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the sealed chest is locked' {colon_block_command}
INVOCATION_NT'if the sealed chest is locked' {phrase invoked: call}
@ -20421,7 +20421,7 @@ ROOT_NT
INVOCATION_NT'try the person asked unlocking the noun with the key unlocke' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked unlocking the noun with the key unlocked with' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked unlocking the noun with the key unlocked with' {kind: action} {action pattern: <action: unlocking it with / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}} second: NONLOCAL_VARIABLE_NT'the key unlocked with' {nonlocal: 'key unlocked with'(var)object}>}
CONSTANT_NT'person asked unlocking the noun with the key unlocked with' {kind: action} {action pattern: <action: unlocking it with noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}} second: NONLOCAL_VARIABLE_NT'the key unlocked with' {nonlocal: 'key unlocked with'(var)object}>}
HEADING_NT'part 3 - locking' {heading 3} {under: H3'part 3 - locking'} {unit: 4}
HEADING_NT'section 1 - regular locking' {heading 5} {under: H5'section 1 - regular locking'} {unit: 4}
SENTENCE_NT'understand the command lock as something new' {unit: 4} {classified}
@ -20540,7 +20540,7 @@ ROOT_NT
INVOCATION_NT'try the person asked locking the noun with the key locked wi' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked locking the noun with the key locked with' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked locking the noun with the key locked with' {kind: action} {action pattern: <action: locking it with / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}} second: NONLOCAL_VARIABLE_NT'the key locked with' {nonlocal: 'key locked with'(var)object}>}
CONSTANT_NT'person asked locking the noun with the key locked with' {kind: action} {action pattern: <action: locking it with noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}} second: NONLOCAL_VARIABLE_NT'the key locked with' {nonlocal: 'key locked with'(var)object}>}
HEADING_NT'volume 3 - the passkey kind , needed only if you want keys t' {heading 1} {under: H1'volume 3 - the passkey kind , needed only if you want keys to name themselves'} {unit: 4}
SENTENCE_NT'a passkey is a kind of thing' {unit: 4} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
@ -20652,9 +20652,9 @@ ROOT_NT
}
LOGICAL_OR_NT'locking or unlocking something with something which is on a '
TEST_VALUE_NT'locking'
CONSTANT_NT'locking' {kind: described action} {action pattern: <action: locking it with / >}
CONSTANT_NT'locking' {kind: described action} {action pattern: <action: locking it with>}
TEST_VALUE_NT'unlocking something with something which is on a keychain wh'
CONSTANT_NT'unlocking something with something which is on a keychain wh' {kind: described action} {action pattern: <action: unlocking it with / noun: TEST_VALUE_NT'something' second: TEST_VALUE_NT'something which is on a keychain which is carried by the act' {term: x} {converted SN}>}
CONSTANT_NT'unlocking something with something which is on a keychain wh' {kind: described action} {action pattern: <action: unlocking it with noun: TEST_VALUE_NT'something' second: TEST_VALUE_NT'something which is on a keychain which is carried by the act' {term: x} {converted SN}>}
CODE_BLOCK_NT
INVOCATION_LIST_NT'continue the action' {indent: 2}
INVOCATION_NT'continue the action' {phrase invoked: call}
@ -20701,13 +20701,13 @@ ROOT_NT
INVOCATION_NT'try taking the noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'taking the noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'taking the noun' {kind: action} {action pattern: <action: taking / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CONSTANT_NT'taking the noun' {kind: action} {action pattern: <action: taking noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CODE_BLOCK_NT'otherwise' {colon_block_command} {indent: 2} {control structure: O}
INVOCATION_LIST_NT'try the person asked trying taking the noun' {indent: 3}
INVOCATION_NT'try the person asked trying taking the noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked trying taking the noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked trying taking the noun' {kind: action} {action pattern: <action: taking / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CONSTANT_NT'person asked trying taking the noun' {kind: action} {action pattern: <action: taking noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}}>}
CODE_BLOCK_NT'otherwise' {colon_block_command} {indent: 1} {control structure: O}
INVOCATION_LIST_NT'carry out the implicitly taking activity with the noun' {indent: 2}
INVOCATION_NT'carry out the implicitly taking activity with the noun' {phrase invoked: call} {kind variable declarations: K=object}
@ -20739,13 +20739,13 @@ ROOT_NT
INVOCATION_NT'try taking the second noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'taking the second noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'taking the second noun' {kind: action} {action pattern: <action: taking / noun: NONLOCAL_VARIABLE_NT'the second noun' {nonlocal: 'second noun'(var)object}{meaning: {second noun = VARIABLE_MC}}>}
CONSTANT_NT'taking the second noun' {kind: action} {action pattern: <action: taking noun: NONLOCAL_VARIABLE_NT'the second noun' {nonlocal: 'second noun'(var)object}{meaning: {second noun = VARIABLE_MC}}>}
CODE_BLOCK_NT'otherwise' {colon_block_command} {indent: 2} {control structure: O}
INVOCATION_LIST_NT'try the person asked trying taking the second noun' {indent: 3}
INVOCATION_NT'try the person asked trying taking the second noun' {phrase invoked: call}
RVALUE_CONTEXT_NT'person asked trying taking the second noun' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'person asked trying taking the second noun' {kind: action} {action pattern: <action: taking / noun: NONLOCAL_VARIABLE_NT'the second noun' {nonlocal: 'second noun'(var)object}{meaning: {second noun = VARIABLE_MC}}>}
CONSTANT_NT'person asked trying taking the second noun' {kind: action} {action pattern: <action: taking noun: NONLOCAL_VARIABLE_NT'the second noun' {nonlocal: 'second noun'(var)object}{meaning: {second noun = VARIABLE_MC}}>}
CODE_BLOCK_NT'otherwise' {colon_block_command} {indent: 1} {control structure: O}
INVOCATION_LIST_NT'carry out the implicitly taking activity with the second nou' {indent: 2}
INVOCATION_NT'carry out the implicitly taking activity with the second nou' {phrase invoked: call} {kind variable declarations: K=object}
@ -21044,7 +21044,7 @@ ROOT_NT
INVOCATION_NT'try going heading' {phrase invoked: call}
RVALUE_CONTEXT_NT'going heading' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'going heading' {kind: action} {action pattern: <action: going / noun: LOCAL_VARIABLE_NT'heading' {local: LV"heading"-object object}>}
CONSTANT_NT'going heading' {kind: action} {action pattern: <action: going noun: LOCAL_VARIABLE_NT'heading' {local: LV"heading"-object object}>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the location is the destination of the player' {colon_block_command}
INVOCATION_NT'if the location is the destination of the player' {phrase invoked: call}
@ -21072,7 +21072,7 @@ ROOT_NT
INVOCATION_NT'try going toward destination of the player' {phrase invoked: call}
RVALUE_CONTEXT_NT'going toward destination of the player' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'going toward destination of the player' {kind: action} {action pattern: <action: going toward / noun: PROPERTY_VALUE_NT'destination of the player'>}
CONSTANT_NT'going toward destination of the player' {kind: action} {action pattern: <action: going toward noun: PROPERTY_VALUE_NT'destination of the player'>}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the location is the destination of the player' {indent: 2} {colon_block_command}
INVOCATION_NT'if the location is the destination of the player' {phrase invoked: call}
@ -21849,7 +21849,7 @@ ROOT_NT
INVOCATION_NT'try entering the nearest exit' {phrase invoked: call}
RVALUE_CONTEXT_NT'entering the nearest exit' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'entering the nearest exit' {kind: action} {action pattern: <action: entering / noun: LOCAL_VARIABLE_NT'the nearest exit' {local: LV"nearest exit"-door door}>}
CONSTANT_NT'entering the nearest exit' {kind: action} {action pattern: <action: entering noun: LOCAL_VARIABLE_NT'the nearest exit' {local: LV"nearest exit"-door door}>}
CODE_BLOCK_NT {control structure: INS}
CODE_BLOCK_NT {control structure: RPT}
INVOCATION_LIST_NT'repeat with way running through directions' {colon_block_command} {indent: 1}
@ -21888,7 +21888,7 @@ ROOT_NT
INVOCATION_NT'try going way' {phrase invoked: call}
RVALUE_CONTEXT_NT'going way' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'going way' {kind: action} {action pattern: <action: going / noun: LOCAL_VARIABLE_NT'way' {local: LV<unallocated> direction}>}
CONSTANT_NT'going way' {kind: action} {action pattern: <action: going noun: LOCAL_VARIABLE_NT'way' {local: LV<unallocated> direction}>}
CODE_BLOCK_NT {control structure: INS}
SENTENCE_NT'blank is a room' {unit: 4} {classified} {interpretation of subject: infs'key to the city'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
@ -22284,7 +22284,7 @@ ROOT_NT
INVOCATION_NT'try asking the noun about it' {phrase invoked: call}
RVALUE_CONTEXT_NT'asking the noun about it' {token check to do: <null-parse-node>
} {token to be parsed against: TEST_VALUE_NT'action'} {required: action}
CONSTANT_NT'asking the noun about it' {kind: action} {action pattern: <action: asking it about / noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}} second: CONSTANT_NT'it' {kind: topic}>}
CONSTANT_NT'asking the noun about it' {kind: action} {action pattern: <action: asking it about noun: NONLOCAL_VARIABLE_NT'the noun' {nonlocal: 'noun'(var)object}{meaning: {noun = VARIABLE_MC}} second: CONSTANT_NT'it' {kind: topic}>}
SENTENCE_NT'understand "recap" or "recall" or "review" as recalling conv' {unit: 4} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"recap" or "recall" or "review"'
@ -23401,7 +23401,7 @@ ROOT_NT
}
LOGICAL_AND_NT'looking and a marked for listing person is not in the locati'
TEST_VALUE_NT'looking'
CONSTANT_NT'looking' {kind: action} {action pattern: <action: looking / >}
CONSTANT_NT'looking' {kind: action} {action pattern: <action: looking>}
TEST_PROPOSITION_NT'a marked for listing person is not in the location' {proposition: << Exists x : kind=person(x) ^ marked for listing(x) ^ NOT< ('the location' == <ContainerOf(*1) : x>) NOT> >>} {term: x}
CODE_BLOCK_NT
INVOCATION_LIST_NT'clear marked people' {indent: 3}

View file

@ -1,10 +1,10 @@
Total memory consumption was 258576K = 253 MB
62.4% was used for 1339985 objects, in 278608 frames in 202 x 800K = 161600K = 157 MB:
62.4% was used for 1338991 objects, in 278613 frames in 202 x 800K = 161600K = 157 MB:
9.8% inter_tree_node_array 36 x 8192 = 294912 objects, 25953408 bytes
5.5% text_stream_array 2595 x 100 = 259500 objects, 14615040 bytes
3.9% parse_node 129987 objects, 10398960 bytes
3.9% parse_node 129993 objects, 10399440 bytes
2.8% verb_conjugation 160 objects, 7425280 bytes
2.6% parse_node_annotation_array 431 x 500 = 215500 objects, 6909792 bytes
2.4% linked_list 11779 objects, 6596240 bytes
@ -39,8 +39,8 @@ Total memory consumption was 258576K = 253 MB
0.1% scan_directory 70 objects, 288960 bytes
0.1% noun 2379 objects, 285480 bytes
---- inference_subject 665 objects, 260680 bytes
---- anl_link_array 3 x 1000 = 3000 objects, 240096 bytes
---- inter_annotation_array 1 x 8192 objects, 196640 bytes
---- anl_entry_array 3 x 1000 = 3000 objects, 192096 bytes
---- linguistic_stock_item 3315 objects, 159120 bytes
---- binary_predicate 321 objects, 156648 bytes
---- stacked_variable_owner_list_array 38 x 100 = 3800 objects, 153216 bytes
@ -74,7 +74,6 @@ Total memory consumption was 258576K = 253 MB
---- response_message 407 objects, 35816 bytes
---- production_list 618 objects, 34608 bytes
---- regions_data 670 objects, 32160 bytes
---- anl_head_array 2 x 1000 = 2000 objects, 32064 bytes
---- HTML_tag_array 1 x 1000 objects, 32032 bytes
---- property_permission 96 objects, 30720 bytes
---- verb_sense 403 objects, 29016 bytes
@ -90,6 +89,7 @@ Total memory consumption was 258576K = 253 MB
---- property 146 objects, 18688 bytes
---- action_name 90 objects, 18000 bytes
---- parse_node_tree 20 objects, 17280 bytes
---- action_name_list_array 1 x 1000 objects, 16032 bytes
---- match_avinue_array 1 x 1000 objects, 16032 bytes
---- linked_list_item_array 1 x 1000 objects, 16032 bytes
---- to_phrase_request 59 objects, 15576 bytes
@ -245,5 +245,5 @@ Total memory consumption was 258576K = 253 MB
---- emitter array storage 12320 bytes in 8 claims
---- code generation workspace for objects 9200 bytes in 9 claims
19.9% was overhead - 52757664 bytes = 51521K = 50 MB
19.9% was overhead - 52821216 bytes = 51583K = 50 MB

View file

@ -1,15 +1,15 @@
100.0% in inform7 run
67.0% in compilation to Inter
25.6% in //Phrases::Manager::compile_first_block//
8.3% in //Phrases::Manager::compile_as_needed//
6.9% in //Strings::compile_responses//
6.2% in //InferenceSubjects::emit_all//
25.8% in //Phrases::Manager::compile_first_block//
8.5% in //Phrases::Manager::compile_as_needed//
7.0% in //Strings::compile_responses//
6.0% in //InferenceSubjects::emit_all//
4.2% in //MajorNodes::pre_pass//
3.3% in //MajorNodes::pass_1//
1.9% in //Phrases::Manager::RulePrintingRule_routine//
1.9% in //Phrases::Manager::rulebooks_array//
1.0% in //RTVerbs::ConjugateVerb//
0.8% in //Phrases::Manager::traverse//
2.0% in //Phrases::Manager::RulePrintingRule_routine//
1.8% in //Phrases::Manager::rulebooks_array//
1.1% in //RTVerbs::ConjugateVerb//
0.7% in //Phrases::Manager::traverse//
0.5% in //Phrases::Manager::parse_rule_parameters//
0.5% in //World::stage_V//
0.3% in //MajorNodes::pass_2//
@ -19,19 +19,18 @@
0.1% in //RTKinds::compile_data_type_support_routines//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
3.4% not specifically accounted for
30.4% in running Inter pipeline
9.8% in inter step 2/12: link
9.6% in step preparation
7.1% in inter step 12/12: generate inform6 -> auto.inf
3.3% not specifically accounted for
30.6% in running Inter pipeline
9.9% in step preparation
9.7% in inter step 2/12: link
7.2% in inter step 12/12: generate inform6 -> auto.inf
0.3% in inter step 9/12: make-identifiers-unique
0.1% in inter step 10/12: reconcile-verbs
0.1% in inter step 11/12: eliminate-redundant-labels
0.1% in inter step 4/12: parse-linked-matter
0.1% in inter step 5/12: resolve-conditional-compilation
0.1% in inter step 6/12: assimilate
0.1% in inter step 7/12: resolve-external-symbols
0.1% in inter step 8/12: inspect-plugs
2.3% not specifically accounted for
1.9% in supervisor
0.6% not specifically accounted for
2.2% not specifically accounted for
2.0% in supervisor
0.2% not specifically accounted for

View file

@ -265,9 +265,9 @@ DECLARE_CLASS(rubric_holder)
@e slash_gpr_CLASS
@e spatial_data_CLASS
@e anl_link_CLASS
@e anl_entry_CLASS
@e action_pattern_CLASS
@e anl_head_CLASS
@e action_name_list_CLASS
@e ap_optional_clause_CLASS
@e scene_connector_CLASS
@e understanding_item_CLASS
@ -299,9 +299,9 @@ DECLARE_CLASS(scene)
DECLARE_CLASS(slash_gpr)
DECLARE_CLASS(spatial_data)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(anl_link, 1000)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(anl_entry, 1000)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(action_pattern, 100)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(anl_head, 1000)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(action_name_list, 1000)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(ap_optional_clause, 400)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(scene_connector, 1000)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(understanding_item, 100)

View file

@ -12,8 +12,8 @@ Setting up the use of this module.
COMPILE_WRITER(action_pattern *, ActionPatterns::log)
COMPILE_WRITER(grammar_verb *, PL::Parsing::Verbs::log)
COMPILE_WRITER(grammar_line *, PL::Parsing::Lines::log)
COMPILE_WRITER(anl_head *, ActionNameLists::log)
COMPILE_WRITER(anl_link *, ActionNameLists::log_anl_link)
COMPILE_WRITER(action_name_list *, ActionNameLists::log)
COMPILE_WRITER(anl_entry *, ActionNameLists::log_entry)
COMPILE_WRITER(action_name *, ActionNameNames::log)
void IFModule::start(void) {
@ -53,7 +53,7 @@ void IFModule::start(void) {
REGISTER_WRITER('G', PL::Parsing::Verbs::log);
REGISTER_WRITER('g', PL::Parsing::Lines::log);
REGISTER_WRITER('L', ActionNameLists::log);
REGISTER_WRITER('8', ActionNameLists::log_anl_link);
REGISTER_WRITER('8', ActionNameLists::log_entry);
REGISTER_WRITER('l', ActionNameNames::log);
@ =

View file

@ -1,133 +1,393 @@
[ActionNameLists::] Action Name Lists.
Action name lists provide a disjunction in the choice of action
made by an action pattern. For instance, "taking or dropping the disc"
results in a two-entry ANL. An empty ANL is also legal, and means "doing
something" -- the generic I7 text for "any action at all".
Action name lists are used in parsing action patterns, and identify which
action names seem to be possible within them.
@h Definitions.
@h Data structure.
An ANL is a head object, an //action_name_list//, which points to a linked
list of //anl_entry// objects.
=
typedef struct anl_head {
struct anl_link *body;
int anyone_specified;
} anl_head;
typedef struct action_name_list {
struct anl_entry *entries;
int negation_state;
} action_name_list;
anl_head *ActionNameLists::new_head(anl_link *anl, int negate_pattern) {
anl_head *head = CREATE(anl_head);
head->body = anl;
head->anyone_specified = FALSE;
if (negate_pattern) {
if (anl == NULL) internal_error("cannot");
anl->negate_pattern = negate_pattern;
}
return head;
action_name_list *ActionNameLists::new_list(anl_entry *first, int state) {
action_name_list *list = CREATE(action_name_list);
list->entries = first;
list->negation_state = state;
return list;
}
typedef struct anl_link {
@ The "negation state" of a list is one of three possibilities, not two. The
difference is that "doing something other than examining the box", for example,
is |ANL_NEGATED_LISTWISE|, whereas "doing something other than examining to the
box" is |ANL_NEGATED_ITEMWISE|. Note that the state is set irrevocably when the
list is created.
@d ANL_POSITIVE 1
@d ANL_NEGATED_LISTWISE 2
@d ANL_NEGATED_ITEMWISE 3
=
int ActionNameLists::listwise_negated(action_name_list *list) {
if ((list) && (list->negation_state == ANL_NEGATED_LISTWISE)) return TRUE;
return FALSE;
}
int ActionNameLists::itemwise_negated(action_name_list *list) {
if ((list) && (list->negation_state == ANL_NEGATED_ITEMWISE)) return TRUE;
return FALSE;
}
int ActionNameLists::positive(action_name_list *list) {
if ((list == NULL) || (list->negation_state == ANL_POSITIVE)) return TRUE;
return FALSE;
}
@ An entry has some book-keeping fields, and is otherwise divided into the
item itself -- either an action name or a named action pattern -- and some
parsing data needed by the complicated algorithms for turning text into an
action list.
=
typedef struct anl_entry {
struct anl_item item;
struct anl_link *next; /* next in this ANL list */
int delete_this_link; /* used temporarily during parsing */
struct anl_parsing_data parsing_data;
int marked_for_deletion;
struct anl_entry *next_link; /* next in this ANL list */
} anl_entry;
anl_entry *ActionNameLists::new_entry_at(int at) {
anl_entry *new_anl = CREATE(anl_entry);
new_anl->item = ActionNameLists::new_item();
new_anl->parsing_data = ActionNameLists::new_parsing_data(at);
new_anl->marked_for_deletion = FALSE;
return new_anl;
}
@ The model here is that the list can be reduced in size by marking entries
for deletion and then, subsequently, having all such entries removed. Note
that the head //action_name_list// object remains valid even if every entry
is removed.
=
void ActionNameLists::mark_for_deletion(anl_entry *X) {
if (X) X->marked_for_deletion = TRUE;
else internal_error("tried to mark null entry for deletion");
}
int ActionNameLists::marked_for_deletion(anl_entry *X) {
if (X) return X->marked_for_deletion;
return FALSE;
}
@ This function actually does two things: deletes unwanted entries, and deletes
entries which fail to change the word position.
=
void ActionNameLists::remove_entries_marked_for_deletion(action_name_list *list) {
if (list) {
int pos = -1;
for (anl_entry *entry = list->entries, *prev = NULL; entry; entry = entry->next_link) {
if ((entry->marked_for_deletion) || (pos == entry->parsing_data.word_position)) {
if (prev == NULL) list->entries = entry->next_link;
else prev->next_link = entry->next_link;
} else {
prev = entry;
pos = entry->parsing_data.word_position;
}
}
}
}
@ When not pruning the list, these macros are useful for working through it:
@d LOOP_THROUGH_ANL(var, list)
for (anl_entry *var = (list)?(list->entries):NULL; var; var = var->next_link)
@d LOOP_THROUGH_ANL_WITH_PREV(var, prev_var, next_var, list)
for (anl_entry *var = (list)?(list->entries):NULL,
*prev_var = NULL, *next_var = (var)?(var->next_link):NULL;
var;
prev_var = var, var = next_var, next_var = (next_var)?(next_var->next_link):NULL)
=
int ActionNameLists::length(action_name_list *list) {
int C = 0;
LOOP_THROUGH_ANL(entry, list) C++;
return C;
}
int ActionNameLists::nonempty(action_name_list *list) {
if ((list) && (list->entries)) return TRUE;
return FALSE;
}
@ The //anl_item// material is the actual content we are trying to get at:
=
typedef struct anl_item {
struct action_name *action_listed; /* the action in this ANL list entry */
struct named_action_pattern *nap_listed; /* or a named pattern instead */
} anl_item;
anl_item ActionNameLists::new_item(void) {
anl_item item;
item.action_listed = NULL;
item.nap_listed = NULL;
return item;
}
anl_item *ActionNameLists::first_item(action_name_list *list) {
if ((list) && (list->entries)) return &(list->entries->item);
return NULL;
}
@ The following is one of Inform's standardised comparison routines, which
takes a pair of objects A, B and returns 1 if A makes a more specific
description than B, 0 if they seem equally specific, or $-1$ if B makes a
more specific description than A. This is transitive, and intended to be
used in sorting algorithms.
=
int ActionNameLists::compare_specificity(action_name_list *anl1, action_name_list *anl2) {
int count1, count2;
count1 = ActionNameLists::count_actions_covered(anl1);
count2 = ActionNameLists::count_actions_covered(anl2);
if (count1 < count2) return 1;
if (count1 > count2) return -1;
return 0;
}
int ActionNameLists::count_actions_covered(action_name_list *list) {
int k = 0, infinity = NUMBER_CREATED(action_name);
if (list == NULL) return infinity;
if (list->entries == NULL) return infinity;
LOOP_THROUGH_ANL(entry, list) {
if (entry->item.nap_listed) continue;
if ((entry->item.action_listed) && (k < infinity)) k++;
else k = infinity;
}
if (ActionNameLists::positive(list) == FALSE) k = infinity - k;
return k;
}
named_action_pattern *ActionNameLists::nap(anl_entry *entry) {
if (entry) return entry->item.nap_listed;
return NULL;
}
action_name *ActionNameLists::action(anl_entry *entry) {
if (entry) return entry->item.action_listed;
return NULL;
}
@ A given action |an| falls within the context of this list if it appears
positively in the list, or negatively by not falling into a category excluded
by it; for example, "examining" falls within "examining something", and also
within "doing something other than looking at something" (a case of itemwise
negation) but not "doing something other than looking".
=
int ActionNameLists::covers_action(action_name_list *list, action_name *an) {
LOOP_THROUGH_ANL(entry, list) {
anl_item *item = &(entry->item);
int within = FALSE;
if (item->action_listed == an) within = TRUE;
else if (item->nap_listed) within =
NamedActionPatterns::covers_action(item->nap_listed, an);
if (((within) && (ActionNameLists::positive(list))) ||
((within == FALSE) && (ActionNameLists::positive(list) == FALSE)))
return TRUE;
}
return FALSE;
}
@ The //anl_parsing_data// material is needed on a temporary basis when parsing
the text leading to a list:
=
typedef struct anl_parsing_data {
int word_position; /* and some values used temporarily during parsing */
int negate_pattern; /* parity of the entire list which this heads */
int parc;
struct wording parameter[2];
struct wording in_clause;
int abbreviation_level; /* number of words missing */
} anl_link;
} anl_parsing_data;
typedef struct anl_item {
struct action_name *action_listed; /* the action in this ANL list entry */
struct named_action_pattern *nap_listed; /* or a named pattern instead */
int parity; /* parity of just this individual item */
} anl_item;
anl_parsing_data ActionNameLists::new_parsing_data(int at) {
anl_parsing_data parsing_data;
parsing_data.parc = 0;
parsing_data.word_position = at;
parsing_data.in_clause = EMPTY_WORDING;
parsing_data.abbreviation_level = 0;
return parsing_data;
}
anl_item *ActionNameLists::first_item(anl_head *list) {
if ((list) && (list->body)) return &(list->body->item);
int ActionNameLists::parc(anl_entry *entry) {
if (entry) return entry->parsing_data.parc;
return 0;
}
int ActionNameLists::first_position(action_name_list *list) {
if (list) return ActionNameLists::word_position(list->entries);
return -1;
}
int ActionNameLists::word_position(anl_entry *entry) {
if (entry) return entry->parsing_data.word_position;
return -1;
}
int ActionNameLists::same_word_position(anl_entry *entry, anl_entry *Y) {
if ((entry) && (Y) && (entry->parsing_data.word_position == Y->parsing_data.word_position))
return TRUE;
return FALSE;
}
wording ActionNameLists::par(anl_entry *entry, int i) {
if ((entry) && (entry->parsing_data.parc > i)) return entry->parsing_data.parameter[i];
return EMPTY_WORDING;
}
wording ActionNameLists::in_clause(anl_entry *entry) {
if (entry) return entry->parsing_data.in_clause;
return EMPTY_WORDING;
}
@h Single and best actions.
This tests whether the list gives a single positive action:
=
action_name *ActionNameLists::single_positive_action(action_name_list *list) {
if ((ActionNameLists::length(list) == 1) &&
(ActionNameLists::positive(list)))
return ActionNameLists::first_item(list)->action_listed;
return NULL;
}
int ActionNameLists::length(anl_head *list) {
int C = 0;
if (list)
for (anl_link *anl = list->body; anl; anl = anl->next)
C++;
return C;
}
@ The action name list is the part of an action pattern identifying
which actions are allowed: "taking, dropping or examining" for
example. The following routine extracts this from a potentially longer
text (e.g. "taking, dropping or examining a door").
@ This is used only when the list is part of an exactly known action, so
that it should contain just one item, and this should be an actual action,
not a NAP.
=
anl_link *ActionNameLists::new_link(void) {
anl_link *new_anl = CREATE(anl_link);
new_anl->item.action_listed = NULL;
new_anl->item.nap_listed = NULL;
new_anl->parc = 0;
new_anl->word_position = -1;
new_anl->item.parity = 1;
new_anl->negate_pattern = FALSE;
new_anl->in_clause = EMPTY_WORDING;
new_anl->abbreviation_level = 0;
new_anl->delete_this_link = FALSE;
return new_anl;
}
void ActionNameLists::log(anl_head *head) {
anl_link *anl = (head)?(head->body):NULL;
ActionNameLists::log_anl_link(anl);
}
void ActionNameLists::log_anl_link(anl_link *anl) {
for (int c=0; anl; anl = anl->next, c++) {
LOG("ANL entry %s(%d@%d): %s ",
(anl->delete_this_link)?"(to be deleted) ":"",
c, anl->word_position,
(anl->item.parity==1)?"+":"-");
if (anl->item.action_listed)
LOG("%W", ActionNameNames::tensed(anl->item.action_listed, IS_TENSE));
if (anl->item.nap_listed)
LOG("%W", Nouns::nominative_singular(anl->item.nap_listed->as_noun));
else LOG("NULL");
for (int i=0; i<anl->parc; i++)
LOG(" [%d: %W]", i, anl->parameter[i]);
LOG(" [in: %W]\n", anl->in_clause);
}
}
void ActionNameLists::log_briefly(anl_head *head) {
anl_link *anl = (head)?(head->body):NULL;
if (anl == NULL) LOG("<null-anl>");
else {
if (anl->negate_pattern) LOG("NOT[ ");
anl_link *a;
for (a = anl; a; a = a->next) {
if (a->item.nap_listed) {
if (a->item.parity == -1) LOG("not-");
LOG("%W / ", Nouns::nominative_singular(a->item.nap_listed->as_noun));
} else if (a->item.action_listed == NULL)
LOG("ANY / ");
else {
if (a->item.parity == -1) LOG("not-");
LOG("%W / ", ActionNameNames::tensed(a->item.action_listed, IS_TENSE));
}
}
if (anl->negate_pattern) LOG(" ]");
}
}
action_name *ActionNameLists::get_singleton_action(anl_head *anl) {
action_name *an;
if (anl == NULL) internal_error("Supposed singleton ANL is empty");
if (anl->body == NULL) internal_error("Supposed singleton ANL is empty");
an = anl->body->item.action_listed;
action_name *ActionNameLists::get_the_one_true_action(action_name_list *list) {
action_name *an = ActionNameLists::single_positive_action(list);
if (an == NULL) internal_error("Singleton ANL points to null AN");
return an;
}
anl_link *anl_being_parsed = NULL;
@ The "best" action is the one maximising the number of words in the fixed
part of an action name: thus if there are actions "throwing away" and
"throwing", then in the ANL arising from the text "throwing away the fish",
the action "throwing away" is better than the action "throwing".
If the list includes actions at two different word positions, so that they
are not alternate readings from the same point, then by definition there
is no best action. (For example, in "throwing or removing something".)
=
action_name *ActionNameLists::get_best_action(action_name_list *list) {
int posn = -1, best_score = -1;
action_name *best = NULL;
LOGIF(RULE_ATTACHMENTS, "Getting single action from:\n$L\n", list);
if (ActionNameLists::positive(list) == FALSE) return NULL;
LOOP_THROUGH_ANL(entry, list)
if (entry->item.action_listed) {
int score = ActionNameLists::entry_score(entry);
if (entry->parsing_data.word_position != posn) {
if (posn >= 0) return NULL;
posn = entry->parsing_data.word_position;
best = entry->item.action_listed;
best_score = score;
} else {
if (score > best_score) {
best_score = score;
best = entry->item.action_listed;
}
}
}
LOGIF(RULE_ATTACHMENTS, "Posn %d AN $l\n", posn, best);
return best;
}
int ActionNameLists::entry_score(anl_entry *entry) {
if ((entry) && (entry->item.action_listed))
return ActionNameNames::non_it_length(entry->item.action_listed) -
entry->parsing_data.abbreviation_level;
return -1;
}
@h Logging.
=
void ActionNameLists::log(action_name_list *list) {
if (list == NULL) {
LOG("<null-anl>");
} else {
if (ActionNameLists::listwise_negated(list)) LOG("L-NOT[ ");
if (ActionNameLists::itemwise_negated(list)) LOG("I-NOT[ ");
int c = 0;
LOOP_THROUGH_ANL(entry, list) {
LOG("(%d). ", c);
ActionNameLists::log_entry(entry);
c++;
}
if (ActionNameLists::listwise_negated(list)) LOG(" ]");
}
}
void ActionNameLists::log_briefly(action_name_list *list) {
if (list == NULL) {
LOG("<null-anl>");
} else {
if (ActionNameLists::listwise_negated(list)) LOG("L-NOT[ ");
if (ActionNameLists::itemwise_negated(list)) LOG("I-NOT[ ");
int c = 0;
LOOP_THROUGH_ANL(entry, list) {
if (c > 0) LOG(" / ");
ActionNameLists::log_entry_briefly(entry);
c++;
}
if (ActionNameLists::listwise_negated(list)) LOG(" ]");
}
}
void ActionNameLists::log_entry(anl_entry *entry) {
if (entry == NULL) {
LOG("<null-entry>");
} else {
LOG("ANL entry %s(@%d): ",
(entry->marked_for_deletion)?"(to be deleted) ":"",
entry->parsing_data.word_position);
if (entry->item.action_listed)
LOG("%W", ActionNameNames::tensed(entry->item.action_listed, IS_TENSE));
else if (entry->item.nap_listed)
LOG("%W", Nouns::nominative_singular(entry->item.nap_listed->as_noun));
else LOG("NULL");
for (int i=0; i<entry->parsing_data.parc; i++)
LOG(" [%d: %W]", i, entry->parsing_data.parameter[i]);
if (Wordings::nonempty(entry->parsing_data.in_clause))
LOG(" [in: %W]\n", entry->parsing_data.in_clause);
}
}
void ActionNameLists::log_entry_briefly(anl_entry *entry) {
if (entry->item.nap_listed) {
LOG("%W", Nouns::nominative_singular(entry->item.nap_listed->as_noun));
} else if (entry->item.action_listed == NULL)
LOG("ANY");
else {
LOG("%W", ActionNameNames::tensed(entry->item.action_listed, IS_TENSE));
}
}
@h Parsing text to an ANL.
=
anl_entry *anl_being_parsed = NULL;
@ The following handles action name lists, such as:
@ -142,14 +402,14 @@ operands.
<action-list> ::=
doing something/anything other than <anl-excluded> | ==> { FALSE, RP[1] }
doing something/anything except <anl-excluded> | ==> { FALSE, RP[1] }
doing something/anything to/with <anl-to-tail> | ==> { TRUE, ActionNameLists::new_head(RP[1], FALSE) }
doing something/anything to/with <anl-to-tail> | ==> { TRUE, ActionNameLists::new_list(RP[1], ANL_POSITIVE) }
doing something/anything | ==> @<Construct ANL for anything@>
doing something/anything ... | ==> { fail }
<anl> ==> { TRUE, ActionNameLists::new_head(RP[1], FALSE) }
<anl> ==> { TRUE, ActionNameLists::new_list(RP[1], ANL_POSITIVE) }
<anl-excluded> ::=
<anl> to/with {<anl-minimal-common-operand>} | ==> @<Add to-clause to excluded ANL@>;
<anl> ==> { TRUE, ActionNameLists::new_head(RP[1], TRUE) }
<anl> ==> { TRUE, ActionNameLists::new_list(RP[1], ANL_NEGATED_LISTWISE) }
<anl-minimal-common-operand> ::=
_,/or ... | ==> { fail }
@ -157,9 +417,8 @@ operands.
...
@<Construct ANL for anything@> =
anl_link *anl = ActionNameLists::new_link();
anl->word_position = Wordings::first_wn(W);
==> { TRUE, ActionNameLists::new_head(anl, FALSE) };
anl_entry *anl = ActionNameLists::new_entry_at(Wordings::first_wn(W));
==> { TRUE, ActionNameLists::new_list(anl, ANL_POSITIVE) };
@ The trickiest form is:
@ -186,18 +445,15 @@ for instance, we don't want to count the "in" from "fixed in place".
in ... ==> { TRUE, - }
@<Augment ANL with in clause@> =
anl_link *anl = RP[1];
anl->in_clause = GET_RW(<anl-in-tail>, 1);
anl_entry *anl = RP[1];
anl->parsing_data.in_clause = GET_RW(<anl-in-tail>, 1);
@<Construct ANL for anything applied@> =
anl_link *new_anl;
anl_entry *new_anl;
if ((!preform_lookahead_mode) && (anl_being_parsed)) new_anl = anl_being_parsed;
else {
new_anl = ActionNameLists::new_link();
new_anl->word_position = Wordings::first_wn(W);
}
new_anl->parameter[new_anl->parc] = W;
new_anl->parc++;
else new_anl = ActionNameLists::new_entry_at(Wordings::first_wn(W));
new_anl->parsing_data.parameter[new_anl->parsing_data.parc] = W;
new_anl->parsing_data.parc++;
==> { TRUE, new_anl };
@ Now for the basic list of actions being included:
@ -236,7 +492,7 @@ end, but it's syntactically valid.)
}
<anl-entry-with-action> internal {
anl_link *anl = ActionNameLists::anl_parse_internal(W);
anl_entry *anl = ActionNameLists::anl_parse_internal(W);
if (anl) {
==> { -, anl }; return TRUE;
}
@ -244,54 +500,44 @@ end, but it's syntactically valid.)
}
@<Make an action pattern from named behaviour@> =
anl_link *new_anl = ActionNameLists::new_link();
new_anl->word_position = Wordings::first_wn(W);
anl_entry *new_anl = ActionNameLists::new_entry_at(Wordings::first_wn(W));
new_anl->item.nap_listed = RP[1];
==> { 0, new_anl };
@<Make an action pattern from named behaviour plus in@> =
anl_link *new_anl = ActionNameLists::new_link();
new_anl->word_position = Wordings::first_wn(W);
anl_entry *new_anl = ActionNameLists::new_entry_at(Wordings::first_wn(W));
new_anl->item.nap_listed = RP[1];
new_anl->in_clause = GET_RW(<anl-in-tail>, 1);
new_anl->parsing_data.in_clause = GET_RW(<anl-in-tail>, 1);
==> { 0, new_anl };
@<Add to-clause to excluded ANL@> =
anl_link *anl = RP[1];
anl_entry *anl = RP[1];
if ((anl == NULL) ||
(ActionSemantics::can_have_noun(anl->item.action_listed) == FALSE)) {
==> { fail production };
}
anl->parameter[anl->parc] = GET_RW(<anl-excluded>, 1);
anl->parc++;
anl_head *head = ActionNameLists::new_head(anl, FALSE);
ActionNameLists::negate_all(head);
==> { FALSE, head };
anl->parsing_data.parameter[anl->parsing_data.parc] = GET_RW(<anl-excluded>, 1);
anl->parsing_data.parc++;
action_name_list *list = ActionNameLists::new_list(anl, ANL_NEGATED_ITEMWISE);
==> { FALSE, list };
@<Join parsed ANLs@> =
anl_link *join;
anl_link *left_atom = RP[1];
anl_link *right_tail = RP[2];
anl_entry *join;
anl_entry *left_atom = RP[1];
anl_entry *right_tail = RP[2];
if (left_atom == NULL) { join = right_tail; }
else if (right_tail == NULL) { join = left_atom; }
else {
anl_link *new_anl = right_tail;
while (new_anl->next != NULL) new_anl = new_anl->next;
new_anl->next = left_atom;
anl_entry *new_anl = right_tail;
while (new_anl->next_link != NULL) new_anl = new_anl->next_link;
new_anl->next_link = left_atom;
join = right_tail;
}
==> { 0, join };
@ =
void ActionNameLists::negate_all(anl_head *head) {
if (head)
for (anl_link *L = head->body; L; L = L->next)
L->item.parity = (L->item.parity == 1)?(-1):1;
}
@ =
int anl_parsing_tense = IS_TENSE;
anl_head *ActionNameLists::parse(wording W, int tense) {
action_name_list *ActionNameLists::parse(wording W, int tense) {
if (Wordings::mismatched_brackets(W)) return NULL;
int t = anl_parsing_tense;
anl_parsing_tense = tense;
@ -302,14 +548,14 @@ anl_head *ActionNameLists::parse(wording W, int tense) {
}
@ =
anl_link *ActionNameLists::anl_parse_internal(wording W) {
anl_entry *ActionNameLists::anl_parse_internal(wording W) {
LOGIF(ACTION_PATTERN_PARSING, "Parsing ANL from %W (tense %d)\n", W, anl_parsing_tense);
int tense = anl_parsing_tense;
anl_link *anl_list = NULL, *new_anl = NULL;
anl_entry *anl_list = NULL, *new_anl = NULL;
action_name *an;
new_anl = ActionNameLists::new_link();
new_anl = ActionNameLists::new_entry_at(-1);
LOOP_OVER(an, action_name) {
int x_ended = FALSE;
@ -318,10 +564,9 @@ anl_link *ActionNameLists::anl_parse_internal(wording W) {
int abbreviable = ActionNameNames::abbreviable(an);
wording XW = ActionNameNames::tensed(an, tense);
new_anl->item.action_listed = an;
new_anl->parc = 0;
new_anl->word_position = Wordings::first_wn(W);
new_anl->item.parity = 1;
new_anl->in_clause = EMPTY_WORDING;
new_anl->parsing_data.parc = 0;
new_anl->parsing_data.word_position = Wordings::first_wn(W);
new_anl->parsing_data.in_clause = EMPTY_WORDING;
int w_m = Wordings::first_wn(W), x_m = Wordings::first_wn(XW);
while ((w_m <= Wordings::last_wn(W)) && (x_m <= Wordings::last_wn(XW))) {
if (Lexer::word(x_m++) != Lexer::word(w_m++)) {
@ -335,11 +580,11 @@ anl_link *ActionNameLists::anl_parse_internal(wording W) {
if (Lexer::word(k) == Lexer::word(x_m+1)) { j = k; break; }
if (j<0) { fc=2; goto DontInclude; }
if (j-1 >= w_m) {
new_anl->parameter[new_anl->parc] = Wordings::new(w_m, j-1);
new_anl->parc++;
new_anl->parsing_data.parameter[new_anl->parsing_data.parc] = Wordings::new(w_m, j-1);
new_anl->parsing_data.parc++;
} else {
new_anl->parameter[new_anl->parc] = EMPTY_WORDING;
new_anl->parc++;
new_anl->parsing_data.parameter[new_anl->parsing_data.parc] = EMPTY_WORDING;
new_anl->parsing_data.parc++;
}
w_m = j; x_m++;
}
@ -350,12 +595,12 @@ anl_link *ActionNameLists::anl_parse_internal(wording W) {
if (abbreviable) x_ended = TRUE;
else { fc=3; goto DontInclude; }
}
if (x_m <= Wordings::last_wn(XW)) new_anl->abbreviation_level = Wordings::last_wn(XW)-x_m+1;
if (x_m <= Wordings::last_wn(XW)) new_anl->parsing_data.abbreviation_level = Wordings::last_wn(XW)-x_m+1;
int inc = FALSE;
if (w_m > Wordings::last_wn(W)) inc = TRUE;
else if (<anl-in-tail>(Wordings::from(W, w_m))) {
new_anl->in_clause = GET_RW(<anl-in-tail>, 1);
new_anl->parsing_data.in_clause = GET_RW(<anl-in-tail>, 1);
inc = TRUE;
} else if (ActionSemantics::can_have_noun(an)) {
anl_being_parsed = new_anl;
@ -364,135 +609,20 @@ anl_link *ActionNameLists::anl_parse_internal(wording W) {
}
anl_being_parsed = NULL;
}
new_anl->next = NULL;
new_anl->next_link = NULL;
if (inc) {
if (anl_list == NULL) anl_list = new_anl;
else {
anl_link *pos = anl_list, *prev = NULL;
while ((pos) && (pos->abbreviation_level < new_anl->abbreviation_level))
prev = pos, pos = pos->next;
if (prev) prev->next = new_anl; else anl_list = new_anl;
new_anl->next = pos;
anl_entry *pos = anl_list, *prev = NULL;
while ((pos) && (pos->parsing_data.abbreviation_level < new_anl->parsing_data.abbreviation_level))
prev = pos, pos = pos->next_link;
if (prev) prev->next_link = new_anl; else anl_list = new_anl;
new_anl->next_link = pos;
}
}
new_anl = ActionNameLists::new_link();
new_anl = ActionNameLists::new_entry_at(-1);
DontInclude: ;
}
LOGIF(ACTION_PATTERN_PARSING, "Parsing ANL from %W resulted in:\n$8\n", W, anl_list);
return anl_list;
}
int scanning_anl_only_mode = FALSE;
anl_head *ActionNameLists::extract_actions_only(wording W) {
anl_head *anl = NULL;
int s = scanning_anl_only_mode;
scanning_anl_only_mode = TRUE;
int s2 = permit_trying_omission;
permit_trying_omission = TRUE;
if (<action-pattern>(W)) {
anl = ActionPatterns::list(<<rp>>);
if ((anl) && (anl->body)) {
anl->anyone_specified = FALSE;
if (<<r>> == ACTOR_EXPLICITLY_UNIVERSAL) anl->anyone_specified = TRUE;
}
}
scanning_anl_only_mode = s;
permit_trying_omission = s2;
return anl;
}
action_name *ActionNameLists::get_single_action(anl_head *head) {
int posn = -1, matchl = -1;
action_name *anf = NULL;
LOGIF(RULE_ATTACHMENTS, "Getting single action from:\n$L\n", head);
if (ActionNameLists::negated(head)) return NULL;
anl_link *anl = (head)?(head->body):NULL;
while (anl) {
if (anl->item.parity == -1) return NULL;
if (anl->negate_pattern) return NULL;
if (anl->item.action_listed) {
int k = ActionNameNames::non_it_length(anl->item.action_listed) - anl->abbreviation_level;
if (anl->word_position != posn) {
if (posn >= 0) return NULL;
posn = anl->word_position;
anf = anl->item.action_listed;
matchl = k;
} else {
if (k > matchl) {
matchl = k;
anf = anl->item.action_listed;
}
}
}
anl = anl->next;
}
LOGIF(RULE_ATTACHMENTS, "Posn %d AN $l\n", posn, anf);
return anf;
}
int ActionNameLists::get_explicit_anyone_flag(anl_head *anl) {
if ((anl == NULL) || (anl->body == NULL)) return FALSE;
return anl->anyone_specified;
}
int ActionNameLists::negated(anl_head *head) {
if (head == NULL) return FALSE;
if (head->body == NULL) return FALSE;
return head->body->negate_pattern;
}
int ActionNameLists::nonempty(anl_head *head) {
if ((head) && (head->body)) return TRUE;
return FALSE;
}
int ActionNameLists::within_action_context(anl_head *head, action_name *an) {
if (head == NULL) return TRUE;
anl_item *item = ActionNameLists::first_item(head);
if (item == NULL) return TRUE;
if (item->nap_listed)
return NamedActionPatterns::within_action_context(item->nap_listed, an);
for (anl_link *anl = head->body; anl; anl = anl->next) {
anl_item *item = &(anl->item);
if (((item->action_listed == an) && (item->parity == 1)) ||
((item->action_listed != an) && (item->parity == -1)))
return TRUE;
}
return FALSE;
}
@h Specificity of ANLs.
The following is one of Inform's standardised comparison routines, which
takes a pair of objects A, B and returns 1 if A makes a more specific
description than B, 0 if they seem equally specific, or $-1$ if B makes a
more specific description than A. This is transitive, and intended to be
used in sorting algorithms.
=
int ActionNameLists::compare_specificity(anl_head *anl1, anl_head *anl2) {
int count1, count2;
count1 = ActionNameLists::count_actions_covered(anl1);
count2 = ActionNameLists::count_actions_covered(anl2);
if (count1 < count2) return 1;
if (count1 > count2) return -1;
return 0;
}
@ Where:
=
int ActionNameLists::count_actions_covered(anl_head *head) {
int k = 0, parity = TRUE, infinity = NUMBER_CREATED(action_name);
if (head == NULL) return infinity;
if (head->body == NULL) return infinity;
if (ActionNameLists::negated(head)) parity = FALSE;
anl_link *anl = head->body;
for (; anl; anl = anl->next) {
if (anl->item.nap_listed) continue;
if (anl->item.parity == -1) parity = FALSE;
if ((anl->item.action_listed) && (k < infinity)) k++;
else k = infinity;
}
if (parity == FALSE) k = infinity - k;
return k;
}

View file

@ -24,7 +24,7 @@ not-really-action APs are used in no other context, and employ the
typedef struct action_pattern {
struct wording text_of_pattern; /* text giving rise to this AP */
struct anl_head *action_list; /* what the behaviour is */
struct action_name_list *action_list; /* what the behaviour is */
int test_anl; /* actually test the action when compiled */
int applies_to_any_actor; /* treat player and other people equally */
@ -279,20 +279,16 @@ int ActionPatterns::is_request(action_pattern *ap) {
int ActionPatterns::within_action_context(action_pattern *ap, action_name *an) {
if (ap == NULL) return TRUE;
return ActionNameLists::within_action_context(ap->action_list, an);
return ActionNameLists::covers_action(ap->action_list, an);
}
anl_head *ActionPatterns::list(action_pattern *ap) {
action_name_list *ActionPatterns::list(action_pattern *ap) {
if (ap == NULL) return NULL;
return ap->action_list;
}
action_name *ActionPatterns::required_action(action_pattern *ap) {
if ((ActionNameLists::length(ap->action_list) == 1) &&
(ActionNameLists::negated(ap->action_list) == FALSE)) {
anl_item *item = ActionNameLists::first_item(ap->action_list);
if (item->parity == 1) return item->action_listed;
}
if (ap) return ActionNameLists::single_positive_action(ap->action_list);
return NULL;
}
@ -438,6 +434,27 @@ parse_node *ActionPatterns::parse_verified_action_parameter(wording W) {
return spec;
}
@ =
int scanning_anl_only_mode = FALSE;
action_name_list *ActionPatterns::list_of_actions_only(wording W, int *anyone) {
*anyone = FALSE;
action_name_list *anl = NULL;
int s = scanning_anl_only_mode;
scanning_anl_only_mode = TRUE;
int s2 = permit_trying_omission;
permit_trying_omission = TRUE;
if (<action-pattern>(W)) {
anl = ActionPatterns::list(<<rp>>);
if ((anl) && (anl->entries)) {
if (<<r>> == ACTOR_EXPLICITLY_UNIVERSAL)
*anyone = TRUE;
}
}
scanning_anl_only_mode = s;
permit_trying_omission = s2;
return anl;
}
@ The main action pattern parser is called only by the following shell
routine, which exists in order to change some parsing rules.
@ -784,11 +801,11 @@ box" makes no sense since only one is transitive).
<ap-common-core-inner-inner-inner> internal {
if (Wordings::mismatched_brackets(W)) { ==> { fail nonterminal }; }
if (scanning_anl_only_mode) {
anl_head *anl = ActionNameLists::parse(W, prevailing_ap_tense);
if (anl == NULL) { ==> { fail nonterminal }; }
action_name_list *list = ActionNameLists::parse(W, prevailing_ap_tense);
if (list == NULL) { ==> { fail nonterminal }; }
action_pattern ap = ActionPatterns::new(); ap.valid = TRUE;
ap.text_of_pattern = W;
ap.action_list = anl;
ap.action_list = list;
==> { -, ActionPatterns::ap_store(ap) };
return TRUE;
} else {
@ -844,7 +861,7 @@ here -- a constant, a description, a table entry, a variable, and so on.
action_pattern ActionPatterns::parse_action_pattern_dash(wording W) {
int failure_this_call = pap_failure_reason;
int i, j, k = 0;
anl_link *anl = NULL;
action_name_list *list = NULL;
int tense = prevailing_ap_tense;
action_pattern ap = ActionPatterns::new(); ap.valid = FALSE;
@ -865,8 +882,10 @@ action_pattern ActionPatterns::parse_action_pattern_dash(wording W) {
@<With one small proviso, a valid action pattern has been parsed@> =
pap_failure_reason = 0;
ap.text_of_pattern = W;
ap.action_list = ActionNameLists::new_head(anl, FALSE);
if ((anl != NULL) && (anl->item.nap_listed == NULL) && (anl->item.action_listed == NULL)) ap.action_list = NULL;
ap.action_list = list;
anl_item *item = ActionNameLists::first_item(ap.action_list);
if ((item) && (item->nap_listed == NULL) && (item->action_listed == NULL))
ap.action_list = NULL;
ap.valid = TRUE;
ap.actor_spec = ActionPatterns::nullify_nonspecific_references(ap.actor_spec);
@ -892,8 +911,8 @@ action_pattern ActionPatterns::parse_action_pattern_dash(wording W) {
away as they are recorded.
@<PAR - (f) Parse Special Going Clauses@> =
anl_head *preliminary_anl = ActionNameLists::parse(W, tense);
action_name *chief_an = ActionNameLists::get_single_action(preliminary_anl);
action_name_list *preliminary_anl = ActionNameLists::parse(W, tense);
action_name *chief_an = ActionNameLists::get_best_action(preliminary_anl);
if (chief_an == NULL) {
int x;
chief_an = ActionNameNames::longest_nounless(W, tense, &x);
@ -928,11 +947,10 @@ e.g., from "taking or dropping something", that it will be
taking or dropping.
@<PAR - (i) Parse Initial Action Name List@> =
anl_head *head = ActionNameLists::parse(W, tense);
if (head == NULL) goto Failed;
anl = head->body;
if (anl == NULL) goto Failed;
LOGIF(ACTION_PATTERN_PARSING, "ANL from PAR(i):\n$8\n", anl);
action_name_list *try_list = ActionNameLists::parse(W, tense);
if (try_list == NULL) goto Failed;
list = try_list;
LOGIF(ACTION_PATTERN_PARSING, "ANL from PAR(i):\n$L\n", list);
@ Now to fill in the gaps. At this point we have the action name
list as a linked list of all possible lexical matches, but want to
@ -958,28 +976,27 @@ crucial word position except for the one matched.
@<Report to the debugging log on the action decomposition@>;
@<Find how many different positions have each possible minimum count@>;
anl_link *entry = anl;
int first_position = anl->word_position;
anl_link *first_valid = NULL;
int first_position = ActionNameLists::first_position(list);
int one_was_valid = FALSE;
action_pattern trial_ap;
for (entry = anl; entry; entry = entry->next) {
LOGIF(ACTION_PATTERN_PARSING, "Entry (%d):\n$8\n", entry->parc, entry);
LOOP_THROUGH_ANL(entry, list) {
LOGIF(ACTION_PATTERN_PARSING, "Entry (%d):\n$8\n", ActionNameLists::parc(entry), entry);
@<Fill out the noun, second, room and nowhere fields of the AP as if this action were right@>;
@<Check the validity of this speculative AP@>;
if ((trial_ap.valid) && (first_valid == NULL) && (entry->word_position == first_position)) {
first_valid = entry;
if ((trial_ap.valid) && (one_was_valid == FALSE) && (ActionNameLists::word_position(entry) == first_position)) {
one_was_valid = TRUE;
ap.noun_spec = trial_ap.noun_spec; ap.second_spec = trial_ap.second_spec;
ap.room_spec = trial_ap.room_spec; ap.nowhere_flag = trial_ap.nowhere_flag;
ap.valid = TRUE;
}
if (trial_ap.valid == FALSE) entry->delete_this_link = TRUE;
if (trial_ap.valid == FALSE) ActionNameLists::mark_for_deletion(entry);
}
if (first_valid == NULL) goto Failed;
if (one_was_valid == FALSE) goto Failed;
@<Adjudicate between topic and other actions@>;
LOGIF(ACTION_PATTERN_PARSING, "List before action winnowing:\n$8\n", anl);
LOGIF(ACTION_PATTERN_PARSING, "List before action winnowing:\n$L\n", list);
@<Delete those action names which are to be deleted@>;
LOGIF(ACTION_PATTERN_PARSING, "List after action winnowing:\n$8\n", anl);
LOGIF(ACTION_PATTERN_PARSING, "List after action winnowing:\n$L\n", list);
@ For example, "taking inventory or waiting" produces two positions, words
0 and 3, and minimum parameter count 0 in each case. ("Taking inventory"
@ -987,29 +1004,28 @@ can be read as "taking (inventory)", par-count 1, or "taking inventory",
par-count 0, so the minimum is 0.)
@<Find the positions of individual action names, and their minimum parameter counts@> =
anl_link *entry;
for (entry = anl; entry; entry = entry->next) {
LOOP_THROUGH_ANL(entry, list) {
int pos = -1;
@<Find the position word of this particular action name@>;
if ((position_min_parc[pos] == UNTHINKABLE_POSITION) ||
(entry->parc < position_min_parc[pos]))
position_min_parc[pos] = entry->parc;
(ActionNameLists::parc(entry) < position_min_parc[pos]))
position_min_parc[pos] = ActionNameLists::parc(entry);
}
@<Find the position word of this particular action name@> =
int i;
for (i=0; i<no_positions; i++)
if (entry->word_position == position_at[i])
if (ActionNameLists::word_position(entry) == position_at[i])
pos = i;
if (pos == -1) {
if (no_positions == MAX_AP_POSITIONS) goto Failed;
position_at[no_positions] = entry->word_position;
position_at[no_positions] = ActionNameLists::word_position(entry);
position_min_parc[no_positions] = UNTHINKABLE_POSITION;
pos = no_positions++;
}
@<Report to the debugging log on the action decomposition@> =
LOGIF(ACTION_PATTERN_PARSING, "List after action decomposition:\n$8\n", anl);
LOGIF(ACTION_PATTERN_PARSING, "List after action decomposition:\n$L\n", list);
for (i=0; i<no_positions; i++) {
int min = position_min_parc[i];
LOGIF(ACTION_PATTERN_PARSING, "ANL position %d (word %d): min parc %d\n",
@ -1036,38 +1052,35 @@ description.
@<Fill out the noun, second, room and nowhere fields of the AP as if this action were right@> =
trial_ap.noun_spec = NULL; trial_ap.second_spec = NULL; trial_ap.room_spec = NULL; trial_ap.nowhere_flag = FALSE;
if (entry->parc >= 1) {
if (Wordings::nonempty(entry->parameter[0])) {
if ((entry->item.action_listed == going_action) && (<going-action-irregular-operand>(entry->parameter[0]))) {
if (<<r>> == FALSE) trial_ap.nowhere_flag = TRUE;
else trial_ap.nowhere_flag = 2;
} else ActionPatterns::put_action_object_into_ap(&trial_ap, 1, entry->parameter[0]);
if (Wordings::nonempty(ActionNameLists::par(entry, 0))) {
if ((ActionNameLists::action(entry) == going_action) && (<going-action-irregular-operand>(ActionNameLists::par(entry, 0)))) {
if (<<r>> == FALSE) trial_ap.nowhere_flag = TRUE;
else trial_ap.nowhere_flag = 2;
} else ActionPatterns::put_action_object_into_ap(&trial_ap, 1, ActionNameLists::par(entry, 0));
}
if (Wordings::nonempty(ActionNameLists::par(entry, 1))) {
if ((ActionNameLists::action(entry) != NULL)
&& (K_understanding)
&& (Kinds::eq(ActionSemantics::kind_of_second(ActionNameLists::action(entry)), K_understanding))
&& (<understanding-action-irregular-operand>(ActionNameLists::par(entry, 1)))) {
trial_ap.second_spec = Rvalues::from_grammar_verb(NULL); /* Why no GV here? */
Node::set_text(trial_ap.second_spec, ActionNameLists::par(entry, 1));
} else {
ActionPatterns::put_action_object_into_ap(&trial_ap, 2, ActionNameLists::par(entry, 1));
}
}
if (entry->parc >= 2) {
if (Wordings::nonempty(entry->parameter[1])) {
if ((entry->item.action_listed != NULL)
&& (K_understanding)
&& (Kinds::eq(ActionSemantics::kind_of_second(entry->item.action_listed), K_understanding))
&& (<understanding-action-irregular-operand>(entry->parameter[1]))) {
trial_ap.second_spec = Rvalues::from_grammar_verb(NULL); /* Why no GV here? */
Node::set_text(trial_ap.second_spec, entry->parameter[1]);
} else {
ActionPatterns::put_action_object_into_ap(&trial_ap, 2, entry->parameter[1]);
}
}
}
if (Wordings::nonempty(entry->in_clause))
ActionPatterns::put_action_object_into_ap(&trial_ap, 3, entry->in_clause);
if (Wordings::nonempty(ActionNameLists::in_clause(entry)))
ActionPatterns::put_action_object_into_ap(&trial_ap, 3,
ActionNameLists::in_clause(entry));
@<Check the validity of this speculative AP@> =
kind *check_n = K_object;
kind *check_s = K_object;
if (entry->item.action_listed != NULL) {
check_n = ActionSemantics::kind_of_noun(entry->item.action_listed);
check_s = ActionSemantics::kind_of_second(entry->item.action_listed);
if (ActionNameLists::action(entry) != NULL) {
check_n = ActionSemantics::kind_of_noun(ActionNameLists::action(entry));
check_s = ActionSemantics::kind_of_second(ActionNameLists::action(entry));
}
trial_ap.valid = TRUE;
if ((trial_ap.noun_any == FALSE) &&
@ -1083,55 +1096,43 @@ description.
@<Adjudicate between topic and other actions@> =
kind *K[2];
K[0] = NULL; K[1] = NULL;
anl_link *entry, *prev = NULL;
for (entry = anl; entry; prev = entry, entry = entry->next) {
if ((entry->delete_this_link == FALSE) && (entry->item.action_listed)) {
if ((prev == NULL) || (prev->word_position != entry->word_position)) {
if ((entry->next == NULL) || (entry->next->word_position != entry->word_position)) {
if ((K[0] == NULL) && (ActionSemantics::can_have_noun(entry->item.action_listed)))
K[0] = ActionSemantics::kind_of_noun(entry->item.action_listed);
if ((K[1] == NULL) && (ActionSemantics::can_have_second(entry->item.action_listed)))
K[1] = ActionSemantics::kind_of_second(entry->item.action_listed);
LOOP_THROUGH_ANL_WITH_PREV(entry, prev, next, list) {
if ((ActionNameLists::marked_for_deletion(entry) == FALSE) && (ActionNameLists::action(entry))) {
if (ActionNameLists::same_word_position(prev, entry) == FALSE) {
if (ActionNameLists::same_word_position(entry, next) == FALSE) {
if ((K[0] == NULL) && (ActionSemantics::can_have_noun(ActionNameLists::action(entry))))
K[0] = ActionSemantics::kind_of_noun(ActionNameLists::action(entry));
if ((K[1] == NULL) && (ActionSemantics::can_have_second(ActionNameLists::action(entry))))
K[1] = ActionSemantics::kind_of_second(ActionNameLists::action(entry));
}
}
}
}
LOGIF(ACTION_PATTERN_PARSING, "Necessary kinds: %u, %u\n", K[0], K[1]);
for (entry = anl; entry; prev = entry, entry = entry->next) {
if ((entry->delete_this_link == FALSE) && (entry->item.action_listed)) {
LOOP_THROUGH_ANL_WITH_PREV(entry, prev, next, list) {
if ((ActionNameLists::marked_for_deletion(entry) == FALSE) && (ActionNameLists::action(entry))) {
int poor_choice = FALSE;
if ((K[0]) && (ActionSemantics::can_have_noun(entry->item.action_listed))) {
kind *L = ActionSemantics::kind_of_noun(entry->item.action_listed);
if ((K[0]) && (ActionSemantics::can_have_noun(ActionNameLists::action(entry)))) {
kind *L = ActionSemantics::kind_of_noun(ActionNameLists::action(entry));
if (Kinds::compatible(L, K[0]) == FALSE) poor_choice = TRUE;
}
if ((K[1]) && (ActionSemantics::can_have_second(entry->item.action_listed))) {
kind *L = ActionSemantics::kind_of_second(entry->item.action_listed);
if ((K[1]) && (ActionSemantics::can_have_second(ActionNameLists::action(entry)))) {
kind *L = ActionSemantics::kind_of_second(ActionNameLists::action(entry));
if (Kinds::compatible(L, K[1]) == FALSE) poor_choice = TRUE;
}
if (poor_choice) {
if (((prev) && (prev->word_position == entry->word_position) &&
(prev->delete_this_link == FALSE))
if (((ActionNameLists::same_word_position(prev, entry)) &&
(ActionNameLists::marked_for_deletion(prev) == FALSE))
||
((entry->next) && (entry->next->word_position == entry->word_position) &&
(entry->next->delete_this_link == FALSE)))
entry->delete_this_link = TRUE;
((ActionNameLists::same_word_position(entry, next)) &&
(ActionNameLists::marked_for_deletion(next) == FALSE)))
ActionNameLists::mark_for_deletion(entry);
}
}
}
@<Delete those action names which are to be deleted@> =
anl_link *entry, *prev = NULL;
int pos = -1, negation_state = (anl)?(anl->negate_pattern):FALSE;
for (entry = anl; entry; entry = entry->next) {
if ((entry->delete_this_link) || (pos == entry->word_position)) {
if (prev == NULL) anl = entry->next;
else prev->next = entry->next;
} else {
prev = entry;
pos = entry->word_position;
}
}
if (anl) anl->negate_pattern = negation_state;
ActionNameLists::remove_entries_marked_for_deletion(list);
@ Not all actions can cohabit. We require that as far as the user has
specified the parameters, the actions in the list must all agree (i) to be
@ -1148,24 +1149,24 @@ the case when the first action name in the list is |NULL|).
kind *kinds_observed_in_list[2];
kinds_observed_in_list[0] = NULL;
kinds_observed_in_list[1] = NULL;
for (anl_link *entry = anl; entry; entry = entry->next)
if (entry->item.nap_listed == NULL) {
if (entry->parc > 0) {
LOOP_THROUGH_ANL(entry, list)
if (ActionNameLists::nap(entry) == NULL) {
if (ActionNameLists::parc(entry) > 0) {
if (no_of_pars > 0) immiscible = TRUE;
no_of_pars = entry->parc;
no_of_pars = ActionNameLists::parc(entry);
}
action_name *this = entry->item.action_listed;
action_name *this = ActionNameLists::action(entry);
if (this) {
if (ActionSemantics::is_out_of_world(this)) no_oow++; else no_iw++;
if (entry->parc >= 1) {
if (ActionNameLists::parc(entry) >= 1) {
kind *K = ActionSemantics::kind_of_noun(this);
kind *A = kinds_observed_in_list[0];
if ((A) && (K) && (Kinds::eq(A, K) == FALSE))
immiscible = TRUE;
kinds_observed_in_list[0] = K;
}
if (entry->parc >= 2) {
if (ActionNameLists::parc(entry) >= 2) {
kind *K = ActionSemantics::kind_of_second(this);
kind *A = kinds_observed_in_list[1];
if ((A) && (K) && (Kinds::eq(A, K) == FALSE))
@ -1176,11 +1177,11 @@ the case when the first action name in the list is |NULL|).
}
if ((no_oow > 0) && (no_iw > 0)) immiscible = TRUE;
for (anl_link *entry = anl; entry; entry = entry->next)
if (entry->item.action_listed) {
if ((no_of_pars >= 1) && (ActionSemantics::can_have_noun(entry->item.action_listed) == FALSE))
LOOP_THROUGH_ANL(entry, list)
if (ActionNameLists::action(entry)) {
if ((no_of_pars >= 1) && (ActionSemantics::can_have_noun(ActionNameLists::action(entry)) == FALSE))
immiscible = TRUE;
if ((no_of_pars >= 2) && (ActionSemantics::can_have_second(entry->item.action_listed) == FALSE))
if ((no_of_pars >= 2) && (ActionSemantics::can_have_second(ActionNameLists::action(entry)) == FALSE))
immiscible = TRUE;
}
@ -1391,8 +1392,8 @@ void ActionPatterns::emit_try(action_pattern *ap, int store_instead) {
(<subject-pronoun>(Node::get_text(spec1)) == FALSE))
spec1 = Rvalues::from_wording(Node::get_text(spec1));
action_name *an = ActionNameLists::get_singleton_action(ap->action_list);
LOGIF(EXPRESSIONS, "Compiling from action name list:\n$8\n", ap->action_list);
action_name *an = ActionNameLists::get_the_one_true_action(ap->action_list);
LOGIF(EXPRESSIONS, "Compiling from action name list:\n$L\n", ap->action_list);
int flag_bits = 0;
if (Kinds::eq(Specifications::to_kind(spec0), K_text)) flag_bits += 16;
@ -1655,7 +1656,7 @@ void ActionPatterns::as_stored_action(value_holster *VH, action_pattern *ap) {
packaging_state save = Emit::named_late_array_begin(N, K_value);
RTKinds::emit_block_value_header(K_stored_action, FALSE, 6);
action_name *an = ActionNameLists::get_singleton_action(ap->action_list);
action_name *an = ActionNameLists::get_the_one_true_action(ap->action_list);
Emit::array_action_entry(an);
int request_bits = ap->request;
@ -1897,7 +1898,7 @@ void ActionPatterns::compile_pattern_match(value_holster *VH, action_pattern ap,
int range_to_compile = 0;
LocalVariables::begin_condition_emit();
if (ActionNameLists::negated(ap.action_list)) {
if (ActionNameLists::listwise_negated(ap.action_list)) {
if (ranges_count[0] > 0) {
Produce::inv_primitive(Emit::tree(), AND_BIP);
Produce::down(Emit::tree());
@ -1968,7 +1969,7 @@ void ActionPatterns::compile_pattern_match(value_holster *VH, action_pattern ap,
}
if ((ranges_count[0] + ranges_count[1] + ranges_count[2] + ranges_count[3] == 0) &&
(ActionNameLists::negated(ap.action_list) == FALSE)) {
(ActionNameLists::listwise_negated(ap.action_list) == FALSE)) {
Produce::val(Emit::tree(), K_truth_state, LITERAL_IVAL, 1);
}
LocalVariables::end_condition_emit();

View file

@ -53,7 +53,7 @@ named_action_pattern *NamedActionPatterns::new(wording W) {
if and only if it appears in one of the patterns in the list:
=
int NamedActionPatterns::within_action_context(named_action_pattern *nap, action_name *an) {
int NamedActionPatterns::covers_action(named_action_pattern *nap, action_name *an) {
named_action_pattern_entry *nape;
if (nap)
LOOP_OVER_LINKED_LIST(nape, named_action_pattern_entry, nap->patterns)

View file

@ -134,10 +134,10 @@ void Rules::Bookings::place(ph_usage_data *phud, booking *br) {
LOOP_THROUGH_WORDING(i, PW)
if (NamedActionPatterns::by_name(Wordings::from(PW, i)))
goto NotSingleAction;
anl_head *head = ActionNameLists::extract_actions_only(PW);
an = ActionNameLists::get_single_action(head);
Rules::set_marked_for_anyone(Rules::Bookings::get_rule(br),
ActionNameLists::get_explicit_anyone_flag(head));
int anyone = FALSE;
action_name_list *head = ActionPatterns::list_of_actions_only(PW, &anyone);
an = ActionNameLists::get_best_action(head);
Rules::set_marked_for_anyone(Rules::Bookings::get_rule(br), anyone);
} else {
an = NULL;
waiver = TRUE;

View file

@ -378,21 +378,16 @@ int RTActions::action_variable_set_ID(action_name *an) {
return 20000 + an->allocation_id;
}
void RTActions::emit_anl(anl_head *head) {
if (head == NULL) return;
anl_link *anl = head->body;
if (anl == NULL) return;
void RTActions::emit_anl(action_name_list *head) {
int C = ActionNameLists::length(head);
if (C == 0) return;
LOGIF(ACTION_PATTERN_COMPILATION, "Emitting action name list: $L", head);
int C = 0;
for (anl_link *L = anl; L; L = L->next) C++;
if (anl->item.parity == -1) { Produce::inv_primitive(Emit::tree(), NOT_BIP); Produce::down(Emit::tree()); }
int neg = ActionNameLists::itemwise_negated(head);
if (neg) { Produce::inv_primitive(Emit::tree(), NOT_BIP); Produce::down(Emit::tree()); }
int N = 0, downs = 0;
for (anl_link *L = anl; L; L = L->next) {
if (anl->item.parity != L->item.parity) internal_error("mixed parity");
LOOP_THROUGH_ANL(L, head) {
N++;
if (N < C) { Produce::inv_primitive(Emit::tree(), OR_BIP); Produce::down(Emit::tree()); downs++; }
if (L->item.nap_listed) {
@ -410,6 +405,5 @@ void RTActions::emit_anl(anl_head *head) {
}
while (downs > 0) { Produce::up(Emit::tree()); downs--; }
if (anl->item.parity == -1) Produce::up(Emit::tree());
if (neg) Produce::up(Emit::tree());
}