1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-30 22:14:58 +03:00

Cautiously sidling around anl_link

This commit is contained in:
Graham Nelson 2021-02-28 10:32:58 +00:00
parent 2a2c7f015e
commit c1841fa031
17 changed files with 304 additions and 258 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0-alpha.1+6R36 'Krypton' (27 February 2021)
v10.1.0-alpha.1+6R37 'Krypton' (28 February 2021)
## About Inform 7

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 27 February 2021
Build Number: 6R36
Build Date: 28 February 2021
Build Number: 6R37

View file

@ -335,7 +335,7 @@ 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">action_name_list_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">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">ap_optional_clause_CLASS</span>
@ -369,7 +369,7 @@ 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">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">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">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">ap_optional_clause</span><span class="plain-syntax">, </span><span class="constant-syntax">400</span><span class="plain-syntax">)</span>

View file

@ -87,7 +87,7 @@ function togglePopup(material_id) {
<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">action_name_list</span><span class="plain-syntax"> *, </span><a href="4-anl.html#SP2" class="function-link"><span class="function-syntax">ActionNameLists::log_anl</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</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>
@ -134,7 +134,7 @@ 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">'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</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-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

@ -93,36 +93,53 @@ MathJax = {
<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">action_name_list</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">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">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#SP8">&#167;8</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">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</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="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="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="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">action_name_list</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">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">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">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">action_name_list</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="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="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="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure anl_head is accessed in 4/ap2 and here.</li><li>The structure action_name_list 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>
<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
@ -130,8 +147,8 @@ text (e.g. "taking, dropping or examining a door").
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::anl_new</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::anl_new</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">action_name_list</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">action_name_list</span><span class="plain-syntax">);</span>
<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>
@ -140,17 +157,16 @@ text (e.g. "taking, dropping or examining a door").
<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">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="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="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::log</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::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">action_name_list</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</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">);</span>
<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</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::log_anl</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">anl</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>
@ -167,12 +183,12 @@ text (e.g. "taking, dropping or examining a door").
<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('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">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">action_name_list</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="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">action_name_list</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">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>
@ -188,7 +204,7 @@ text (e.g. "taking, dropping or examining a door").
<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('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">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="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>
@ -197,7 +213,7 @@ text (e.g. "taking, dropping or examining a door").
<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">action_name_list</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="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>
@ -219,14 +235,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, 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-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, RP[1] }</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-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::flip_anl_parity(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_head(RP[1], TRUE) }</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>
@ -238,9 +254,9 @@ operands.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</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::anl_new</span></a><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><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><span class="identifier-syntax">anl</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>
</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:
@ -277,7 +293,7 @@ for instance, we don't want to count the "in" from "fixed in place".
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</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_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>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-anl.html#SP4">&#167;4</a>.</li></ul>
@ -285,10 +301,10 @@ for instance, we don't want to count the "in" from "fixed in place".
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_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">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">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::anl_new</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#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>
@ -338,7 +354,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">action_name_list</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_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">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>
@ -350,7 +366,7 @@ end, but it's syntactically valid.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</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::anl_new</span></a><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><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="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>
@ -360,7 +376,7 @@ end, but it's syntactically valid.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</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::anl_new</span></a><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><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="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>
@ -371,27 +387,29 @@ end, but it's syntactically valid.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP7" class="function-link"><span class="function-syntax">ActionNameLists::flip_anl_parity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">RP</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">TRUE</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">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"> ==&gt; { </span><span class="constant-syntax">0</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">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>
</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>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</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">action_name_list</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">action_name_list</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_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">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">action_name_list</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">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="identifier-syntax">join</span><span class="plain-syntax"> = </span><span class="identifier-syntax">right_tail</span><span class="plain-syntax">;</span>
@ -402,46 +420,37 @@ end, but it's syntactically valid.)
<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">action_name_list</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::flip_anl_parity</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::flip_anl_parity</span></span>:<br/><a href="4-anl.html#SP3">&#167;3</a>, <a href="4-anl.html#SP3_2">&#167;3.2</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">anl</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">flip_all</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">flip_all</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">L</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">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="element-syntax">next</span><span class="plain-syntax">) {</span>
<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>
<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">anl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negate_pattern</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">FALSE: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">anl</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </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('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">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">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="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>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;action-list&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_parsing_tense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</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">r</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">anl</span><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">return</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="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">r</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><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">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>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionNameLists::anl_parse_internal</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::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_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="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">action_name_list</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_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">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::anl_new</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#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">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>
@ -500,14 +509,14 @@ 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">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">action_name_list</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">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="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::anl_new</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#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">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>
@ -515,15 +524,15 @@ 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">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">action_name_list</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">action_name_list</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">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">) {</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>
@ -533,10 +542,12 @@ 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">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('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">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">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">anl</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$8\n"</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">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>
@ -560,16 +571,36 @@ 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">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">action_name_list</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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</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('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::negated</span></span>:<br/>Action Patterns - <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="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
@ -579,7 +610,7 @@ 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('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">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="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>
@ -592,12 +623,12 @@ 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::count_actions_covered</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::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="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><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="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">action_name_list</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">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>

View file

@ -353,11 +353,11 @@ STV clauses; (2) get this right:
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::is_named</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">ActionPatterns::is_named</span></span>:<br/><a href="4-ap2.html#SP26">&#167;26</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">ap</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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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">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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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="element-syntax">nap_listed</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">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">ap</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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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">item</span><span class="plain-syntax">) &amp;&amp; (</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="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>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::is_valid</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">ActionPatterns::is_valid</span></span>:<br/><a href="4-ap2.html#SP22">&#167;22</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
@ -371,32 +371,26 @@ STV clauses; (2) get this right:
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::within_action_context</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">ActionPatterns::within_action_context</span></span>:<br/>Named Action Patterns - <a href="4-nap.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">action_name_list</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">ap</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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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">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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</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">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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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="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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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="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="identifier-syntax">anl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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="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="identifier-syntax">an</span><span class="plain-syntax">) &amp;&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="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">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">) &amp;&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="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="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><a href="4-anl.html#SP9" class="function-link"><span class="function-syntax">ActionNameLists::within_action_context</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</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">action_name_list</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionPatterns::list</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">ActionPatterns::list</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_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="function-syntax">ActionPatterns::list</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">ActionPatterns::list</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_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">ap</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">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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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="function-syntax">ActionPatterns::required_action</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</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">) &amp;&amp; (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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="element-syntax">parity</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</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="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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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="element-syntax">action_listed</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#SP1" class="function-link"><span class="function-syntax">ActionNameLists::length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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#SP9" class="function-link"><span class="function-syntax">ActionNameLists::negated</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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">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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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">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="reserved-syntax">return</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="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">int</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::object_based</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</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">ap</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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"> </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">ap</span><span class="plain-syntax">) &amp;&amp; (</span><a href="4-anl.html#SP9" class="function-link"><span class="function-syntax">ActionNameLists::nonempty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</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>
@ -1006,7 +1000,7 @@ here &mdash; a constant, a description, a table entry, a variable, and so on.
<span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="function-syntax">ActionPatterns::parse_action_pattern_dash</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">ActionPatterns::parse_action_pattern_dash</span></span>:<br/><a href="4-ap2.html#SP22">&#167;22</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">failure_this_call</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pap_failure_reason</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">i</span><span class="plain-syntax">, </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="constant-syntax">0</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">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_link</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">tense</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prevailing_ap_tense</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><a href="4-ap2.html#SP4" class="function-link"><span class="function-syntax">ActionPatterns::new</span></a><span class="plain-syntax">(); </span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">valid</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
@ -1030,7 +1024,7 @@ here &mdash; a constant, a description, a table entry, a variable, and so on.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">pap_failure_reason</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">ap</span><span class="plain-syntax">.</span><span class="element-syntax">text_of_pattern</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">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_list</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="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_list</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">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">) &amp;&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="element-syntax">nap_listed</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&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="element-syntax">action_listed</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_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">ap</span><span class="plain-syntax">.</span><span class="element-syntax">valid</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -1066,10 +1060,8 @@ away as they are recorded.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">preliminary_anl</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="4-anl.html#SP8" class="function-link"><span class="function-syntax">ActionNameLists::parse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">chief_an</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="4-anl.html#SP9" class="function-link"><span class="function-syntax">ActionNameLists::get_single_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">preliminary_anl</span><span class="plain-syntax">?(</span><span class="identifier-syntax">preliminary_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="plain-syntax"> </span><span class="reserved-syntax">anl_head</span><span class="plain-syntax"> *</span><span class="identifier-syntax">preliminary_anl</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP8" class="function-link"><span class="function-syntax">ActionNameLists::parse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">chief_an</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP9" class="function-link"><span class="function-syntax">ActionNameLists::get_single_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">preliminary_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">chief_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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">x</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">chief_an</span><span class="plain-syntax"> = </span><a href="4-ann.html#SP13" class="function-link"><span class="function-syntax">ActionNameNames::longest_nounless</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">tense</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">x</span><span class="plain-syntax">);</span>
@ -1144,9 +1136,9 @@ crucial word position except for the one matched.
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ap2.html#SP25_5_2" class="named-paragraph-link"><span class="named-paragraph">Report to the debugging log on the action decomposition</span><span class="named-paragraph-number">25.5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-ap2.html#SP25_5_3" class="named-paragraph-link"><span class="named-paragraph">Find how many different positions have each possible minimum count</span><span class="named-paragraph-number">25.5.3</span></a></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">entry</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">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_position</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="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_valid</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">first_valid</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_pattern</span><span class="plain-syntax"> </span><span class="identifier-syntax">trial_ap</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">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</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</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">"Entry (%d):\n$8\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parc</span><span class="plain-syntax">, </span><span class="identifier-syntax">entry</span><span class="plain-syntax">);</span>
@ -1178,7 +1170,7 @@ par-count 0, so the minimum is 0.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</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">anl_link</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">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</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</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="named-paragraph-container code-font"><a href="4-ap2.html#SP25_5_1_1" class="named-paragraph-link"><span class="named-paragraph">Find the position word of this particular action name</span><span class="named-paragraph-number">25.5.1.1</span></a></span><span class="plain-syntax">;</span>
@ -1299,7 +1291,7 @@ description.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">[0] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">K</span><span class="plain-syntax">[1] = </span><span class="identifier-syntax">NULL</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">entry</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">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</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">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">; </span><span class="identifier-syntax">entry</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="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</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">delete_this_link</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</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">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">prev</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_position</span><span class="plain-syntax"> != </span><span class="identifier-syntax">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_position</span><span class="plain-syntax">)) {</span>
@ -1340,7 +1332,7 @@ description.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</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">anl_link</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">negation_state</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">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="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</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</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">delete_this_link</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">word_position</span><span class="plain-syntax">)) {</span>
@ -1373,7 +1365,7 @@ the case when the first action name in the list is <span class="extract"><span c
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kinds_observed_in_list</span><span class="plain-syntax">[2];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kinds_observed_in_list</span><span class="plain-syntax">[0] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kinds_observed_in_list</span><span class="plain-syntax">[1] = </span><span class="identifier-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">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</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</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">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</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</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="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">entry</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">parc</span><span class="plain-syntax"> &gt; </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">no_of_pars</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">immiscible</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -1401,7 +1393,7 @@ the case when the first action name in the list is <span class="extract"><span c
<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">no_oow</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">no_iw</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="identifier-syntax">immiscible</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</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</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">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</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</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">no_of_pars</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">1</span><span class="plain-syntax">) &amp;&amp; (</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">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">FALSE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">immiscible</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -2015,8 +2007,9 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="identifier-syntax">CPMC_NEEDED</span><span class="plain-syntax">(</span><span class="constant-syntax">SECOND_EXISTS_CPMC</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">CPMC_NEEDED</span><span class="plain-syntax">(</span><span class="constant-syntax">SECOND_IS_INP1_CPMC</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="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_list</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_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="element-syntax">action_listed</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind_of_noun</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">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_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="element-syntax">action_listed</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">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_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">item</span><span class="plain-syntax">) &amp;&amp; (</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="plain-syntax"> </span><span class="identifier-syntax">kind_of_noun</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">item</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">kind_of_noun</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">kind_of_noun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -2029,8 +2022,8 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="identifier-syntax">CPMC_NEEDED</span><span class="plain-syntax">(</span><span class="constant-syntax">NOUN_MATCHES_AS_VALUE_CPMC</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_list</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_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="element-syntax">action_listed</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind_of_second</span><span class="plain-syntax"> = </span><a href="4-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::kind_of_second</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">.</span><span class="element-syntax">action_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="element-syntax">action_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">item</span><span class="plain-syntax">) &amp;&amp; (</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="plain-syntax"> </span><span class="identifier-syntax">kind_of_second</span><span class="plain-syntax"> = </span><a href="4-as.html#SP5" class="function-link"><span class="function-syntax">ActionSemantics::kind_of_second</span></a><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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">kind_of_second</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">kind_of_second</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_object</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">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">kind_of_second</span><span class="plain-syntax">)) {</span>
@ -2498,14 +2491,15 @@ and in this case we therefore ignore <span class="extract"><span class="extract-
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</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">else</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">noun_spec</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">anl</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">action_list</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</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="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><a href="4-anl.html#SP1" class="function-link"><span class="function-syntax">ActionNameLists::length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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">L</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">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) -1);</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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_list</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">body</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">) </span><span class="identifier-syntax">bad_form</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><a href="4-as.html#SP7" class="function-link"><span class="function-syntax">ActionSemantics::can_be_compiled_in_past_tense</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"> </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">ap</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">action_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">L</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><span class="identifier-syntax">bad_form</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><a href="4-as.html#SP7" class="function-link"><span class="function-syntax">ActionSemantics::can_be_compiled_in_past_tense</span></a><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">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bad_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTActions::double_sharp</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">Produce::val_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">RTActions::double_sharp</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="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>

View file

@ -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 Patterns - <a href="4-ap2.html#SP4">&#167;4</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::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="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

@ -226,19 +226,17 @@ generated from the PHUD elsewhere.
<span class="plain-syntax"> </span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">original_owner</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP15" class="function-link"><span class="function-syntax">Phrases::Usage::get_rulebook</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-rlb.html#SP9" class="function-link"><span class="function-syntax">Rulebooks::requires_specific_action</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">original_owner</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">waiver</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">anl</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">PW</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_prewhile_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phud</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">PW</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">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</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">anl</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">anl</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">else</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">NULL</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>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">original_owner</span><span class="plain-syntax"> == </span><span class="identifier-syntax">built_in_rulebooks</span><span class="plain-syntax">[</span><span class="constant-syntax">CHECK_RB</span><span class="plain-syntax">]) </span><span class="identifier-syntax">waiver</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>

View file

@ -459,18 +459,18 @@ infrastructure, and we access it with a single call.
<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">action_name_list</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="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="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">action_name_list</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">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">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">action_name_list</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">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">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>

View file

@ -39,7 +39,7 @@ 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
---- action_name_list_array 3 x 1000 = 3000 objects, 240096 bytes
---- anl_link_array 3 x 1000 = 3000 objects, 240096 bytes
---- inter_annotation_array 1 x 8192 objects, 196640 bytes
---- linguistic_stock_item 3315 objects, 159120 bytes
---- binary_predicate 321 objects, 156648 bytes
@ -74,6 +74,7 @@ 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
@ -89,7 +90,6 @@ 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
---- anl_head_array 2 x 1000 = 2000 objects, 16064 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 - 52773664 bytes = 51536K = 50 MB
19.9% was overhead - 52757664 bytes = 51521K = 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.5% in //Phrases::Manager::compile_as_needed//
7.0% in //Strings::compile_responses//
6.1% in //InferenceSubjects::emit_all//
4.3% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
2.0% in //Phrases::Manager::RulePrintingRule_routine//
2.0% in //Phrases::Manager::rulebooks_array//
8.3% in //Phrases::Manager::compile_as_needed//
6.9% in //Strings::compile_responses//
6.2% 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.9% in //Phrases::Manager::traverse//
0.8% 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,11 +19,11 @@
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//
2.9% not specifically accounted for
30.5% in running Inter pipeline
3.4% not specifically accounted for
30.4% in running Inter pipeline
9.8% in inter step 2/12: link
9.8% in step preparation
7.2% in inter step 12/12: generate inform6 -> auto.inf
9.6% in step preparation
7.1% 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
@ -32,6 +32,6 @@
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.0% not specifically accounted for
2.0% in supervisor
0.4% not specifically accounted for
2.3% not specifically accounted for
1.9% in supervisor
0.6% not specifically accounted for

View file

@ -265,7 +265,7 @@ DECLARE_CLASS(rubric_holder)
@e slash_gpr_CLASS
@e spatial_data_CLASS
@e action_name_list_CLASS
@e anl_link_CLASS
@e action_pattern_CLASS
@e anl_head_CLASS
@e ap_optional_clause_CLASS
@ -299,7 +299,7 @@ DECLARE_CLASS(scene)
DECLARE_CLASS(slash_gpr)
DECLARE_CLASS(spatial_data)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(action_name_list, 1000)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(anl_link, 1000)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(action_pattern, 100)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(anl_head, 1000)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(ap_optional_clause, 400)

View file

@ -13,7 +13,7 @@ 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(action_name_list *, ActionNameLists::log_anl)
COMPILE_WRITER(anl_link *, ActionNameLists::log_anl_link)
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);
REGISTER_WRITER('8', ActionNameLists::log_anl_link);
REGISTER_WRITER('l', ActionNameNames::log);
@ =

View file

@ -9,28 +9,32 @@ something" -- the generic I7 text for "any action at all".
=
typedef struct anl_head {
struct action_name_list *body;
struct anl_link *body;
int anyone_specified;
} anl_head;
anl_head *ActionNameLists::new_head(action_name_list *anl) {
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;
}
typedef struct action_name_list {
typedef struct anl_link {
struct anl_item item;
struct action_name_list *next; /* next in this ANL list */
struct anl_link *next; /* next in this ANL list */
int delete_this_link; /* used temporarily during parsing */
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 */
int anyone_specified;
} action_name_list;
} anl_link;
typedef struct anl_item {
struct action_name *action_listed; /* the action in this ANL list entry */
@ -38,14 +42,27 @@ typedef struct anl_item {
int parity; /* parity of just this individual item */
} anl_item;
anl_item *ActionNameLists::first_item(anl_head *list) {
if ((list) && (list->body)) return &(list->body->item);
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").
=
action_name_list *ActionNameLists::anl_new(void) {
action_name_list *new_anl = CREATE(action_name_list);
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;
@ -54,17 +71,16 @@ action_name_list *ActionNameLists::anl_new(void) {
new_anl->negate_pattern = FALSE;
new_anl->in_clause = EMPTY_WORDING;
new_anl->abbreviation_level = 0;
new_anl->anyone_specified = FALSE;
new_anl->delete_this_link = FALSE;
return new_anl;
}
void ActionNameLists::log(anl_head *head) {
action_name_list *anl = (head)?(head->body):NULL;
ActionNameLists::log_anl(anl);
anl_link *anl = (head)?(head->body):NULL;
ActionNameLists::log_anl_link(anl);
}
void ActionNameLists::log_anl(action_name_list *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) ":"",
@ -82,11 +98,11 @@ void ActionNameLists::log_anl(action_name_list *anl) {
}
void ActionNameLists::log_briefly(anl_head *head) {
action_name_list *anl = (head)?(head->body):NULL;
anl_link *anl = (head)?(head->body):NULL;
if (anl == NULL) LOG("<null-anl>");
else {
if (anl->negate_pattern) LOG("NOT[ ");
action_name_list *a;
anl_link *a;
for (a = anl; a; a = a->next) {
if (a->item.nap_listed) {
if (a->item.parity == -1) LOG("not-");
@ -111,7 +127,7 @@ action_name *ActionNameLists::get_singleton_action(anl_head *anl) {
return an;
}
action_name_list *anl_being_parsed = NULL;
anl_link *anl_being_parsed = NULL;
@ The following handles action name lists, such as:
@ -126,14 +142,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, RP[1] }
doing something/anything to/with <anl-to-tail> | ==> { TRUE, ActionNameLists::new_head(RP[1], FALSE) }
doing something/anything | ==> @<Construct ANL for anything@>
doing something/anything ... | ==> { fail }
<anl> ==> { TRUE, RP[1] }
<anl> ==> { TRUE, ActionNameLists::new_head(RP[1], FALSE) }
<anl-excluded> ::=
<anl> to/with {<anl-minimal-common-operand>} | ==> @<Add to-clause to excluded ANL@>;
<anl> ==> { TRUE, ActionNameLists::flip_anl_parity(RP[1], FALSE) }
<anl> ==> { TRUE, ActionNameLists::new_head(RP[1], TRUE) }
<anl-minimal-common-operand> ::=
_,/or ... | ==> { fail }
@ -141,9 +157,9 @@ operands.
...
@<Construct ANL for anything@> =
action_name_list *anl = ActionNameLists::anl_new();
anl_link *anl = ActionNameLists::new_link();
anl->word_position = Wordings::first_wn(W);
==> { TRUE, anl };
==> { TRUE, ActionNameLists::new_head(anl, FALSE) };
@ The trickiest form is:
@ -170,14 +186,14 @@ for instance, we don't want to count the "in" from "fixed in place".
in ... ==> { TRUE, - }
@<Augment ANL with in clause@> =
action_name_list *anl = RP[1];
anl_link *anl = RP[1];
anl->in_clause = GET_RW(<anl-in-tail>, 1);
@<Construct ANL for anything applied@> =
action_name_list *new_anl;
anl_link *new_anl;
if ((!preform_lookahead_mode) && (anl_being_parsed)) new_anl = anl_being_parsed;
else {
new_anl = ActionNameLists::anl_new();
new_anl = ActionNameLists::new_link();
new_anl->word_position = Wordings::first_wn(W);
}
new_anl->parameter[new_anl->parc] = W;
@ -220,7 +236,7 @@ end, but it's syntactically valid.)
}
<anl-entry-with-action> internal {
action_name_list *anl = ActionNameLists::anl_parse_internal(W);
anl_link *anl = ActionNameLists::anl_parse_internal(W);
if (anl) {
==> { -, anl }; return TRUE;
}
@ -228,36 +244,38 @@ end, but it's syntactically valid.)
}
@<Make an action pattern from named behaviour@> =
action_name_list *new_anl = ActionNameLists::anl_new();
anl_link *new_anl = ActionNameLists::new_link();
new_anl->word_position = Wordings::first_wn(W);
new_anl->item.nap_listed = RP[1];
==> { 0, new_anl };
@<Make an action pattern from named behaviour plus in@> =
action_name_list *new_anl = ActionNameLists::anl_new();
anl_link *new_anl = ActionNameLists::new_link();
new_anl->word_position = Wordings::first_wn(W);
new_anl->item.nap_listed = RP[1];
new_anl->in_clause = GET_RW(<anl-in-tail>, 1);
==> { 0, new_anl };
@<Add to-clause to excluded ANL@> =
action_name_list *anl = ActionNameLists::flip_anl_parity(RP[1], TRUE);
anl_link *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++;
==> { 0, anl };
anl_head *head = ActionNameLists::new_head(anl, FALSE);
ActionNameLists::negate_all(head);
==> { FALSE, head };
@<Join parsed ANLs@> =
action_name_list *join;
action_name_list *left_atom = RP[1];
action_name_list *right_tail = RP[2];
anl_link *join;
anl_link *left_atom = RP[1];
anl_link *right_tail = RP[2];
if (left_atom == NULL) { join = right_tail; }
else if (right_tail == NULL) { join = left_atom; }
else {
action_name_list *new_anl = right_tail;
anl_link *new_anl = right_tail;
while (new_anl->next != NULL) new_anl = new_anl->next;
new_anl->next = left_atom;
join = right_tail;
@ -265,16 +283,10 @@ end, but it's syntactically valid.)
==> { 0, join };
@ =
action_name_list *ActionNameLists::flip_anl_parity(action_name_list *anl, int flip_all) {
if (flip_all) {
action_name_list *L;
for (L = anl; L; L = L->next) {
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;
}
} else {
anl->negate_pattern = (anl->negate_pattern)?FALSE:TRUE;
}
return anl;
}
@ =
@ -285,22 +297,19 @@ anl_head *ActionNameLists::parse(wording W, int tense) {
anl_parsing_tense = tense;
int r = <action-list>(W);
anl_parsing_tense = t;
if (r) {
action_name_list *anl = <<rp>>;
return ActionNameLists::new_head(anl);
}
if (r) return <<rp>>;
return NULL;
}
@ =
action_name_list *ActionNameLists::anl_parse_internal(wording W) {
anl_link *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;
action_name_list *anl_list = NULL, *new_anl = NULL;
anl_link *anl_list = NULL, *new_anl = NULL;
action_name *an;
new_anl = ActionNameLists::anl_new();
new_anl = ActionNameLists::new_link();
LOOP_OVER(an, action_name) {
int x_ended = FALSE;
@ -359,14 +368,14 @@ action_name_list *ActionNameLists::anl_parse_internal(wording W) {
if (inc) {
if (anl_list == NULL) anl_list = new_anl;
else {
action_name_list *pos = anl_list, *prev = NULL;
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;
}
}
new_anl = ActionNameLists::anl_new();
new_anl = ActionNameLists::new_link();
DontInclude: ;
}
LOGIF(ACTION_PATTERN_PARSING, "Parsing ANL from %W resulted in:\n$8\n", W, anl_list);
@ -374,15 +383,15 @@ action_name_list *ActionNameLists::anl_parse_internal(wording W) {
}
int scanning_anl_only_mode = FALSE;
action_name_list *ActionNameLists::extract_actions_only(wording W) {
action_name_list *anl = NULL;
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) {
if ((anl) && (anl->body)) {
anl->anyone_specified = FALSE;
if (<<r>> == ACTOR_EXPLICITLY_UNIVERSAL) anl->anyone_specified = TRUE;
}
@ -392,10 +401,12 @@ action_name_list *ActionNameLists::extract_actions_only(wording W) {
return anl;
}
action_name *ActionNameLists::get_single_action(action_name_list *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$8\n", anl);
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;
@ -419,8 +430,8 @@ action_name *ActionNameLists::get_single_action(action_name_list *anl) {
return anf;
}
int ActionNameLists::get_explicit_anyone_flag(action_name_list *anl) {
if (anl == NULL) return FALSE;
int ActionNameLists::get_explicit_anyone_flag(anl_head *anl) {
if ((anl == NULL) || (anl->body == NULL)) return FALSE;
return anl->anyone_specified;
}
@ -430,6 +441,26 @@ int ActionNameLists::negated(anl_head *head) {
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
@ -454,8 +485,8 @@ 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 (head->body->negate_pattern) parity = FALSE;
action_name_list *anl = head->body;
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;

View file

@ -260,11 +260,11 @@ action_pattern *ActionPatterns::ap_store(action_pattern ap) {
}
int ActionPatterns::is_named(action_pattern *ap) {
if (ap == NULL) return FALSE;
if (ap->action_list == NULL) return FALSE;
if (ap->action_list->body == NULL) return FALSE;
if (ap->action_list->body->item.nap_listed == NULL) return FALSE;
return TRUE;
if (ap) {
anl_item *item = ActionNameLists::first_item(ap->action_list);
if ((item) && (item->nap_listed)) return TRUE;
}
return FALSE;
}
int ActionPatterns::is_valid(action_pattern *ap) {
@ -278,32 +278,26 @@ int ActionPatterns::is_request(action_pattern *ap) {
}
int ActionPatterns::within_action_context(action_pattern *ap, action_name *an) {
action_name_list *anl;
if (ap == NULL) return TRUE;
if (ap->action_list == NULL) return TRUE;
if (ap->action_list->body == NULL) return TRUE;
if (ap->action_list->body->item.nap_listed)
return NamedActionPatterns::within_action_context(ap->action_list->body->item.nap_listed, an);
for (anl = ap->action_list->body; anl; anl = anl->next)
if (((anl->item.action_listed == an) && (anl->item.parity == 1)) ||
((anl->item.action_listed != an) && (anl->item.parity == -1)))
return TRUE;
return FALSE;
return ActionNameLists::within_action_context(ap->action_list, an);
}
action_name_list *ActionPatterns::list(action_pattern *ap) {
anl_head *ActionPatterns::list(action_pattern *ap) {
if (ap == NULL) return NULL;
return (ap->action_list)?(ap->action_list->body):NULL;
return ap->action_list;
}
action_name *ActionPatterns::required_action(action_pattern *ap) {
if ((ap->action_list) && (ap->action_list->body) && (ap->action_list->body->next == NULL) && (ap->action_list->body->item.parity == 1) && (ap->action_list->body->negate_pattern == FALSE))
return ap->action_list->body->item.action_listed;
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;
}
return NULL;
}
int ActionPatterns::object_based(action_pattern *ap) {
if ((ap) && (ap->action_list) && (ap->action_list->body)) return TRUE;
if ((ap) && (ActionNameLists::nonempty(ap->action_list))) return TRUE;
return FALSE;
}
@ -850,7 +844,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;
action_name_list *anl = NULL;
anl_link *anl = NULL;
int tense = prevailing_ap_tense;
action_pattern ap = ActionPatterns::new(); ap.valid = FALSE;
@ -871,7 +865,7 @@ 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);
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.valid = TRUE;
@ -898,10 +892,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?(preliminary_anl->body):NULL);
anl_head *preliminary_anl = ActionNameLists::parse(W, tense);
action_name *chief_an = ActionNameLists::get_single_action(preliminary_anl);
if (chief_an == NULL) {
int x;
chief_an = ActionNameNames::longest_nounless(W, tense, &x);
@ -966,9 +958,9 @@ 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@>;
action_name_list *entry = anl;
anl_link *entry = anl;
int first_position = anl->word_position;
action_name_list *first_valid = NULL;
anl_link *first_valid = NULL;
action_pattern trial_ap;
for (entry = anl; entry; entry = entry->next) {
LOGIF(ACTION_PATTERN_PARSING, "Entry (%d):\n$8\n", entry->parc, entry);
@ -995,7 +987,7 @@ 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@> =
action_name_list *entry;
anl_link *entry;
for (entry = anl; entry; entry = entry->next) {
int pos = -1;
@<Find the position word of this particular action name@>;
@ -1091,7 +1083,7 @@ description.
@<Adjudicate between topic and other actions@> =
kind *K[2];
K[0] = NULL; K[1] = NULL;
action_name_list *entry, *prev = 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)) {
@ -1128,7 +1120,7 @@ description.
}
@<Delete those action names which are to be deleted@> =
action_name_list *entry, *prev = NULL;
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)) {
@ -1156,7 +1148,7 @@ 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 (action_name_list *entry = anl; entry; entry = entry->next)
for (anl_link *entry = anl; entry; entry = entry->next)
if (entry->item.nap_listed == NULL) {
if (entry->parc > 0) {
if (no_of_pars > 0) immiscible = TRUE;
@ -1184,7 +1176,7 @@ the case when the first action name in the list is |NULL|).
}
if ((no_oow > 0) && (no_iw > 0)) immiscible = TRUE;
for (action_name_list *entry = anl; entry; entry = entry->next)
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))
immiscible = TRUE;
@ -1796,8 +1788,9 @@ void ActionPatterns::compile_pattern_match(value_holster *VH, action_pattern ap,
CPMC_NEEDED(SECOND_EXISTS_CPMC, NULL);
CPMC_NEEDED(SECOND_IS_INP1_CPMC, NULL);
}
if ((ap.action_list) && (ap.action_list->body) && (ap.action_list->body->item.action_listed)) {
kind_of_noun = ActionSemantics::kind_of_noun(ap.action_list->body->item.action_listed);
anl_item *item = ActionNameLists::first_item(ap.action_list);
if ((item) && (item->action_listed)) {
kind_of_noun = ActionSemantics::kind_of_noun(item->action_listed);
if (kind_of_noun == NULL) kind_of_noun = K_object;
}
@ -1810,8 +1803,8 @@ void ActionPatterns::compile_pattern_match(value_holster *VH, action_pattern ap,
CPMC_NEEDED(NOUN_MATCHES_AS_VALUE_CPMC, NULL);
}
}
if ((ap.action_list) && (ap.action_list->body) && (ap.action_list->body->item.action_listed)) {
kind_of_second = ActionSemantics::kind_of_second(ap.action_list->body->item.action_listed);
if ((item) && (item->action_listed)) {
kind_of_second = ActionSemantics::kind_of_second(item->action_listed);
if (kind_of_second == NULL) kind_of_second = K_object;
}
if (Kinds::Behaviour::is_object(kind_of_second)) {
@ -2265,14 +2258,15 @@ void ActionPatterns::emit_past_tense(action_pattern *ap) {
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, 0);
else
Specifications::Compiler::emit_as_val(K_value, ap->noun_spec);
action_name_list *anl = (ap->action_list)?(ap->action_list->body):NULL;
if (anl == NULL)
int L = ActionNameLists::length(ap->action_list);
if (L == 0)
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_ti) -1);
else {
if (ap->action_list->body->next) bad_form = TRUE;
if (ActionSemantics::can_be_compiled_in_past_tense(anl->item.action_listed) == FALSE)
anl_item *item = ActionNameLists::first_item(ap->action_list);
if (L >= 2) bad_form = TRUE;
if (ActionSemantics::can_be_compiled_in_past_tense(item->action_listed) == FALSE)
bad_form = TRUE;
Produce::val_iname(Emit::tree(), K_value, RTActions::double_sharp(anl->item.action_listed));
Produce::val_iname(Emit::tree(), K_value, RTActions::double_sharp(item->action_listed));
}
Produce::up(Emit::tree());

View file

@ -128,19 +128,17 @@ void Rules::Bookings::place(ph_usage_data *phud, booking *br) {
rulebook *original_owner = Phrases::Usage::get_rulebook(phud);
if (Rulebooks::requires_specific_action(original_owner)) {
int waiver = FALSE;
action_name_list *anl;
action_name *an;
wording PW = Phrases::Usage::get_prewhile_text(phud);
if (Wordings::nonempty(PW)) {
LOOP_THROUGH_WORDING(i, PW)
if (NamedActionPatterns::by_name(Wordings::from(PW, i)))
goto NotSingleAction;
anl = ActionNameLists::extract_actions_only(PW);
an = ActionNameLists::get_single_action(anl);
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(anl));
ActionNameLists::get_explicit_anyone_flag(head));
} else {
anl = NULL;
an = NULL;
waiver = TRUE;
if (original_owner == built_in_rulebooks[CHECK_RB]) waiver = FALSE;

View file

@ -380,18 +380,18 @@ int RTActions::action_variable_set_ID(action_name *an) {
void RTActions::emit_anl(anl_head *head) {
if (head == NULL) return;
action_name_list *anl = head->body;
anl_link *anl = head->body;
if (anl == NULL) return;
LOGIF(ACTION_PATTERN_COMPILATION, "Emitting action name list: $L", head);
int C = 0;
for (action_name_list *L = anl; L; L = L->next) C++;
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 N = 0, downs = 0;
for (action_name_list *L = anl; L; L = L->next) {
for (anl_link *L = anl; L; L = L->next) {
if (anl->item.parity != L->item.parity) internal_error("mixed parity");
N++;
if (N < C) { Produce::inv_primitive(Emit::tree(), OR_BIP); Produce::down(Emit::tree()); downs++; }