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

Refactored Definition: X is Y: subtrees

This commit is contained in:
Graham Nelson 2021-03-25 08:46:41 +00:00
parent d41b67bc9e
commit fd34abd418
53 changed files with 3248 additions and 2858 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0-alpha.1+6R60 'Krypton' (24 March 2021)
v10.1.0-alpha.1+6R61 'Krypton' (25 March 2021)
## About Inform 7

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 24 March 2021
Build Number: 6R60
Build Date: 25 March 2021
Build Number: 6R61

View file

@ -98,18 +98,32 @@ therefore safely be used to sweep up any <span class="extract"><span class="extr
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeSubtrees::accept</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">ImperativeSubtrees::accept</span></span>:<br/>Passes through Major Nodes - <a href="2-ptmn.html#SP3_1_1">&#167;3.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP1" class="function-link"><span class="function-syntax">ImperativeSubtrees::accept_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeSubtrees::accept_body</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-is.html#SP1" class="function-link"><span class="function-syntax">ImperativeSubtrees::accept_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeSubtrees::accept_inner</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">accept_header</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">IMPERATIVE_NT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</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">Node::get_impdef</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">header</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">end_def</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">end_def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">end_def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">) == </span><span class="identifier-syntax">UNKNOWN_NT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">end_def</span><span class="plain-syntax"> = </span><span class="identifier-syntax">end_def</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">p</span><span class="plain-syntax"> == </span><span class="identifier-syntax">end_def</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">; </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">IMPERATIVE_NT</span></span><span class="comment-syntax"> not followed by any </span><span class="extract"><span class="extract-syntax">UNKNOWN_NT</span></span><span class="comment-syntax">s</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> splice so that </span><span class="extract"><span class="extract-syntax">p-&gt;next</span></span><span class="comment-syntax"> to </span><span class="extract"><span class="extract-syntax">end_def</span></span><span class="comment-syntax"> become the children of </span><span class="extract"><span class="extract-syntax">p</span></span><span class="comment-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</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">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">end_def</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">end_def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">inv_p</span><span class="plain-syntax">; </span><span class="identifier-syntax">inv_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">inv_p</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">Node::set_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv_p</span><span class="plain-syntax">, </span><span class="identifier-syntax">INVOCATION_LIST_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-is.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Parse the structure of the code block</span><span class="named-paragraph-number">1.1</span></a></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">header</span><span class="plain-syntax"> != </span><span class="identifier-syntax">end_def</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> splice so that </span><span class="extract"><span class="extract-syntax">p-&gt;next</span></span><span class="comment-syntax"> to </span><span class="extract"><span class="extract-syntax">end_def</span></span><span class="comment-syntax"> become the children of </span><span class="extract"><span class="extract-syntax">p</span></span><span class="comment-syntax">:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</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">p</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">end_def</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">end_def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inv_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">inv_p</span><span class="plain-syntax">; </span><span class="identifier-syntax">inv_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">inv_p</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">Node::set_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv_p</span><span class="plain-syntax">, </span><span class="identifier-syntax">INVOCATION_LIST_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-is.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Parse the structure of the code block</span><span class="named-paragraph-number">1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> worry about the preamble in the node p</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">accept_header</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_impdef</span><span class="plain-syntax">(</span><span class="identifier-syntax">header</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ImperativeDefinitions::make_imperative_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">header</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>

View file

@ -209,6 +209,8 @@ organisation, and are not directly functional in themselves.
<span class="plain-syntax"> </span><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">near_start_of_extension</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IMPERATIVE_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-ptmn.html#SP3_1_1" class="named-paragraph-link"><span class="named-paragraph">Pass through an IMPERATIVE node</span><span class="named-paragraph-number">3.1.1</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">DEFN_CONT_NT:</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SENTENCE_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-ptmn.html#SP3_1_2" class="named-paragraph-link"><span class="named-paragraph">Pass through a SENTENCE node</span><span class="named-paragraph-number">3.1.2</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRACE_NT:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-ptmn.html#SP3_1_5" class="named-paragraph-link"><span class="named-paragraph">Pass through a TRACE node</span><span class="named-paragraph-number">3.1.5</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
@ -236,20 +238,15 @@ organisation, and are not directly functional in themselves.
<ul class="endnotetexts"><li>This code is used in <a href="2-ptmn.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_1_1" class="paragraph-anchor"></a><b>&#167;3.1.1. </b>This is a little convoluted: see <a href="2-is.html" class="internal">Imperative Subtrees</a> for how
"acceptance" tidies up the nodes in the syntax tree corresponding to a block
of imperative code. After that, we look out for adjectives defined by phrases,
and for phrases with names, since both will affect how we read sentences in
passes 1 and 2.
of imperative code.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Pass through an IMPERATIVE node</span><span class="named-paragraph-number">3.1.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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</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">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</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">SyntaxTree::traverse_run</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><a href="2-is.html#SP1" class="function-link"><span class="function-syntax">ImperativeSubtrees::accept</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">IMPERATIVE_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Phrases::Adjectives::look_for_headers</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Phrases::Usage::predeclare_name_in</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-ptmn.html#SP3_1">&#167;3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_1_2" class="paragraph-anchor"></a><b>&#167;3.1.2. </b><span class="extract"><span class="extract-syntax">SENTENCE_NT</span></span> nodes are by far the most varied and difficult. In the pre-pass,

View file

@ -138,7 +138,8 @@ for compilation reasons, but will never be used:
</pre>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">ALLOWED_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "an animal is allowed to have a description"</span>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">DEFN_CONT_NT</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ALLOWED_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "an animal is allowed to have a description"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">EVERY_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "every container"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ADJECTIVE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "open"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PROPERTYCALLED_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "a man has a number called age"</span>
@ -148,11 +149,13 @@ for compilation reasons, but will never be used:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">NodeType::new</span><span class="plain-syntax">(</span><span class="constant-syntax">DEFN_CONT_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"DEFN_CONT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NodeType::new</span><span class="plain-syntax">(</span><span class="constant-syntax">ALLOWED_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ALLOWED_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NodeType::new</span><span class="plain-syntax">(</span><span class="constant-syntax">EVERY_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"EVERY_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NodeType::new</span><span class="plain-syntax">(</span><span class="constant-syntax">ADJECTIVE_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ADJECTIVE_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NodeType::new</span><span class="plain-syntax">(</span><span class="constant-syntax">PROPERTYCALLED_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"PROPERTYCALLED_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</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">NodeType::new</span><span class="plain-syntax">(</span><span class="constant-syntax">CREATED_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"CREATED_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NodeType::new</span><span class="plain-syntax">(</span><span class="constant-syntax">CREATED_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"CREATED_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-inaa.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_3" class="paragraph-anchor"></a><b>&#167;3.3. </b></p>
@ -401,6 +404,7 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">classified_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: this sentence has been classified</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">clears_pronouns_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: this sentence erases the current value of "it"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">impdef_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">imperative_defn</span></span><span class="comment-syntax">: for blocks of imperative code</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">implicit_in_creation_of_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">inference_subject</span></span><span class="comment-syntax">: for assemblies</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">implicitness_count_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> int: keeping track of recursive assemblies</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">interpretation_of_subject_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">inference_subject</span></span><span class="comment-syntax">: subject, during passes</span>
@ -408,12 +412,14 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
<span class="definition-keyword">enum</span> <span class="constant-syntax">you_can_ignore_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: for assertions now drained of meaning</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">impdef</span><span class="plain-syntax">, </span><span class="identifier-syntax">imperative_defn</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">implicit_in_creation_of</span><span class="plain-syntax">, </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">interpretation_of_subject</span><span class="plain-syntax">, </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax">)</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">impdef</span><span class="plain-syntax">, </span><span class="identifier-syntax">imperative_defn</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">implicit_in_creation_of</span><span class="plain-syntax">, </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">interpretation_of_subject</span><span class="plain-syntax">, </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax">)</span>
</pre>
@ -426,6 +432,8 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="constant-syntax">clears_pronouns_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP13" class="function-link"><span class="function-syntax">CoreSyntax::write_clears_pronouns_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="constant-syntax">impdef_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP13" class="function-link"><span class="function-syntax">CoreSyntax::write_impdef_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="constant-syntax">implicit_in_creation_of_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP13" class="function-link"><span class="function-syntax">CoreSyntax::write_implicit_in_creation_of_ANNOT</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="constant-syntax">implicitness_count_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP13" class="function-link"><span class="function-syntax">CoreSyntax::write_implicitness_count_ANNOT</span></a><span class="plain-syntax">);</span>
@ -444,6 +452,10 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">clears_pronouns_ANNOT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {clears pronouns}"</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">CoreSyntax::write_impdef_ANNOT</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_impdef</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {imperative definition: %d}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_impdef</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">)-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CoreSyntax::write_implicit_in_creation_of_ANNOT</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_implicit_in_creation_of</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {implicit in creation of: $j}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_implicit_in_creation_of</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">));</span>
@ -469,6 +481,7 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow_for_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">clears_pronouns_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow_for_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">interpretation_of_subject_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow_for_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">verb_problem_issued_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">IMPERATIVE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">impdef_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">IMPERATIVE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">indentation_level_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">SENTENCE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">implicit_in_creation_of_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">SENTENCE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">implicitness_count_ANNOT</span><span class="plain-syntax">);</span>

View file

@ -624,7 +624,6 @@ matches the single term of the determination type of each CGL in the list.
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_flag</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">LOOP_THROUGH_UNSORTED_CG_LINES</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec_of_line</span><span class="plain-syntax"> = </span><a href="5-dt.html#SP4" class="function-link"><span class="function-syntax">DeterminationTypes::get_single_term</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">cgl_type</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">"CGL $g --&gt; $P\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec_of_line</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">first_flag</span><span class="plain-syntax">) { </span><span class="comment-syntax"> initially no expectations: </span><span class="extract"><span class="extract-syntax">spec_union</span></span><span class="comment-syntax"> is meaningless</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">spec_union</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spec_of_line</span><span class="plain-syntax">; </span><span class="comment-syntax"> so we set it to the first result</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_flag</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>

View file

@ -89,7 +89,7 @@ which use this module:
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">ph_type_data</span><span class="plain-syntax"> *, </span><a href="3-dptd.html#SP1" class="function-link"><span class="function-syntax">Phrases::TypeData::Textual::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">local_variable</span><span class="plain-syntax"> *, </span><a href="4-lv.html#SP34" class="function-link"><span class="function-syntax">LocalVariables::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *, </span><a href="3-phr.html#SP8" class="function-link"><span class="function-syntax">Phrases::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> *, </span><a href="3-pu.html#SP14" class="function-link"><span class="function-syntax">Phrases::Usage::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> *, </span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::log</span></a><span class="plain-syntax">)</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeModule::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer</span><span class="plain-syntax">(</span><span class="character-syntax">'L'</span><span class="plain-syntax">, &amp;</span><a href="4-lv.html#SP43" class="function-link"><span class="function-syntax">LocalVariables::writer</span></a><span class="plain-syntax">);</span>
@ -98,7 +98,7 @@ which use this module:
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'h'</span><span class="plain-syntax">, </span><a href="3-dptd.html#SP1" class="function-link"><span class="function-syntax">Phrases::TypeData::Textual::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">'k'</span><span class="plain-syntax">, </span><a href="4-lv.html#SP34" class="function-link"><span class="function-syntax">LocalVariables::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">'R'</span><span class="plain-syntax">, </span><a href="3-phr.html#SP8" class="function-link"><span class="function-syntax">Phrases::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">'U'</span><span class="plain-syntax">, </span><a href="3-pu.html#SP14" class="function-link"><span class="function-syntax">Phrases::Usage::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">'U'</span><span class="plain-syntax">, </span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Memory::reason_name</span><span class="plain-syntax">(</span><span class="constant-syntax">INV_LIST_MREASON</span><span class="plain-syntax">, </span><span class="string-syntax">"lists for type-checking invocations"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">DESCRIPTION_COMPILATION_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"description compilation"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</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">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">EXPRESSIONS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"expressions"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>

View file

@ -167,7 +167,7 @@ the rulebook; instead, the booking is marked for automatic placement later on.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RuleBookings::make_automatic_placements</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">RuleBookings::make_automatic_placements</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RuleBookings::make_automatic_placements</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">RuleBookings::make_automatic_placements</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP11">&#167;11</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">booking</span><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">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">br</span><span class="plain-syntax">, </span><span class="reserved-syntax">booking</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">br</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">place_automatically</span><span class="plain-syntax">) {</span>
@ -175,12 +175,12 @@ the rulebook; instead, the booking is marked for automatic placement later on.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">defines</span><span class="plain-syntax">;</span>
<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#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_rulebook</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">placement</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_rulebook_placement</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<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#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::get_rulebook</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">placement</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::get_rulebook_placement</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner</span><span class="plain-syntax"> = </span><span class="identifier-syntax">original_owner</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginCalls::place_rule</span><span class="plain-syntax">(</span><span class="identifier-syntax">br</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rule_being_booked</span><span class="plain-syntax">, </span><span class="identifier-syntax">original_owner</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">owner</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">owner</span><span class="plain-syntax"> != </span><span class="identifier-syntax">original_owner</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::set_rulebook</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">), </span><span class="identifier-syntax">owner</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::set_rulebook</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">), </span><span class="identifier-syntax">owner</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">"Rerouting $b: $K --&gt; $K\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">br</span><span class="plain-syntax">, </span><span class="identifier-syntax">original_owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>

View file

@ -242,12 +242,12 @@ being analogous to a function \(X\to Y\).
</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">Rulebooks::action_focus</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">Rulebooks::action_focus</span></span>:<br/><a href="2-rlb.html#SP8">&#167;8</a><br/>Phrase Usage - <a href="3-pu.html#SP8_3_1_1">&#167;8.3.1.1</a>, <a href="3-pu.html#SP18_1_1">&#167;18.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::action_focus</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">Rulebooks::action_focus</span></span>:<br/><a href="2-rlb.html#SP8">&#167;8</a><br/>Phrase Usage - <a href="3-pu.html#SP7_3_1_1">&#167;7.3.1.1</a>, <a href="3-pu.html#SP17_1_1">&#167;17.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</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">B</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-fao.html#SP1" class="function-link"><span class="function-syntax">FocusAndOutcome::action_focus</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">my_focus</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::get_focus_kind</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">Rulebooks::get_focus_kind</span></span>:<br/><a href="2-rlb.html#SP2_4">&#167;2.4</a><br/>Phrase Usage - <a href="3-pu.html#SP18_1_1">&#167;18.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::get_focus_kind</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">Rulebooks::get_focus_kind</span></span>:<br/><a href="2-rlb.html#SP2_4">&#167;2.4</a><br/>Phrase Usage - <a href="3-pu.html#SP17_1_1">&#167;17.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-fao.html#SP1" class="function-link"><span class="function-syntax">FocusAndOutcome::get_focus_parameter_kind</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">my_focus</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
@ -409,7 +409,7 @@ that action are automatically created, and similarly for activities and scenes.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-bl.html#SP7" class="function-link"><span class="function-syntax">BookingLists::first</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">contents</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">Rulebooks::runs_during_activities</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">Rulebooks::runs_during_activities</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP8_3_1_1">&#167;8.3.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::runs_during_activities</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">Rulebooks::runs_during_activities</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP7_3_1_1">&#167;7.3.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</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">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">runs_during_activities</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -436,7 +436,7 @@ It marks a rulebook as definitely needing to check the actor.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::log_name_only</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">Rulebooks::log_name_only</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::log_name_only</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">Rulebooks::log_name_only</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP13">&#167;13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</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">"Rulebook %d (%W)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">B</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">primary_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>

View file

@ -145,7 +145,7 @@ rule called <span class="extract"><span class="extract-syntax">W</span></span>,
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="function-syntax">Rules::obtain</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">Rules::obtain</span></span>:<br/><a href="2-rls.html#SP11">&#167;11</a><br/>Phrase Usage - <a href="3-pu.html#SP2">&#167;2</a>, <a href="3-pu.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">allow_responses</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="function-syntax">Rules::obtain</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">Rules::obtain</span></span>:<br/><a href="2-rls.html#SP11">&#167;11</a><br/>Imperative Definitions - <a href="3-id.html#SP6">&#167;6</a>, <a href="3-id.html#SP8">&#167;8</a><br/>Phrase Usage - <a href="3-pu.html#SP2">&#167;2</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">allow_responses</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">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Articles::remove_the</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">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><a href="2-rls.html#SP5" class="function-link"><span class="function-syntax">Rules::by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
@ -182,7 +182,7 @@ rule called <span class="extract"><span class="extract-syntax">W</span></span>,
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">PM_RuleWithComma_issued_at</span><span class="plain-syntax"> = -1;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::vet_name</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Rules::vet_name</span></span>:<br/><a href="2-rls.html#SP2">&#167;2</a><br/>Phrase Usage - <a href="3-pu.html#SP8_4">&#167;8.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="function-syntax">Rules::vet_name</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Rules::vet_name</span></span>:<br/><a href="2-rls.html#SP2">&#167;2</a><br/>Imperative Definitions - <a href="3-id.html#SP6">&#167;6</a>, <a href="3-id.html#SP8">&#167;8</a><br/>Phrase Usage - <a href="3-pu.html#SP7_4">&#167;7.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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;unsuitable-name&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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">PM_RuleWithComma_issued_at</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">PM_RuleWithComma_issued_at</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>
@ -217,7 +217,7 @@ end in "rule" slightly differently. (Not all rule names do: those for timed even
<span class="plain-syntax"> </span><span class="identifier-syntax">mc</span><span class="plain-syntax">, </span><span class="identifier-syntax">Rvalues::from_rule</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">), </span><span class="identifier-syntax">Task::language_of_syntax</span><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="function-syntax">Rules::by_name</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">Rules::by_name</span></span>:<br/><a href="2-rls.html#SP2">&#167;2</a>, <a href="2-rls.html#SP6">&#167;6</a><br/>Phrase Usage - <a href="3-pu.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="function-syntax">Rules::by_name</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">Rules::by_name</span></span>:<br/><a href="2-rls.html#SP2">&#167;2</a>, <a href="2-rls.html#SP6">&#167;6</a><br/>Phrase Usage - <a href="3-pu.html#SP2">&#167;2</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::empty</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="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Articles::remove_the</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">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">mc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RULE_MC</span><span class="plain-syntax">;</span>
@ -318,11 +318,11 @@ of a <a href="3-phr.html#SP3" class="internal">phrase</a> as follows:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::set_imperative_definition</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">Rules::set_imperative_definition</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::set_imperative_definition</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">Rules::set_imperative_definition</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">R</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="function-syntax">Rules::get_imperative_definition</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">Rules::get_imperative_definition</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP6">&#167;6</a><br/>Booking Lists - <a href="2-bl.html#SP7">&#167;7</a><br/>Phrase Usage - <a href="3-pu.html#SP3_2">&#167;3.2</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">&#167;8</a><br/>Compile Invocations Inline - <a href="6-cii.html#SP3_1_1_4_12">&#167;3.1.1.4.12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="function-syntax">Rules::get_imperative_definition</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">Rules::get_imperative_definition</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP6">&#167;6</a><br/>Booking Lists - <a href="2-bl.html#SP7">&#167;7</a><br/>Phrase Usage - <a href="3-pu.html#SP2_2">&#167;2.2</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">&#167;8</a><br/>Compile Invocations Inline - <a href="6-cii.html#SP3_1_1_4_12">&#167;3.1.1.4.12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rule</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R</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">R</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -348,7 +348,7 @@ the variables belonging to that activity.
<span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">stacked_variable_owner_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">all_action_processing_vars</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">stacked_variable_owner_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Rules::all_action_processing_variables</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">Rules::all_action_processing_variables</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP18_1_1">&#167;18.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">stacked_variable_owner_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Rules::all_action_processing_variables</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">Rules::all_action_processing_variables</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP17_1_1">&#167;17.1.1</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">all_action_processing_vars</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">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">B</span><span class="plain-syntax"> = </span><a href="2-rlb.html#SP19" class="function-link"><span class="function-syntax">Rulebooks::std</span></a><span class="plain-syntax">(</span><span class="constant-syntax">ACTION_PROCESSING_RB</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">B</span><span class="plain-syntax">) </span><span class="identifier-syntax">all_action_processing_vars</span><span class="plain-syntax"> =</span>

View file

@ -337,7 +337,7 @@ match is shown.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::definite</span><span class="plain-syntax">(</span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">return_kind</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"value"</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">Kinds::Textual::write</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">return_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;/i&gt;"</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">W</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_equation_form</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">W</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::get_equation_form</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i&gt;y&lt;/i&gt;&amp;nbsp;=&amp;nbsp;&lt;b&gt;%+W&lt;/b&gt;(&lt;i&gt;x&lt;/i&gt;)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
@ -397,7 +397,7 @@ of course.
</p>
<pre class="displayed-code all-displayed-code code-font">
<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><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_equation_form</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">W</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::get_equation_form</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
@ -509,7 +509,7 @@ correctly set.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">registration_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">XW</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-dptd.html#SP20" class="function-link"><span class="function-syntax">Phrases::TypeData::Textual::phtd_parse_word_sequence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phtd</span><span class="plain-syntax">, </span><span class="identifier-syntax">XW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-dptd.html#SP20" class="function-link"><span class="function-syntax">Phrases::TypeData::Textual::phtd_parse_word_sequence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phtd</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8_1" class="paragraph-anchor"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find the first comma outside of parentheses, if any exists</span><span class="named-paragraph-number">8.1</span></span><span class="comment-syntax"> =</span>
@ -976,10 +976,11 @@ form the word and token sequences:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::TypeData::Textual::phtd_parse_word_sequence</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">Phrases::TypeData::Textual::phtd_parse_word_sequence</span></span>:<br/><a href="3-dptd.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_type_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phtd</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::TypeData::Textual::phtd_parse_word_sequence</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">Phrases::TypeData::Textual::phtd_parse_word_sequence</span></span>:<br/><a href="3-dptd.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_type_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phtd</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">no_tokens</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">phtd</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">no_words</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">registration_text</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">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> &lt;= </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">word_to_add</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> redundant assignment to keep </span><span class="extract"><span class="extract-syntax">gcc</span></span><span class="comment-syntax"> happy</span>
@ -993,6 +994,7 @@ form the word and token sequences:
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_PhraseTooLong</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"this phrase has too many words"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"and needs to be simplified."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">registration_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::up_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</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="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_sequence</span><span class="plain-syntax">[</span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">no_words</span><span class="plain-syntax">++] = </span><span class="identifier-syntax">word_to_add</span><span class="plain-syntax">;</span>

View file

@ -21,6 +21,7 @@ function togglePopup(material_id) {
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
@ -88,6 +89,7 @@ they define. Some will be rules, some will define To... phrases, and so on.
<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">imperative_defn_family</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">family_name</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">method_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">methods</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax">;</span>
@ -97,27 +99,246 @@ they define. Some will be rules, some will define To... phrases, and so on.
<span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">TO_PHRASE_EFF_family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> "To award (some - number) points: ..."</span>
<span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">RULE_IN_RULEBOOK_EFF_family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> "Before taking a container, ..."</span>
<span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="function-syntax">ImperativeDefinitions::new_family</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="function-syntax">ImperativeDefinitions::new_family</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">ImperativeDefinitions::new_family</span></span>:<br/><a href="3-id.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">family</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">family</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">methods</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Methods::new_set</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">family</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure imperative_defn is accessed in 2/rls, 2/rb, 2/bl, 3/phr, 3/pu, 3/prcd, 3/dptd, 3/tph, 3/tp, 6/cii, 6/cp and here.</li><li>The structure imperative_defn_family is accessed in 3/pu and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b><span class="extract"><span class="extract-syntax">CLAIM_IMP_DEFN_MTID</span></span> is for deciding from the syntax of a preamble whether
this definition should belong to the family or not.
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">CLAIM_IMP_DEFN_MTID</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">VOID_METHOD_TYPE</span><span class="plain-syntax">(</span><span class="constant-syntax">CLAIM_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">f</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax">)</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::identify</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">ImperativeDefinitions::identify</span></span>:<br/><a href="3-id.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">f</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">f</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn_family</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">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">f</span><span class="plain-syntax">, </span><span class="constant-syntax">CLAIM_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::create_families</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax"> = </span><a href="3-id.html#SP1" class="function-link"><span class="function-syntax">ImperativeDefinitions::new_family</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"AS_YET_UNKNOWN_EFF"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DEFINITIONAL_PHRASE_EFF_family</span><span class="plain-syntax"> = </span><a href="3-id.html#SP1" class="function-link"><span class="function-syntax">ImperativeDefinitions::new_family</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"DEFINITIONAL_PHRASE_EFF"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RULE_NOT_IN_RULEBOOK_EFF_family</span><span class="plain-syntax"> = </span><a href="3-id.html#SP1" class="function-link"><span class="function-syntax">ImperativeDefinitions::new_family</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"RULE_NOT_IN_RULEBOOK_EFF"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TO_PHRASE_EFF_family</span><span class="plain-syntax"> = </span><a href="3-id.html#SP1" class="function-link"><span class="function-syntax">ImperativeDefinitions::new_family</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"TO_PHRASE_EFF"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RULE_IN_RULEBOOK_EFF_family</span><span class="plain-syntax"> = </span><a href="3-id.html#SP1" class="function-link"><span class="function-syntax">ImperativeDefinitions::new_family</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"RULE_IN_RULEBOOK_EFF"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DEFINITIONAL_PHRASE_EFF_family</span><span class="plain-syntax"> = </span><a href="3-id.html#SP1" class="function-link"><span class="function-syntax">ImperativeDefinitions::new_family</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"DEFINITIONAL_PHRASE_EFF"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">DEFINITIONAL_PHRASE_EFF_family</span><span class="plain-syntax">, </span><span class="constant-syntax">CLAIM_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="3-id.html#SP5" class="function-link"><span class="function-syntax">ImperativeDefinitions::Defn_claim</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RULE_NOT_IN_RULEBOOK_EFF_family</span><span class="plain-syntax"> = </span><a href="3-id.html#SP1" class="function-link"><span class="function-syntax">ImperativeDefinitions::new_family</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"RULE_NOT_IN_RULEBOOK_EFF"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">RULE_NOT_IN_RULEBOOK_EFF_family</span><span class="plain-syntax">, </span><span class="constant-syntax">CLAIM_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="3-id.html#SP6" class="function-link"><span class="function-syntax">ImperativeDefinitions::RNIR_claim</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TO_PHRASE_EFF_family</span><span class="plain-syntax"> = </span><a href="3-id.html#SP1" class="function-link"><span class="function-syntax">ImperativeDefinitions::new_family</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"TO_PHRASE_EFF"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">TO_PHRASE_EFF_family</span><span class="plain-syntax">, </span><span class="constant-syntax">CLAIM_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="3-id.html#SP6_1" class="function-link"><span class="function-syntax">ImperativeDefinitions::To_claim</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RULE_IN_RULEBOOK_EFF_family</span><span class="plain-syntax"> = </span><a href="3-id.html#SP1" class="function-link"><span class="function-syntax">ImperativeDefinitions::new_family</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"RULE_IN_RULEBOOK_EFF"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">RULE_IN_RULEBOOK_EFF_family</span><span class="plain-syntax">, </span><span class="constant-syntax">CLAIM_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="3-id.html#SP8" class="function-link"><span class="function-syntax">ImperativeDefinitions::RIR_claim</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;definition-preamble&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">definition</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { -, DEFINITIONAL_PHRASE_EFF_family }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::Defn_claim</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">ImperativeDefinitions::Defn_claim</span></span>:<br/><a href="3-id.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</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;definition-preamble&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">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">DEFINITIONAL_PHRASE_EFF_family</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">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">) == </span><span class="identifier-syntax">IMPERATIVE_NT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ImperativeSubtrees::accept_body</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</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">Node::set_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">, </span><span class="identifier-syntax">DEFN_CONT_NT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Phrases::Adjectives::look_for_headers</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b></p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;rnir-preamble&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">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</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="3-id.html#SP6_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NamelessRule problem</span><span class="named-paragraph-number">6.3</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</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="3-id.html#SP6_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UnarticledRule problem</span><span class="named-paragraph-number">6.4</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rules</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="3-id.html#SP6_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_PluralisedRule problem</span><span class="named-paragraph-number">6.5</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;event-rule-preamble&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { FALSE, - }</span>
<span class="Preform-reserved-syntax">void</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">ImperativeDefinitions::RNIR_claim</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="Preform-comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="Preform-function-syntax">ImperativeDefinitions::RNIR_claim</span></span>:<br/><a href="3-id.html#SP3">&#167;3</a></span></button><span class="Preform-plain-syntax">(</span><span class="Preform-reserved-syntax">imperative_defn_family</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">self</span><span class="Preform-plain-syntax">, </span><span class="Preform-reserved-syntax">imperative_defn</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">id</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">wording</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Node::get_text</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">id</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">at</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-function-syntax">&lt;rnir-preamble&gt;</span><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-identifier-syntax">id</span><span class="Preform-plain-syntax">-&gt;</span><span class="Preform-element-syntax">family</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">RULE_NOT_IN_RULEBOOK_EFF_family</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-function-syntax">&lt;&lt;r&gt;&gt;</span><span class="Preform-plain-syntax">) {</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">wording</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">RW</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">GET_RW</span><span class="Preform-plain-syntax">(</span><span class="Preform-function-syntax">&lt;rnir-preamble&gt;</span><span class="Preform-plain-syntax">, </span><span class="Preform-constant-syntax">1</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><a href="2-rls.html#SP3" class="function-link"><span class="Preform-function-syntax">Rules::vet_name</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">RW</span><span class="Preform-plain-syntax">)) </span><a href="2-rls.html#SP2" class="function-link"><span class="Preform-function-syntax">Rules::obtain</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">RW</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>
<span class="Preform-plain-syntax"> }</span>
<span class="Preform-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b></p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;to-phrase-preamble&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">to</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="3-id.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BareTo problem</span><span class="named-paragraph-number">7.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</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-constant-syntax">called</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">|</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="3-id.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_DontCallPhrasesWithCalled problem</span><span class="named-paragraph-number">7.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{###</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">function}</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">inverse</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">###</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, -, &lt;&lt;written&gt;&gt; = TRUE, &lt;&lt;inverted&gt;&gt; = TRUE }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{###</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">function}</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"> { TRUE, -, &lt;&lt;written&gt;&gt; = TRUE, &lt;&lt;inverted&gt;&gt; = FALSE }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</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">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { TRUE, -, &lt;&lt;written&gt;&gt; = FALSE }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</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, - }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BareTo problem</span><span class="named-paragraph-number">7.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_BareTo</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'to' what? No name is given"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"which means that this would not define a new phrase."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, - };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_DontCallPhrasesWithCalled problem</span><span class="named-paragraph-number">7.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_DontCallPhrasesWithCalled</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"phrases aren't named using 'called'"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"and instead use 'this is...'. For example, 'To salute (called saluting)' "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"isn't allowed, but 'To salute (this is saluting)' is."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, - };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>&#167;6.1. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::To_claim</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">ImperativeDefinitions::To_claim</span></span>:<br/><a href="3-id.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</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;to-phrase-preamble&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">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TO_PHRASE_EFF_family</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="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">RW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;to-phrase-preamble&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">2</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;s-type-expression&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">RW</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_PhraseNameDuplicated</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"that name for this new phrase is not allowed"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"because it already has a meaning."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-pav.html#SP3" class="function-link"><span class="function-syntax">Phrases::Constants::parse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">RW</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="3-pav.html#SP2" class="function-link"><span class="function-syntax">Phrases::Constants::create</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">RW</span><span class="plain-syntax">, </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;to-phrase-preamble&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="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6_2" class="paragraph-anchor"></a><b>&#167;6.2. </b></p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;rir-preamble&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule}</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"> { TRUE, - }</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-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP6_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NamelessRule problem</span><span class="named-paragraph-number">6.3</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP6_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UnarticledRule problem</span><span class="named-paragraph-number">6.4</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rules</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP6_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_PluralisedRule problem</span><span class="named-paragraph-number">6.5</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { FALSE, - }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_3" class="paragraph-anchor"></a><b>&#167;6.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NamelessRule problem</span><span class="named-paragraph-number">6.3</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_NamelessRule</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"there are many rules in Inform"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"so you need to give a name: 'this is the abolish dancing rule', say, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"not just 'this is the rule'."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, - }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP6">&#167;6</a>, <a href="3-id.html#SP6_2">&#167;6.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_4" class="paragraph-anchor"></a><b>&#167;6.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_UnarticledRule problem</span><span class="named-paragraph-number">6.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_UnarticledRule</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"a rule must be given a definite name"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"which begins with 'the', just to emphasise that it is the only one "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"with this name: 'this is the promote dancing rule', say, not just "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'this is promote dancing rule'."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, - }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP6">&#167;6</a>, <a href="3-id.html#SP6_2">&#167;6.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP6_5" class="paragraph-anchor"></a><b>&#167;6.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_PluralisedRule problem</span><span class="named-paragraph-number">6.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_PluralisedRule</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"a rule must be given a definite name ending in 'rule' not 'rules'"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"since the plural is only used for rulebooks, which can of course "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"contain many rules at once."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, - }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP6">&#167;6</a>, <a href="3-id.html#SP6_2">&#167;6.2</a>.</li></ul>
<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">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::RIR_claim</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">ImperativeDefinitions::RIR_claim</span></span>:<br/><a href="3-id.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</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;rir-preamble&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">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RULE_IN_RULEBOOK_EFF_family</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="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">RW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;rir-preamble&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">2</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-rls.html#SP3" class="function-link"><span class="function-syntax">Rules::vet_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">RW</span><span class="plain-syntax">)) </span><a href="2-rls.html#SP2" class="function-link"><span class="function-syntax">Rules::obtain</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">RW</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</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">imperative_defn</span><span class="plain-syntax"> *</span><span class="function-syntax">ImperativeDefinitions::make_imperative_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">defines</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">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-id.html#SP2" class="function-link"><span class="function-syntax">ImperativeDefinitions::identify</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</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">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>Here we look at the preamble for a rule name: if we find it, we declare this
as a rule.
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;rule-preamble-name&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">{to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{###</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">function}</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">inverse</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">###</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 2, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{###</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">function}</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"> { 2, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</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">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 2, - }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule}</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"> { -1, - }</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-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule}</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"> { -2, - }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::find_phrases_and_rules</span><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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">initial_problem_count</span><span class="plain-syntax"> = </span><span class="identifier-syntax">problem_count</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">progress_target</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">progress_made</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">SyntaxTree::traverse_intp</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><a href="3-id.html#SP1" class="function-link"><span class="function-syntax">ImperativeDefinitions::visit_to_count</span></a><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><span class="identifier-syntax">progress_target</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SyntaxTree::traverse_intp_intp</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><a href="3-id.html#SP1" class="function-link"><span class="function-syntax">ImperativeDefinitions::visit_to_create</span></a><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><span class="identifier-syntax">progress_target</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">progress_made</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">total</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NUMBER_CREATED</span><span class="plain-syntax">(</span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax">), </span><span class="identifier-syntax">created</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">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">created</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">created</span><span class="plain-syntax"> % </span><span class="constant-syntax">10</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">ProgressBar::update</span><span class="plain-syntax">(3,</span>
<span class="plain-syntax"> ((</span><span class="reserved-syntax">float</span><span class="plain-syntax">) (</span><span class="identifier-syntax">created</span><span class="plain-syntax">))/((</span><span class="reserved-syntax">float</span><span class="plain-syntax">) (</span><span class="identifier-syntax">total</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-phr.html#SP5" class="function-link"><span class="function-syntax">Phrases::create_from_preamble</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</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">initial_problem_count</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">problem_count</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-tph.html#SP5" class="function-link"><span class="function-syntax">Routines::ToPhrases::register_all</span></a><span class="plain-syntax">();</span>
@ -128,7 +349,7 @@ they define. Some will be rules, some will define To... phrases, and so on.
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::make_current</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">runtime_context_data</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP18" class="function-link"><span class="function-syntax">Phrases::Usage::to_runtime_context_data</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP17" class="function-link"><span class="function-syntax">Phrases::Usage::to_runtime_context_data</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::remove_current</span></a><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">initial_problem_count</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">problem_count</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
@ -136,36 +357,15 @@ they define. Some will be rules, some will define To... phrases, and so on.
<span class="plain-syntax"> </span><a href="2-rb.html#SP6" class="function-link"><span class="function-syntax">RuleBookings::make_automatic_placements</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">initial_problem_count</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">problem_count</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">SyntaxTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><a href="3-id.html#SP2" class="function-link"><span class="function-syntax">ImperativeDefinitions::visit_to_parse_placements</span></a><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">ImperativeDefinitions::visit_to_count</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">progress_target</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> (*</span><span class="identifier-syntax">progress_target</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">ImperativeDefinitions::visit_to_create</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">progress_target</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">progress_made</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> (*</span><span class="identifier-syntax">progress_made</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">progress_made</span><span class="plain-syntax">) % </span><span class="constant-syntax">10</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">ProgressBar::update</span><span class="plain-syntax">(3,</span>
<span class="plain-syntax"> ((</span><span class="reserved-syntax">float</span><span class="plain-syntax">) (*</span><span class="identifier-syntax">progress_made</span><span class="plain-syntax">))/((</span><span class="reserved-syntax">float</span><span class="plain-syntax">) (*</span><span class="identifier-syntax">progress_target</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">IMPERATIVE_NT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">defines</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">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AS_YET_UNKNOWN_EFF_family</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;rule-preamble&gt;(Node::get_text(id-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">))) </span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</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><a href="3-phr.html#SP5" class="function-link"><span class="function-syntax">Phrases::create_from_preamble</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SyntaxTree::traverse</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><a href="3-id.html#SP12" class="function-link"><span class="function-syntax">ImperativeDefinitions::visit_to_parse_placements</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure imperative_defn is accessed in 2/rls, 2/rb, 2/bl, 3/phr, 3/pu, 3/prcd, 3/dptd, 3/tph, 3/tp, 6/cii, 6/cp and here.</li><li>The structure imperative_defn_family is accessed in 3/pu and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">TRAVERSE_FOR_RULE_FILING_SMFT</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::visit_to_parse_placements</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">ImperativeDefinitions::visit_to_parse_placements</span></span>:<br/><a href="3-id.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::visit_to_parse_placements</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">ImperativeDefinitions::visit_to_parse_placements</span></span>:<br/><a href="3-id.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">SENTENCE_NT</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">) == </span><span class="identifier-syntax">VERB_NT</span><span class="plain-syntax">)) {</span>
@ -174,7 +374,7 @@ they define. Some will be rules, some will define To... phrases, and so on.
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>The rulebooks are now complete and final. It is time to
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>The rulebooks are now complete and final. It is time to
compile the Inter code which will provide the run-time definitions of all
these phrases. This will be a long task, and we can only do most of it now,
because more phrases will appear later.
@ -184,16 +384,16 @@ because more phrases will appear later.
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">total_phrases_to_compile</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">total_phrases_compiled</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::compile_first_block</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Count up the scale of the task</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Compile definitions of rules in rulebooks</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP3_3" class="named-paragraph-link"><span class="named-paragraph">Compile definitions of rules left out of rulebooks</span><span class="named-paragraph-number">3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP3_4" class="named-paragraph-link"><span class="named-paragraph">Compile phrases which define adjectives</span><span class="named-paragraph-number">3.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP3_5" class="named-paragraph-link"><span class="named-paragraph">Mark To... phrases which have definite kinds for future compilation</span><span class="named-paragraph-number">3.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP3_6" class="named-paragraph-link"><span class="named-paragraph">Throw problems for phrases with return kinds too vaguely defined</span><span class="named-paragraph-number">3.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP3_7" class="named-paragraph-link"><span class="named-paragraph">Throw problems for inline phrases named as constants</span><span class="named-paragraph-number">3.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP13_1" class="named-paragraph-link"><span class="named-paragraph">Count up the scale of the task</span><span class="named-paragraph-number">13.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP13_2" class="named-paragraph-link"><span class="named-paragraph">Compile definitions of rules in rulebooks</span><span class="named-paragraph-number">13.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP13_3" class="named-paragraph-link"><span class="named-paragraph">Compile definitions of rules left out of rulebooks</span><span class="named-paragraph-number">13.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP13_4" class="named-paragraph-link"><span class="named-paragraph">Compile phrases which define adjectives</span><span class="named-paragraph-number">13.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP13_5" class="named-paragraph-link"><span class="named-paragraph">Mark To... phrases which have definite kinds for future compilation</span><span class="named-paragraph-number">13.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP13_6" class="named-paragraph-link"><span class="named-paragraph">Throw problems for phrases with return kinds too vaguely defined</span><span class="named-paragraph-number">13.6</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-id.html#SP13_7" class="named-paragraph-link"><span class="named-paragraph">Throw problems for inline phrases named as constants</span><span class="named-paragraph-number">13.7</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Count up the scale of the task</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP13_1" class="paragraph-anchor"></a><b>&#167;13.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Count up the scale of the task</span><span class="named-paragraph-number">13.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -203,8 +403,8 @@ because more phrases will appear later.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at_least_one_compiled_form_needed</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">total_phrases_to_compile</span><span class="plain-syntax">++;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2" class="paragraph-anchor"></a><b>&#167;3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile definitions of rules in rulebooks</span><span class="named-paragraph-number">3.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_2" class="paragraph-anchor"></a><b>&#167;13.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile definitions of rules in rulebooks</span><span class="named-paragraph-number">13.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -213,8 +413,8 @@ because more phrases will appear later.
<span class="plain-syntax"> </span><span class="identifier-syntax">RTRules::compile_rule_phrases</span><span class="plain-syntax">(</span><span class="identifier-syntax">rb</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><span class="identifier-syntax">total_phrases_compiled</span><span class="plain-syntax">, </span><span class="identifier-syntax">total_phrases_to_compile</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_3" class="paragraph-anchor"></a><b>&#167;3.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile definitions of rules left out of rulebooks</span><span class="named-paragraph-number">3.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_3" class="paragraph-anchor"></a><b>&#167;13.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile definitions of rules left out of rulebooks</span><span class="named-paragraph-number">13.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -223,13 +423,13 @@ because more phrases will appear later.
<span class="plain-syntax"> </span><span class="identifier-syntax">RTRules::compile_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><span class="identifier-syntax">total_phrases_compiled</span><span class="plain-syntax">, </span><span class="identifier-syntax">total_phrases_to_compile</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_4" class="paragraph-anchor"></a><b>&#167;3.4. </b>This doesn't compile all adjective definitions, only the ones which supply
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_4" class="paragraph-anchor"></a><b>&#167;13.4. </b>This doesn't compile all adjective definitions, only the ones which supply
a whole multi-step phrase to define them &mdash; a relatively little-used feature
of Inform.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile phrases which define adjectives</span><span class="named-paragraph-number">3.4</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Compile phrases which define adjectives</span><span class="named-paragraph-number">13.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -240,8 +440,8 @@ of Inform.
<span class="plain-syntax"> </span><span class="identifier-syntax">total_phrases_to_compile</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">RTAdjectives::compile_support_code</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_5" class="paragraph-anchor"></a><b>&#167;3.5. </b>As we'll see, it's legal in Inform to define "To..." phrases with vague
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_5" class="paragraph-anchor"></a><b>&#167;13.5. </b>As we'll see, it's legal in Inform to define "To..." phrases with vague
kinds: "To expose (X - a value)", for example. This can't be compiled as
vaguely as the definition implies, since there would be no way to know how
to store X. Instead, for each different kind of X which is actually needed,
@ -255,7 +455,7 @@ request the boring ones with straightforward kinds ("To award (N - a number)
points", say). This is where we do it:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Mark To... phrases which have definite kinds for future compilation</span><span class="named-paragraph-number">3.5</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Mark To... phrases which have definite kinds for future compilation</span><span class="named-paragraph-number">13.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -268,8 +468,8 @@ points", say). This is where we do it:
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_6" class="paragraph-anchor"></a><b>&#167;3.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Throw problems for phrases with return kinds too vaguely defined</span><span class="named-paragraph-number">3.6</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_6" class="paragraph-anchor"></a><b>&#167;13.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Throw problems for phrases with return kinds too vaguely defined</span><span class="named-paragraph-number">13.6</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -308,15 +508,15 @@ points", say). This is where we do it:
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_7" class="paragraph-anchor"></a><b>&#167;3.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Throw problems for inline phrases named as constants</span><span class="named-paragraph-number">3.7</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_7" class="paragraph-anchor"></a><b>&#167;13.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Throw problems for inline phrases named as constants</span><span class="named-paragraph-number">13.7</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">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, </span><span class="reserved-syntax">phrase</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="3-ptd.html#SP25" class="function-link"><span class="function-syntax">Phrases::TypeData::invoked_inline</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::has_name_as_constant</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">)))) {</span>
<span class="plain-syntax"> (</span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::has_name_as_constant</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">)))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><a href="3-phr.html#SP10" class="function-link"><span class="function-syntax">Phrases::declaration_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_NamedInline</span><span class="plain-syntax">));</span>
@ -329,8 +529,8 @@ points", say). This is where we do it:
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>The twilight gathers, but our work is far from done. Recall that we have
<ul class="endnotetexts"><li>This code is used in <a href="3-id.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>The twilight gathers, but our work is far from done. Recall that we have
accumulated compilation requests for "To..." phrases, but haven't actually
acted on them yet.
</p>

View file

@ -98,7 +98,7 @@ own right, a functional-programming sort of device. For example:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Constants::create</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">Phrases::Constants::create</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP8_2_1">&#167;8.2.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">NW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">RW</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Constants::create</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">Phrases::Constants::create</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP6_1">&#167;6.1</a><br/>Phrase Usage - <a href="3-pu.html#SP7_2_1">&#167;7.2.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">NW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">RW</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cphr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">constant_phrase</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">phrase_meant</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> we won't know until later</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">cphr_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> nor this</span>
@ -113,7 +113,7 @@ own right, a functional-programming sort of device. For example:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Constants::parse</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">Phrases::Constants::parse</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP8_2_1">&#167;8.2.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">NW</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Constants::parse</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">Phrases::Constants::parse</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP6_1">&#167;6.1</a><br/>Phrase Usage - <a href="3-pu.html#SP7_2_1">&#167;7.2.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">NW</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;s-value&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Rvalues::is_CONSTANT_construction</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">CON_phrase</span><span class="plain-syntax">)) {</span>
@ -149,7 +149,7 @@ the following takes a patch-it-later approach.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Constants::as_phrase</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">Phrases::Constants::as_phrase</span></span>:<br/><a href="3-pav.html#SP6">&#167;6</a>, <a href="3-pav.html#SP7">&#167;7</a><br/>Phrase Usage - <a href="3-pu.html#SP8_2_1">&#167;8.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cphr</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Constants::as_phrase</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">Phrases::Constants::as_phrase</span></span>:<br/><a href="3-pav.html#SP6">&#167;6</a>, <a href="3-pav.html#SP7">&#167;7</a><br/>Phrase Usage - <a href="3-pu.html#SP7_2_1">&#167;7.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cphr</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">cphr</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">"null cphr"</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">cphr</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">phrase_meant</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">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">;</span>

View file

@ -149,7 +149,7 @@ invocation which is given as verbatim I6.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::create_from_preamble</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">Phrases::create_from_preamble</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::create_from_preamble</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">Phrases::create_from_preamble</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">p</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) != </span><span class="identifier-syntax">IMPERATIVE_NT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"a phrase preamble should be at a IMPERATIVE_NT node"</span><span class="plain-syntax">);</span>
@ -202,14 +202,14 @@ invocation which is given as verbatim I6.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP8" class="function-link"><span class="function-syntax">Phrases::Usage::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">), </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">), </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-phr.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_3" class="paragraph-anchor"></a><b>&#167;5.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Construct the PHTD, find the phrase options, find the documentation reference</span><span class="named-paragraph-number">5.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP10" class="function-link"><span class="function-syntax">Phrases::Usage::get_preamble_text</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">phud</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP9" class="function-link"><span class="function-syntax">Phrases::Usage::get_preamble_text</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">phud</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phtd</span><span class="plain-syntax"> = </span><a href="3-ptd.html#SP9" class="function-link"><span class="function-syntax">Phrases::TypeData::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">inline_wn</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><a href="3-ptd.html#SP25" class="function-link"><span class="function-syntax">Phrases::TypeData::make_inline</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">phtd</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">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TO_PHRASE_EFF_family</span><span class="plain-syntax">) {</span>
@ -272,11 +272,11 @@ inline definitions.
<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">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RULE_IN_RULEBOOK_EFF_family</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-rls.html#SP17" class="function-link"><span class="function-syntax">Rules::request_automatic_placement</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP3" class="function-link"><span class="function-syntax">Phrases::Usage::to_rule</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">), </span><span class="identifier-syntax">id</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP2" class="function-link"><span class="function-syntax">Phrases::Usage::to_rule</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">), </span><span class="identifier-syntax">id</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">compile_with_run_time_debugging</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RULE_NOT_IN_RULEBOOK_EFF_family</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP3" class="function-link"><span class="function-syntax">Phrases::Usage::to_rule</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">), </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP2" class="function-link"><span class="function-syntax">Phrases::Usage::to_rule</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">), </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">compile_with_run_time_debugging</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
@ -314,7 +314,7 @@ of it:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP10" class="function-link"><span class="function-syntax">Phrases::Usage::get_preamble_text</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">phud</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP9" class="function-link"><span class="function-syntax">Phrases::Usage::get_preamble_text</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">phud</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">PHRASE_CREATIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Creating phrase: &lt;%W&gt;\n$U"</span><span class="plain-syntax">, </span><span class="identifier-syntax">XW</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">phud</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_ph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax">);</span>
@ -430,7 +430,7 @@ what number is...", for instance.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::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">Phrases::log</span></span>:<br/>Imperative Module - <a href="1-im.html#SP2">&#167;2</a><br/>To Phrases - <a href="3-tph.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</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">ph</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">"RULE: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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%n"</span><span class="plain-syntax">, </span><a href="3-phr.html#SP10" class="function-link"><span class="function-syntax">Phrases::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP14" class="function-link"><span class="function-syntax">Phrases::Usage::log_rule_name</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::log_rule_name</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">Phrases::log_briefly</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">Phrases::log_briefly</span></span>:<br/>Invocations - <a href="6-inv.html#SP9">&#167;9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">) {</span>
@ -488,7 +488,7 @@ what number is...", for instance.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ph_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::declaration_node</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">Phrases::declaration_node</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP3_6">&#167;3.6</a>, <a href="3-id.html#SP3_7">&#167;3.7</a><br/>Phrase Usage - <a href="3-pu.html#SP8_2_1">&#167;8.2.1</a><br/>To Phrases - <a href="3-tph.html#SP3">&#167;3</a>, <a href="3-tph.html#SP6_1">&#167;6.1</a>, <a href="3-tph.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::declaration_node</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">Phrases::declaration_node</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP13_6">&#167;13.6</a>, <a href="3-id.html#SP13_7">&#167;13.7</a><br/>Phrase Usage - <a href="3-pu.html#SP7_2_1">&#167;7.2.1</a><br/>To Phrases - <a href="3-tph.html#SP3">&#167;3</a>, <a href="3-tph.html#SP6_1">&#167;6.1</a>, <a href="3-tph.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</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">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -503,7 +503,7 @@ response to "requests". All other phrases are compiled just once.
<span class="plain-syntax"> </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">imported</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::compile</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">Phrases::compile</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP3_4">&#167;3.4</a><br/>To Phrases - <a href="3-tph.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">max_i</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::compile</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">Phrases::compile</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP13_4">&#167;13.4</a><br/>To Phrases - <a href="3-tph.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">max_i</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">stacked_variable_owner_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">legible</span><span class="plain-syntax">, </span><span class="reserved-syntax">to_phrase_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">imported</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TO_PHRASE_EFF_family</span><span class="plain-syntax">) {</span>

View file

@ -182,7 +182,7 @@ the following only blanks out a PHRCD structure ready for that to happen.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">ph_runtime_context_data</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Context::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">Phrases::Context::new</span></span>:<br/>Phrases - <a href="3-phr.html#SP5_6">&#167;5.6</a><br/>Phrase Usage - <a href="3-pu.html#SP18">&#167;18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">ph_runtime_context_data</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Context::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">Phrases::Context::new</span></span>:<br/>Phrases - <a href="3-phr.html#SP5_6">&#167;5.6</a><br/>Phrase Usage - <a href="3-pu.html#SP17">&#167;17</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">ph_runtime_context_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="identifier-syntax">activity_context</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">phrcd</span><span class="plain-syntax">.</span><span class="identifier-syntax">activity_where</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -735,7 +735,7 @@ with the default outcome return (see above).
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure activity_list is accessed in 2/rlb, 2/act, 3/phr, 3/tph, 3/tp, 4/lv, 4/sv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li></ul>
<ul class="endnotetexts"><li>The structure activity_list is accessed in 2/rlb, 2/act, 3/id, 3/phr, 3/tph, 3/tp, 4/lv, 4/sv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>Run-time contexts are seen in the "while" clauses at the end of rules.
For example:
</p>

View file

@ -326,7 +326,7 @@ whistles and doodads which regular phrases don't.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">manner_of_return</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::TypeData::get_return_kind</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">Phrases::TypeData::get_return_kind</span></span>:<br/><a href="3-ptd.html#SP12">&#167;12</a><br/>Imperative Definitions - <a href="3-id.html#SP3_6">&#167;3.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_type_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phtd</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::TypeData::get_return_kind</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">Phrases::TypeData::get_return_kind</span></span>:<br/><a href="3-ptd.html#SP12">&#167;12</a><br/>Imperative Definitions - <a href="3-id.html#SP13_6">&#167;13.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_type_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phtd</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">phtd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">manner_of_return</span><span class="plain-syntax"> == </span><span class="constant-syntax">DECIDES_CONDITION_MOR</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K_truth_state</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">return_kind</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -403,7 +403,7 @@ logic, since one argument is in effect a kind rather than a value.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::TypeData::kind</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">Phrases::TypeData::kind</span></span>:<br/><a href="3-ptd.html#SP13">&#167;13</a><br/>Imperative Definitions - <a href="3-id.html#SP3_5">&#167;3.5</a><br/>Phrases - <a href="3-phr.html#SP5_5">&#167;5.5</a><br/>Describing Phrase Type Data - <a href="3-dptd.html#SP6_5">&#167;6.5</a><br/>Phrases as Values - <a href="3-pav.html#SP4">&#167;4</a><br/>Parse Invocations - <a href="6-pi.html#SP3">&#167;3</a><br/>Compile Phrases - <a href="6-cp.html#SP2_2">&#167;2.2</a><br/>Compile Solutions to Equations - <a href="6-cste.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_type_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phtd</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::TypeData::kind</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">Phrases::TypeData::kind</span></span>:<br/><a href="3-ptd.html#SP13">&#167;13</a><br/>Imperative Definitions - <a href="3-id.html#SP13_5">&#167;13.5</a><br/>Phrases - <a href="3-phr.html#SP5_5">&#167;5.5</a><br/>Describing Phrase Type Data - <a href="3-dptd.html#SP6_5">&#167;6.5</a><br/>Phrases as Values - <a href="3-pav.html#SP4">&#167;4</a><br/>Parse Invocations - <a href="6-pi.html#SP3">&#167;3</a><br/>Compile Phrases - <a href="6-cp.html#SP2_2">&#167;2.2</a><br/>Compile Solutions to Equations - <a href="6-cste.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_type_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phtd</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">argument_kinds</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_TOKENS_PER_PHRASE</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="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">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;phtd-&gt;</span><span class="element-syntax">no_tokens</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
@ -427,7 +427,7 @@ logic, since one argument is in effect a kind rather than a value.)
</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">Phrases::TypeData::tokens_contain_variable</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">Phrases::TypeData::tokens_contain_variable</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP3_6">&#167;3.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_type_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phtd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">v</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::TypeData::tokens_contain_variable</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">Phrases::TypeData::tokens_contain_variable</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP13_6">&#167;13.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_type_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phtd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">v</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;phtd-&gt;</span><span class="element-syntax">no_tokens</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::involves_var</span><span class="plain-syntax">(</span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">token_sequence</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">token_kind</span><span class="plain-syntax">, </span><span class="identifier-syntax">v</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>
@ -918,7 +918,7 @@ by than name.
<span class="plain-syntax"> </span><span class="identifier-syntax">phtd</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">as_inline</span><span class="plain-syntax">.</span><span class="element-syntax">invoked_inline_not_as_call</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::TypeData::invoked_inline</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Phrases::TypeData::invoked_inline</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP3_7">&#167;3.7</a><br/>To Phrases - <a href="3-tph.html#SP7">&#167;7</a><br/>Compile Invocations - <a href="6-ci.html#SP2_1_1_1">&#167;2.1.1.1</a>, <a href="6-ci.html#SP3_1">&#167;3.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::TypeData::invoked_inline</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Phrases::TypeData::invoked_inline</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP13_7">&#167;13.7</a><br/>To Phrases - <a href="3-tph.html#SP7">&#167;7</a><br/>Compile Invocations - <a href="6-ci.html#SP2_1_1_1">&#167;2.1.1.1</a>, <a href="6-ci.html#SP3_1">&#167;3.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</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">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type_data</span><span class="plain-syntax">.</span><span class="element-syntax">as_inline</span><span class="plain-syntax">.</span><span class="element-syntax">invoked_inline_not_as_call</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -935,7 +935,7 @@ by than name.
<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">Phrases::TypeData::arithmetic_operation</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">Phrases::TypeData::arithmetic_operation</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP3_6">&#167;3.6</a><br/>Compile Invocations Inline - <a href="6-cii.html#SP3_5_7">&#167;3.5.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::TypeData::arithmetic_operation</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">Phrases::TypeData::arithmetic_operation</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP13_6">&#167;13.6</a><br/>Compile Invocations Inline - <a href="6-cii.html#SP3_5_7">&#167;3.5.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</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">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type_data</span><span class="plain-syntax">.</span><span class="element-syntax">as_inline</span><span class="plain-syntax">.</span><span class="element-syntax">arithmetical_operation</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -73,7 +73,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">imperative</a></li><li><a href="index.html#3">Chapter 3: Phrases</a></li><li><b>Phrase Usage</b></li></ul></div>
<p class="purpose">To parse the preamble of a phrase declaration to a phrase usage (PHUD) structure containing a mostly textual representation of the conditions for its usage.</p>
<ul class="toc"><li><a href="3-pu.html#SP2">&#167;2. The mid-morning predeclarations</a></li><li><a href="3-pu.html#SP3">&#167;3. The late-morning creations</a></li><li><a href="3-pu.html#SP4">&#167;4. Parsing</a></li><li><a href="3-pu.html#SP10">&#167;10. Extracting the stem</a></li><li><a href="3-pu.html#SP13">&#167;13. Miscellaneous</a></li><li><a href="3-pu.html#SP14">&#167;14. Logging and indexing</a></li><li><a href="3-pu.html#SP17">&#167;17. How the PHUD translates into a PHRCD</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="3-pu.html#SP2">&#167;2. The late-morning creations</a></li><li><a href="3-pu.html#SP3">&#167;3. Parsing</a></li><li><a href="3-pu.html#SP9">&#167;9. Extracting the stem</a></li><li><a href="3-pu.html#SP12">&#167;12. Miscellaneous</a></li><li><a href="3-pu.html#SP13">&#167;13. Logging and indexing</a></li><li><a href="3-pu.html#SP16">&#167;16. How the PHUD translates into a PHRCD</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>And here is the usage data.
</p>
@ -101,20 +101,7 @@ function togglePopup(material_id) {
<span class="plain-syntax">} </span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure ph_usage_data is accessed in 3/id, 3/phr, 3/dptd, 3/pav, 3/tph, 3/tp, 6/cp and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. The mid-morning predeclarations. </b>Recall that early in Inform's run, we make a coarse parsing of the preamble
of each rule to look for a name: if we find it, we declare it as a rule;
and in any event we throw away the PHUD produced. (We will make a better one
just before noon.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::predeclare_name_in</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP8" class="function-link"><span class="function-syntax">Phrases::Usage::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">), </span><span class="identifier-syntax">TRUE</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">explicit_name</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="2-rls.html#SP2" class="function-link"><span class="function-syntax">Rules::obtain</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">explicit_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. The late-morning creations. </b>A little later on, we've made a rule phrase, and it now has a proper PHUD.
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. The late-morning creations. </b>A little later on, we've made a rule phrase, and it now has a proper PHUD.
If the rule is an anonymous one, such as:
</p>
@ -138,11 +125,11 @@ connect this existing one to the phrase.
<span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Usage::to_rule</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">Phrases::Usage::to_rule</span></span>:<br/>Phrases - <a href="3-phr.html#SP5_7">&#167;5.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phud</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">explicitly</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Find the name of the phrase, and whether or not it's explicitly given</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Find the name of the phrase, and whether or not it's explicitly given</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><a href="2-rls.html#SP5" class="function-link"><span class="function-syntax">Rules::by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Check that this isn't duplicating the name of a rule already made</span><span class="named-paragraph-number">3.2</span></a></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="named-paragraph-container code-font"><a href="3-pu.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Check that this isn't duplicating the name of a rule already made</span><span class="named-paragraph-number">2.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><a href="2-rls.html#SP2" class="function-link"><span class="function-syntax">Rules::obtain</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">explicitly</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::empty</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">Hierarchy::markup_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">rule_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">RULE_NAME_HMD</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">));</span>
@ -151,12 +138,12 @@ connect this existing one to the phrase.
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RTRules::package</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ph_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::make_localised_iname_in</span><span class="plain-syntax">(</span><span class="identifier-syntax">RULE_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_module</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP3_3" class="named-paragraph-link"><span class="named-paragraph">Do some tedious business for indexing the rule later on</span><span class="named-paragraph-number">3.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP2_3" class="named-paragraph-link"><span class="named-paragraph">Do some tedious business for indexing the rule later on</span><span class="named-paragraph-number">2.3</span></a></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">R</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find the name of the phrase, and whether or not it's explicitly given</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>&#167;2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Find the name of the phrase, and whether or not it's explicitly given</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -167,8 +154,8 @@ connect this existing one to the phrase.
<span class="plain-syntax"> </span><span class="identifier-syntax">explicitly</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2" class="paragraph-anchor"></a><b>&#167;3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that this isn't duplicating the name of a rule already made</span><span class="named-paragraph-number">3.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>&#167;2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that this isn't duplicating the name of a rule already made</span><span class="named-paragraph-number">2.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -183,11 +170,11 @@ connect this existing one to the phrase.
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_3" class="paragraph-anchor"></a><b>&#167;3.3. </b>This is simply to make the rule's entry in the Index more helpful.
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_3" class="paragraph-anchor"></a><b>&#167;2.3. </b>This is simply to make the rule's entry in the Index more helpful.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Do some tedious business for indexing the rule later on</span><span class="named-paragraph-number">3.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Do some tedious business for indexing the rule later on</span><span class="named-paragraph-number">2.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -201,8 +188,8 @@ connect this existing one to the phrase.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">IXRules::set_italicised_index_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">IX</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Parsing. </b>For our purposes here, phrase definitions and rules are the same thing. Inform
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Parsing. </b>For our purposes here, phrase definitions and rules are the same thing. Inform
detects these from the punctuation used, not from their wording, and divides
them into a "preamble" (the part before the colon, or in limited cases a
comma) and a "body". Early on in Inform's run, we parse the preamble in
@ -214,79 +201,24 @@ just enough from the wording to tell what sort of rule/phrase is to follow.
<span class="Preform-function-syntax">&lt;rule-preamble&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">definition</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"> { -, DEFINITIONAL_PHRASE_EFF_family }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule}</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"> { -, RULE_NOT_IN_RULEBOOK_EFF_family, &lt;&lt;event-time&gt;&gt; = NOT_AN_EVENT, &lt;&lt;written&gt;&gt; = FALSE }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</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="3-pu.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NamelessRule problem</span><span class="named-paragraph-number">4.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</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="3-pu.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UnarticledRule problem</span><span class="named-paragraph-number">4.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rules</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="3-pu.html#SP4_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_PluralisedRule problem</span><span class="named-paragraph-number">4.3</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</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 production }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</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 production }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rules</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 production }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;event-rule-preamble&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"> { -, RULE_NOT_IN_RULEBOOK_EFF_family, &lt;&lt;event-time&gt;&gt; = R[1] }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</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="3-pu.html#SP4_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BareTo problem</span><span class="named-paragraph-number">4.4</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</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-constant-syntax">called</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">|</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="3-pu.html#SP4_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_DontCallPhrasesWithCalled problem</span><span class="named-paragraph-number">4.5</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</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 production }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</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-constant-syntax">called</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">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { fail production }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{###</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">function}</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">inverse</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">###</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { -, TO_PHRASE_EFF_family, &lt;&lt;named&gt;&gt; = TRUE, &lt;&lt;written&gt;&gt; = TRUE, &lt;&lt;inverted&gt;&gt; = TRUE }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{###</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">function}</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"> { -, TO_PHRASE_EFF_family, &lt;&lt;named&gt;&gt; = TRUE, &lt;&lt;written&gt;&gt; = TRUE, &lt;&lt;inverted&gt;&gt; = FALSE }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</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">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { -, TO_PHRASE_EFF_family, &lt;&lt;named&gt;&gt; = TRUE, &lt;&lt;written&gt;&gt; = FALSE }</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</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"> { -, TO_PHRASE_EFF_family, &lt;&lt;named&gt;&gt; = FALSE }</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-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule}</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"> { -, RULE_IN_RULEBOOK_EFF_family, &lt;&lt;named&gt;&gt; = TRUE, &lt;&lt;written&gt;&gt; = FALSE }</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-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NamelessRule problem</span><span class="named-paragraph-number">4.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UnarticledRule problem</span><span class="named-paragraph-number">4.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rules</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP4_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_PluralisedRule problem</span><span class="named-paragraph-number">4.3</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</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 production }</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-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</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 production }</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-constant-syntax">this</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">is</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rules</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 production }</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"> { -, RULE_IN_RULEBOOK_EFF_family, &lt;&lt;named&gt;&gt; = FALSE }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NamelessRule problem</span><span class="named-paragraph-number">4.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_NamelessRule</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"there are many rules in Inform"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"so you need to give a name: 'this is the abolish dancing rule', say, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"not just 'this is the rule'."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { -, </span><span class="identifier-syntax">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP4">&#167;4</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>&#167;4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_UnarticledRule problem</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_UnarticledRule</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"a rule must be given a definite name"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"which begins with 'the', just to emphasise that it is the only one "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"with this name: 'this is the promote dancing rule', say, not just "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'this is promote dancing rule'."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { -, </span><span class="identifier-syntax">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP4">&#167;4</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP4_3" class="paragraph-anchor"></a><b>&#167;4.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_PluralisedRule problem</span><span class="named-paragraph-number">4.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_PluralisedRule</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"a rule must be given a definite name ending in 'rule' not 'rules'"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"since the plural is only used for rulebooks, which can of course "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"contain many rules at once."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { -, </span><span class="identifier-syntax">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP4">&#167;4</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4" class="paragraph-anchor"></a><b>&#167;4.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BareTo problem</span><span class="named-paragraph-number">4.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_BareTo</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'to' what? No name is given"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"which means that this would not define a new phrase."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { -, </span><span class="identifier-syntax">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_5" class="paragraph-anchor"></a><b>&#167;4.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_DontCallPhrasesWithCalled problem</span><span class="named-paragraph-number">4.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_DontCallPhrasesWithCalled</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"phrases aren't named using 'called'"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"and instead use 'this is...'. For example, 'To salute (called saluting)' "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"isn't allowed, but 'To salute (this is saluting)' is."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> ==&gt; { -, </span><span class="identifier-syntax">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax"> };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>As a safety measure, to avoid ambiguities, Inform only allows one phrase
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>As a safety measure, to avoid ambiguities, Inform only allows one phrase
definition to begin with "now". It recognises such phrases as those whose
preambles match:
</p>
@ -296,7 +228,7 @@ preambles match:
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">now</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>In basic mode (only), the To phrase "to begin" acts as something like
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>In basic mode (only), the To phrase "to begin" acts as something like
<span class="extract"><span class="Preform-extract-syntax">main</span></span> in a C-like language, so we need to take note of where it's defined:
</p>
@ -305,7 +237,7 @@ preambles match:
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">begin</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>Much later on, Inform returns to the definition. If the preamble matches
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Much later on, Inform returns to the definition. If the preamble matches
either of the final two productions of &lt;rule-preamble&gt;, then we definitely
have a rule rather than a phrase definition or a timed event; and in that
case the rule's preamble (without its name, if given) has to match the
@ -335,7 +267,7 @@ following grammar. (Parsing this is "fine mode".)
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { FALSE, - }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>The following turns the preamble text into a PHUD. It can be used as often
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>The following turns the preamble text into a PHUD. It can be used as often
as necessary in "coarse mode", but should be run once and once only on any
given phrase when in "fine mode".
</p>
@ -352,21 +284,21 @@ effects &mdash; see below.)
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_now_phrases</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::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">Phrases::Usage::new</span></span>:<br/><a href="3-pu.html#SP2">&#167;2</a><br/>Phrases - <a href="3-phr.html#SP5_2">&#167;5.2</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">coarse_mode</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::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">Phrases::Usage::new</span></span>:<br/>Phrases - <a href="3-phr.html#SP5_2">&#167;5.2</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">coarse_mode</span><span class="plain-syntax">, </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Empty the PHUD</span><span class="named-paragraph-number">8.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Empty the PHUD</span><span class="named-paragraph-number">7.1</span></a></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;rule-preamble&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="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">family</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TO_PHRASE_EFF_family</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">The preamble parses to a To phrase</span><span class="named-paragraph-number">8.2</span></a></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">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RULE_IN_RULEBOOK_EFF_family</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP8_3" class="named-paragraph-link"><span class="named-paragraph">The preamble parses to a rule with a specified rulebook</span><span class="named-paragraph-number">8.3</span></a></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">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RULE_NOT_IN_RULEBOOK_EFF_family</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP8_4" class="named-paragraph-link"><span class="named-paragraph">The preamble parses to a rule with no specified rulebook</span><span class="named-paragraph-number">8.4</span></a></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">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TO_PHRASE_EFF_family</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">The preamble parses to a To phrase</span><span class="named-paragraph-number">7.2</span></a></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">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RULE_IN_RULEBOOK_EFF_family</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP7_3" class="named-paragraph-link"><span class="named-paragraph">The preamble parses to a rule with a specified rulebook</span><span class="named-paragraph-number">7.3</span></a></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">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RULE_NOT_IN_RULEBOOK_EFF_family</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP7_4" class="named-paragraph-link"><span class="named-paragraph">The preamble parses to a rule with no specified rulebook</span><span class="named-paragraph-number">7.4</span></a></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">phud</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8_1" class="paragraph-anchor"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Empty the PHUD</span><span class="named-paragraph-number">8.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Empty the PHUD</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -389,16 +321,16 @@ effects &mdash; see below.)
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">owning_rulebook_placement</span><span class="plain-syntax"> = </span><span class="constant-syntax">MIDDLE_PLACEMENT</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">explicit_name_for_inverse</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_2" class="paragraph-anchor"></a><b>&#167;8.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The preamble parses to a To phrase</span><span class="named-paragraph-number">8.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The preamble parses to a To phrase</span><span class="named-paragraph-number">7.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">rule_preamble</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;&lt;named&gt;&gt;</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP8_2_1" class="named-paragraph-link"><span class="named-paragraph">The preamble parses to a named To phrase</span><span class="named-paragraph-number">8.2.1</span></a></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;named&gt;&gt;</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP7_2_1" class="named-paragraph-link"><span class="named-paragraph">The preamble parses to a named To phrase</span><span class="named-paragraph-number">7.2.1</span></a></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;now-phrase-preamble&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="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">coarse_mode</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">no_now_phrases</span><span class="plain-syntax">++ == </span><span class="constant-syntax">1</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">no_now_phrases</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">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_RedefinedNow</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"creating new variants on 'now' is not allowed"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"because 'now' plays a special role in the language. "</span>
@ -411,13 +343,13 @@ effects &mdash; see below.)
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">to_begin</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_2_1" class="paragraph-anchor"></a><b>&#167;8.2.1. </b>When we parse a named phrase in coarse mode, we need to make sure that
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2_1" class="paragraph-anchor"></a><b>&#167;7.2.1. </b>When we parse a named phrase in coarse mode, we need to make sure that
name is registered as a constant value; when we parse it again in fine
mode, we can get that value back again if we look it up by name.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The preamble parses to a named To phrase</span><span class="named-paragraph-number">8.2.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The preamble parses to a named To phrase</span><span class="named-paragraph-number">7.2.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -463,8 +395,8 @@ mode, we can get that value back again if we look it up by name.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">rule_preamble</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RW</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP8_2">&#167;8.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3" class="paragraph-anchor"></a><b>&#167;8.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The preamble parses to a rule with a specified rulebook</span><span class="named-paragraph-number">8.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP7_2">&#167;7.2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_3" class="paragraph-anchor"></a><b>&#167;7.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The preamble parses to a rule with a specified rulebook</span><span class="named-paragraph-number">7.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -472,10 +404,10 @@ mode, we can get that value back again if we look it up by name.
<span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;rule-preamble&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">phud</span><span class="plain-syntax">.</span><span class="element-syntax">explicit_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;rule-preamble&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">2</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">coarse_mode</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP8_3_1" class="named-paragraph-link"><span class="named-paragraph">Parse the rulebook stem in fine mode</span><span class="named-paragraph-number">8.3.1</span></a></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">coarse_mode</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP7_3_1" class="named-paragraph-link"><span class="named-paragraph">Parse the rulebook stem in fine mode</span><span class="named-paragraph-number">7.3.1</span></a></span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_4" class="paragraph-anchor"></a><b>&#167;8.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The preamble parses to a rule with no specified rulebook</span><span class="named-paragraph-number">8.4</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_4" class="paragraph-anchor"></a><b>&#167;7.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">The preamble parses to a rule with no specified rulebook</span><span class="named-paragraph-number">7.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -489,8 +421,8 @@ mode, we can get that value back again if we look it up by name.
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">event_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;event-rule-preamble&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_1" class="paragraph-anchor"></a><b>&#167;8.3.1. </b>That's it for coarse mode. The rest is what happens in fine mode, which
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_3_1" class="paragraph-anchor"></a><b>&#167;7.3.1. </b>That's it for coarse mode. The rest is what happens in fine mode, which
affects rules giving a rulebook and some circumstances:
</p>
@ -501,7 +433,7 @@ affects rules giving a rulebook and some circumstances:
<p class="commentary">Here "Instead of" is the stem and "taking a container" the bud.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse the rulebook stem in fine mode</span><span class="named-paragraph-number">8.3.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse the rulebook stem in fine mode</span><span class="named-paragraph-number">7.3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -517,17 +449,17 @@ affects rules giving a rulebook and some circumstances:
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">owning_rulebook</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parsed_rm</span><span class="plain-syntax">.</span><span class="element-syntax">matched_rulebook</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">phud</span><span class="plain-syntax">.</span><span class="element-syntax">owning_rulebook</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">"rulebook stem misparsed"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">owning_rulebook_placement</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parsed_rm</span><span class="plain-syntax">.</span><span class="element-syntax">placement_requested</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP8_3_1_2" class="named-paragraph-link"><span class="named-paragraph">Disallow the definite article for anonymous rules</span><span class="named-paragraph-number">8.3.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP8_3_1_1" class="named-paragraph-link"><span class="named-paragraph">Cut off the bud from the stem</span><span class="named-paragraph-number">8.3.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP7_3_1_2" class="named-paragraph-link"><span class="named-paragraph">Disallow the definite article for anonymous rules</span><span class="named-paragraph-number">7.3.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP7_3_1_1" class="named-paragraph-link"><span class="named-paragraph">Cut off the bud from the stem</span><span class="named-paragraph-number">7.3.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">rule_preamble</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP8_3">&#167;8.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_1_1" class="paragraph-anchor"></a><b>&#167;8.3.1.1. </b>The bud is not always present at all, and need not always be at the end
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP7_3">&#167;7.3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_3_1_1" class="paragraph-anchor"></a><b>&#167;7.3.1.1. </b>The bud is not always present at all, and need not always be at the end
of the stem, so we have to be very careful:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Cut off the bud from the stem</span><span class="named-paragraph-number">8.3.1.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Cut off the bud from the stem</span><span class="named-paragraph-number">7.3.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -583,17 +515,17 @@ of the stem, so we have to be very careful:
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">whenwhile</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP8_3_1">&#167;8.3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>If we can't find a stem, the following chooses which problem to issue:
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP7_3_1">&#167;7.3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>If we can't find a stem, the following chooses which problem to issue:
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;unrecognised-rule-stem-diagnosis&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">when</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadRulePreambleWhen problem</span><span class="named-paragraph-number">9.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadRulePreamble problem</span><span class="named-paragraph-number">9.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">when</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadRulePreambleWhen problem</span><span class="named-paragraph-number">8.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadRulePreamble problem</span><span class="named-paragraph-number">8.2</span></a></span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>&#167;9.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadRulePreambleWhen problem</span><span class="named-paragraph-number">9.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP8_1" class="paragraph-anchor"></a><b>&#167;8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadRulePreambleWhen problem</span><span class="named-paragraph-number">8.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -619,8 +551,8 @@ of the stem, so we have to be very careful:
<span class="plain-syntax"> </span><span class="string-syntax">"location is the South Pole.'"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>&#167;9.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadRulePreamble problem</span><span class="named-paragraph-number">9.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_2" class="paragraph-anchor"></a><b>&#167;8.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadRulePreamble problem</span><span class="named-paragraph-number">8.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -634,8 +566,8 @@ of the stem, so we have to be very careful:
<span class="plain-syntax"> </span><span class="string-syntax">"by some description of the action or value to apply to (e.g. "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"'Instead of taking something:' or 'Every turn:')."</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8_3_1_2" class="paragraph-anchor"></a><b>&#167;8.3.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Disallow the definite article for anonymous rules</span><span class="named-paragraph-number">8.3.1.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP8">&#167;8</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_3_1_2" class="paragraph-anchor"></a><b>&#167;7.3.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Disallow the definite article for anonymous rules</span><span class="named-paragraph-number">7.3.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -646,8 +578,8 @@ of the stem, so we have to be very careful:
<span class="plain-syntax"> </span><span class="string-syntax">"so (e.g.) 'the before rule: ...' is disallowed; you should "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"write 'a before rule: ...' instead."</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP8_3_1">&#167;8.3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. Extracting the stem. </b>A couple of routines to read but not really parse the stem and the bud.
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP7_3_1">&#167;7.3.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. Extracting the stem. </b>A couple of routines to read but not really parse the stem and the bud.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -656,7 +588,7 @@ of the stem, so we have to be very careful:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">full_preamble</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>For example, for the rule
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>For example, for the rule
</p>
<blockquote>
@ -676,14 +608,14 @@ of the stem, so we have to be very careful:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b></p>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b></p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;when-while-clause&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">when/while</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. Miscellaneous. </b>Some access routines.
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. Miscellaneous. </b>Some access routines.
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -704,7 +636,7 @@ of the stem, so we have to be very careful:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">timing_of_event</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">Phrases::Usage::has_name_as_constant</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">Phrases::Usage::has_name_as_constant</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP3_7">&#167;3.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phud</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::has_name_as_constant</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">Phrases::Usage::has_name_as_constant</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP13_7">&#167;13.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_usage_data</span><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">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">explicit_name_used_in_maths</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</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>
@ -721,7 +653,7 @@ of the stem, so we have to be very careful:
<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">phud</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">explicit_name_for_inverse</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, </span><span class="reserved-syntax">phrase</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">W</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_equation_form</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">W</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::get_equation_form</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">W</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::match</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">explicit_name_for_inverse</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">ph</span><span class="plain-syntax">;</span>
@ -730,12 +662,12 @@ of the stem, so we have to be very careful:
<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="SP14" class="paragraph-anchor"></a><b>&#167;14. Logging and indexing. </b>The length and thoroughness of this may give some hint of how troublesome
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. Logging and indexing. </b>The length and thoroughness of this may give some hint of how troublesome
it was to debug the preamble-parsing code:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::log</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">Phrases::Usage::log</span></span>:<br/><a href="3-pu.html#SP18_1_1_1">&#167;18.1.1.1</a>, <a href="3-pu.html#SP18_1_1_2">&#167;18.1.1.2</a><br/>Imperative Module - <a href="1-im.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phud</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::log</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">Phrases::Usage::log</span></span>:<br/><a href="3-pu.html#SP17_1_1_1">&#167;17.1.1.1</a>, <a href="3-pu.html#SP17_1_1_2">&#167;17.1.1.2</a><br/>Imperative Module - <a href="1-im.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phud</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">"PHUD: &lt;%W&gt;: rule attachment mode %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">full_preamble</span><span class="plain-syntax">, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family_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">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">constant_phrase_holder</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">" Constant name: &lt;%W&gt;\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
@ -778,7 +710,7 @@ it was to debug the preamble-parsing code:
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"(%W)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">explicit_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>In our compiled code, it's useful to label routines with I6 comments:
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>In our compiled code, it's useful to label routines with I6 comments:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -789,7 +721,7 @@ it was to debug the preamble-parsing code:
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>And similarly:
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>And similarly:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -797,7 +729,7 @@ it was to debug the preamble-parsing code:
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">full_preamble</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. How the PHUD translates into a PHRCD. </b>Recall that in the early afternoon, the PHUD for a rule phrase is translated
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. How the PHUD translates into a PHRCD. </b>Recall that in the early afternoon, the PHUD for a rule phrase is translated
into a PHRCD, that is, a set of instructions about the circumstances for
the rule to fire.
</p>
@ -811,31 +743,31 @@ seen problems in Inform. A couple of variables are needed just for that:
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">NAP_problem_explained</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> pertains to Named Action Patterns</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">issuing_ANL_problem</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> pertains to Action Name Lists</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b></p>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">ph_runtime_context_data</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::to_runtime_context_data</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">Phrases::Usage::to_runtime_context_data</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phud</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">ph_runtime_context_data</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::to_runtime_context_data</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">Phrases::Usage::to_runtime_context_data</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_usage_data</span><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">ph_runtime_context_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax"> = </span><a href="3-prcd.html#SP2" class="function-link"><span class="function-syntax">Phrases::Context::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RULE_NOT_IN_RULEBOOK_EFF_family</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="element-syntax">permit_all_outcomes</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">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RULE_IN_RULEBOOK_EFF_family</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1" class="named-paragraph-link"><span class="named-paragraph">Finish work parsing the conditions for the rule to fire</span><span class="named-paragraph-number">18.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1" class="named-paragraph-link"><span class="named-paragraph">Finish work parsing the conditions for the rule to fire</span><span class="named-paragraph-number">17.1</span></a></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">phrcd</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18_1" class="paragraph-anchor"></a><b>&#167;18.1. </b>All of this is just dumb copying...
<p class="commentary firstcommentary"><a id="SP17_1" class="paragraph-anchor"></a><b>&#167;17.1. </b>All of this is just dumb copying...
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Finish work parsing the conditions for the rule to fire</span><span class="named-paragraph-number">18.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Finish work parsing the conditions for the rule to fire</span><span class="named-paragraph-number">17.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="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="identifier-syntax">compile_for_rulebook</span><span class="plain-syntax"> = &amp;(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_rulebook</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">phud</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">rule_parameter</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1" class="named-paragraph-link"><span class="named-paragraph">Parse what used to be the bud into the PHRCD</span><span class="named-paragraph-number">18.1.1</span></a></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">phud</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">rule_parameter</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1" class="named-paragraph-link"><span class="named-paragraph">Parse what used to be the bud into the PHRCD</span><span class="named-paragraph-number">17.1.1</span></a></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">phud</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">whenwhile</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="element-syntax">activity_context</span><span class="plain-syntax"> =</span>
@ -849,11 +781,11 @@ seen problems in Inform. A couple of variables are needed just for that:
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">during_scene_spec</span><span class="plain-syntax">) </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="element-syntax">during_scene</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">during_scene_spec</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18">&#167;18</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1_1" class="paragraph-anchor"></a><b>&#167;18.1.1. </b>...except for this:
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17">&#167;17</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_1_1" class="paragraph-anchor"></a><b>&#167;17.1.1. </b>...except for this:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse what used to be the bud into the PHRCD</span><span class="named-paragraph-number">18.1.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse what used to be the bud into the PHRCD</span><span class="named-paragraph-number">17.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -868,7 +800,7 @@ seen problems in Inform. A couple of variables are needed just for that:
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseActionPatterns::restore_mode</span><span class="plain-syntax">(</span><span class="identifier-syntax">saved</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">phrcd</span><span class="plain-syntax">.</span><span class="element-syntax">ap</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for a bad action</span><span class="named-paragraph-number">18.1.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for a bad action</span><span class="named-paragraph-number">17.1.1.1</span></a></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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pk</span><span class="plain-syntax"> = </span><a href="2-rlb.html#SP2_2" class="function-link"><span class="function-syntax">Rulebooks::get_focus_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_rulebook</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="element-syntax">ap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ActionPatterns::parse_parametric</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">, </span><span class="identifier-syntax">pk</span><span class="plain-syntax">);</span>
@ -882,16 +814,16 @@ seen problems in Inform. A couple of variables are needed just for that:
<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">phrcd</span><span class="plain-syntax">.</span><span class="element-syntax">ap</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for a bad parameter</span><span class="named-paragraph-number">18.1.1.2</span></a></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">phrcd</span><span class="plain-syntax">.</span><span class="element-syntax">ap</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for a bad parameter</span><span class="named-paragraph-number">17.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pk</span><span class="plain-syntax"> = </span><a href="2-rlb.html#SP2_2" class="function-link"><span class="function-syntax">Rulebooks::get_focus_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">owning_rulebook</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for a bad parameter</span><span class="named-paragraph-number">18.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for a bad parameter</span><span class="named-paragraph-number">17.1.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18_1">&#167;18.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1_1_1" class="paragraph-anchor"></a><b>&#167;18.1.1.1. </b>All that's left is to issue a "good" problem message, but this is quite
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17_1">&#167;17.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_1_1_1" class="paragraph-anchor"></a><b>&#167;17.1.1.1. </b>All that's left is to issue a "good" problem message, but this is quite
a large undertaking, because the situation as we currently know it is just
that something's wrong with the rule preamble &mdash; which covers an enormous
range of different faults.
@ -901,26 +833,26 @@ range of different faults.
parser, recording how it most recently failed.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem message for a bad action</span><span class="named-paragraph-number">18.1.1.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem message for a bad action</span><span class="named-paragraph-number">17.1.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="3-pu.html#SP14" class="function-link"><span class="function-syntax">Phrases::Usage::log</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::log</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="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Bad action pattern: %W = $A\nPAP failure reason: %d\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">, </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="element-syntax">ap</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="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rule_parameter</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-problem-diagnosis&gt;(phud-&gt;</span><span class="element-syntax">rule_parameter</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">switch</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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MIXEDNOUNS_PAPF:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithDisjunction problem</span><span class="named-paragraph-number">18.1.1.1.1</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOPARTICIPLE_PAPF:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithNoParticiple problem</span><span class="named-paragraph-number">18.1.1.1.2</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IMMISCIBLE_PAPF:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithImmiscible problem</span><span class="named-paragraph-number">18.1.1.1.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WHEN_PAPF:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1_1_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithBadWhen problem</span><span class="named-paragraph-number">18.1.1.1.4</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1_1_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APUnknown problem</span><span class="named-paragraph-number">18.1.1.1.5</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MIXEDNOUNS_PAPF:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithDisjunction problem</span><span class="named-paragraph-number">17.1.1.1.1</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOPARTICIPLE_PAPF:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithNoParticiple problem</span><span class="named-paragraph-number">17.1.1.1.2</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IMMISCIBLE_PAPF:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithImmiscible problem</span><span class="named-paragraph-number">17.1.1.1.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WHEN_PAPF:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1_1_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithBadWhen problem</span><span class="named-paragraph-number">17.1.1.1.4</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1_1_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APUnknown problem</span><span class="named-paragraph-number">17.1.1.1.5</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18_1_1">&#167;18.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1_1_1_1" class="paragraph-anchor"></a><b>&#167;18.1.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_APWithDisjunction problem</span><span class="named-paragraph-number">18.1.1.1.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17_1_1">&#167;17.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_1_1_1_1" class="paragraph-anchor"></a><b>&#167;17.1.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_APWithDisjunction problem</span><span class="named-paragraph-number">17.1.1.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -938,8 +870,8 @@ parser, recording how it most recently failed.
<span class="plain-syntax"> </span><span class="string-syntax">"write more than one rule."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18_1_1_1">&#167;18.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1_1_1_2" class="paragraph-anchor"></a><b>&#167;18.1.1.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_APWithNoParticiple problem</span><span class="named-paragraph-number">18.1.1.1.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17_1_1_1">&#167;17.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_1_1_1_2" class="paragraph-anchor"></a><b>&#167;17.1.1.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_APWithNoParticiple problem</span><span class="named-paragraph-number">17.1.1.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -952,8 +884,8 @@ parser, recording how it most recently failed.
<span class="plain-syntax"> </span><span class="string-syntax">"badly misunderstood what you intended."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18_1_1_1">&#167;18.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1_1_1_3" class="paragraph-anchor"></a><b>&#167;18.1.1.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_APWithImmiscible problem</span><span class="named-paragraph-number">18.1.1.1.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17_1_1_1">&#167;17.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_1_1_1_3" class="paragraph-anchor"></a><b>&#167;17.1.1.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_APWithImmiscible problem</span><span class="named-paragraph-number">17.1.1.1.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -969,8 +901,8 @@ parser, recording how it most recently failed.
<span class="plain-syntax"> </span><span class="string-syntax">"would make different use of objects from each other.)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18_1_1_1">&#167;18.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1_1_1_4" class="paragraph-anchor"></a><b>&#167;18.1.1.1.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_APWithBadWhen problem</span><span class="named-paragraph-number">18.1.1.1.4</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17_1_1_1">&#167;17.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_1_1_1_4" class="paragraph-anchor"></a><b>&#167;17.1.1.1.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_APWithBadWhen problem</span><span class="named-paragraph-number">17.1.1.1.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1008,8 +940,8 @@ parser, recording how it most recently failed.
<span class="plain-syntax"> </span><span class="string-syntax">"location'; but the same thing with '...and when Peter is...' is not allowed."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18_1_1_1">&#167;18.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1_1_1_5" class="paragraph-anchor"></a><b>&#167;18.1.1.1.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_APUnknown problem</span><span class="named-paragraph-number">18.1.1.1.5</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17_1_1_1">&#167;17.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_1_1_1_5" class="paragraph-anchor"></a><b>&#167;17.1.1.1.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_APUnknown problem</span><span class="named-paragraph-number">17.1.1.1.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1022,15 +954,15 @@ parser, recording how it most recently failed.
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">"You wrote %1, which seems to introduce a rule taking effect only if the "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"action is '%2'. %3 did not make sense as a description of an action."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1_1_5_1" class="named-paragraph-link"><span class="named-paragraph">See if it starts with a valid action name, at least</span><span class="named-paragraph-number">18.1.1.1.5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1_1_5_2" class="named-paragraph-link"><span class="named-paragraph">See if this might be a when-for confusion</span><span class="named-paragraph-number">18.1.1.1.5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP18_1_1_1_5_3" class="named-paragraph-link"><span class="named-paragraph">Break down the action list and say which are okay</span><span class="named-paragraph-number">18.1.1.1.5.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1_1_5_1" class="named-paragraph-link"><span class="named-paragraph">See if it starts with a valid action name, at least</span><span class="named-paragraph-number">17.1.1.1.5.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1_1_5_2" class="named-paragraph-link"><span class="named-paragraph">See if this might be a when-for confusion</span><span class="named-paragraph-number">17.1.1.1.5.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP17_1_1_1_5_3" class="named-paragraph-link"><span class="named-paragraph">Break down the action list and say which are okay</span><span class="named-paragraph-number">17.1.1.1.5.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="string-syntax">" I am unable to place this rule into any rulebook."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18_1_1_1">&#167;18.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1_1_1_5_1" class="paragraph-anchor"></a><b>&#167;18.1.1.1.5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">See if it starts with a valid action name, at least</span><span class="named-paragraph-number">18.1.1.1.5.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17_1_1_1">&#167;17.1.1.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_1_1_1_5_1" class="paragraph-anchor"></a><b>&#167;17.1.1.1.5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">See if it starts with a valid action name, at least</span><span class="named-paragraph-number">17.1.1.1.5.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1046,8 +978,8 @@ parser, recording how it most recently failed.
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18_1_1_1_5">&#167;18.1.1.1.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1_1_1_5_2" class="paragraph-anchor"></a><b>&#167;18.1.1.1.5.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">See if this might be a when-for confusion</span><span class="named-paragraph-number">18.1.1.1.5.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17_1_1_1_5">&#167;17.1.1.1.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_1_1_1_5_2" class="paragraph-anchor"></a><b>&#167;17.1.1.1.5.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">See if this might be a when-for confusion</span><span class="named-paragraph-number">17.1.1.1.5.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1062,8 +994,8 @@ parser, recording how it most recently failed.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18_1_1_1_5">&#167;18.1.1.1.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1_1_1_5_3" class="paragraph-anchor"></a><b>&#167;18.1.1.1.5.3. </b>If the action pattern contains what looks like a list of action names, as
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17_1_1_1_5">&#167;17.1.1.1.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_1_1_1_5_3" class="paragraph-anchor"></a><b>&#167;17.1.1.1.5.3. </b>If the action pattern contains what looks like a list of action names, as
for example
</p>
@ -1076,7 +1008,7 @@ apparent number of action names. We then run the grammar again, but this time
allowing it to print comments on each apparent action name it sees.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Break down the action list and say which are okay</span><span class="named-paragraph-number">18.1.1.1.5.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Break down the action list and say which are okay</span><span class="named-paragraph-number">17.1.1.1.5.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1097,37 +1029,37 @@ allowing it to print comments on each apparent action name it sees.
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span><span class="string-syntax">" so"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18_1_1_1_5">&#167;18.1.1.1.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP18_1_1_2" class="paragraph-anchor"></a><b>&#167;18.1.1.2. </b>We have a much easier time if the rulebook was value-focused, so that
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17_1_1_1_5">&#167;17.1.1.1.5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP17_1_1_2" class="paragraph-anchor"></a><b>&#167;17.1.1.2. </b>We have a much easier time if the rulebook was value-focused, so that
the only possible problem is that the value was wrong.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem message for a bad parameter</span><span class="named-paragraph-number">18.1.1.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem message for a bad parameter</span><span class="named-paragraph-number">17.1.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="3-pu.html#SP14" class="function-link"><span class="function-syntax">Phrases::Usage::log</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::log</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="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">pk</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="function-syntax">&lt;parametric-problem-diagnosis&gt;(phud-&gt;</span><span class="element-syntax">rule_preamble</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP18_1_1">&#167;18.1.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>And that is the end of the code as such, but we still have to define the
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17_1_1">&#167;17.1.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b>And that is the end of the code as such, but we still have to define the
three diagnosis grammars we needed.
</p>
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>Parametric rules are those applying to values not actions, and the following
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. </b>Parametric rules are those applying to values not actions, and the following
is used to choose a problem message if the value makes no sense.
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;parametric-problem-diagnosis&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">when</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">play</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">begins/ends</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="3-pu.html#SP20_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_WhenThePlay problem</span><span class="named-paragraph-number">20.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP20_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadParameter problem</span><span class="named-paragraph-number">20.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">when</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">play</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">begins/ends</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="3-pu.html#SP19_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_WhenThePlay problem</span><span class="named-paragraph-number">19.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP19_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadParameter problem</span><span class="named-paragraph-number">19.2</span></a></span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP20_1" class="paragraph-anchor"></a><b>&#167;20.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_WhenThePlay problem</span><span class="named-paragraph-number">20.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP19_1" class="paragraph-anchor"></a><b>&#167;19.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_WhenThePlay problem</span><span class="named-paragraph-number">19.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1137,8 +1069,8 @@ is used to choose a problem message if the value makes no sense.
<span class="plain-syntax"> </span><span class="string-syntax">"special rulebooks, 'When play begins' and 'When play ends', "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"and I think you probably mean to refer to one of those."</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP20">&#167;20</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP20_2" class="paragraph-anchor"></a><b>&#167;20.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadParameter problem</span><span class="named-paragraph-number">20.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP19">&#167;19</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP19_2" class="paragraph-anchor"></a><b>&#167;19.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadParameter problem</span><span class="named-paragraph-number">19.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1149,18 +1081,18 @@ is used to choose a problem message if the value makes no sense.
<span class="plain-syntax"> </span><span class="string-syntax">"that should have described %3."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP20">&#167;20</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b>And here we choose a problem message if a rule applying to an action is used,
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP19">&#167;19</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>And here we choose a problem message if a rule applying to an action is used,
but the action isn't one we recognise.
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;action-problem-diagnosis&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">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">presence</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP21_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NonActionInPresenceOf problem</span><span class="named-paragraph-number">21.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP21_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NonActionIn problem</span><span class="named-paragraph-number">21.2</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">presence</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP20_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NonActionInPresenceOf problem</span><span class="named-paragraph-number">20.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP20_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NonActionIn problem</span><span class="named-paragraph-number">20.2</span></a></span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP21_1" class="paragraph-anchor"></a><b>&#167;21.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NonActionInPresenceOf problem</span><span class="named-paragraph-number">21.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP20_1" class="paragraph-anchor"></a><b>&#167;20.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NonActionInPresenceOf problem</span><span class="named-paragraph-number">20.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1177,8 +1109,8 @@ but the action isn't one we recognise.
<span class="plain-syntax"> </span><span class="string-syntax">"see...'."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP21">&#167;21</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP21_2" class="paragraph-anchor"></a><b>&#167;21.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NonActionIn problem</span><span class="named-paragraph-number">21.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP20">&#167;20</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP20_2" class="paragraph-anchor"></a><b>&#167;20.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NonActionIn problem</span><span class="named-paragraph-number">20.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1191,8 +1123,8 @@ but the action isn't one we recognise.
<span class="plain-syntax"> </span><span class="string-syntax">"when in the Library'."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP21">&#167;21</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. </b>The following is used to choose a problem when the trouble with the rule
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP20">&#167;20</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b>The following is used to choose a problem when the trouble with the rule
occurred in a when/while condition at the end; while all five cases produce
the PM_APWithBadWhen problem, they each provide different clues as to what
might have gone wrong.
@ -1207,7 +1139,7 @@ might have gone wrong.
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{when/while</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { 5, -, &lt;&lt;cw1&gt;&gt; = Wordings::first_wn(WR[2]), &lt;&lt;cw2&gt;&gt; = Wordings::last_wn(WR[2]) }</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. </b></p>
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. </b></p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;anl-diagnosis&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
@ -1223,10 +1155,10 @@ might have gone wrong.
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_,/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax">&lt;anl-inner-diagnosis&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> { pass 1 }</span>
<span class="Preform-function-syntax">&lt;anl-entry-diagnosis&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">......</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP23_1" class="named-paragraph-link"><span class="named-paragraph">Diagnose problem with this ANL entry</span><span class="named-paragraph-number">23.1</span></a></span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">......</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==&gt;</span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP22_1" class="named-paragraph-link"><span class="named-paragraph">Diagnose problem with this ANL entry</span><span class="named-paragraph-number">22.1</span></a></span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP23_1" class="paragraph-anchor"></a><b>&#167;23.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Diagnose problem with this ANL entry</span><span class="named-paragraph-number">23.1</span></span><span class="Preform-comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP22_1" class="paragraph-anchor"></a><b>&#167;22.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Diagnose problem with this ANL entry</span><span class="named-paragraph-number">22.1</span></span><span class="Preform-comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -1274,7 +1206,7 @@ might have gone wrong.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> ==&gt; { </span><span class="constant-syntax">1</span><span class="plain-syntax">, - };</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP23">&#167;23</a>.</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP22">&#167;22</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-phr.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-rls.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-itp.html">itp</a></li><li class="progresssection"><a href="3-id.html">id</a></li><li class="progresssection"><a href="3-phr.html">phr</a></li><li class="progresscurrent">pu</li><li class="progresssection"><a href="3-prcd.html">prcd</a></li><li class="progresssection"><a href="3-ptd.html">ptd</a></li><li class="progresssection"><a href="3-dptd.html">dptd</a></li><li class="progresssection"><a href="3-po.html">po</a></li><li class="progresssection"><a href="3-pav.html">pav</a></li><li class="progresssection"><a href="3-tph.html">tph</a></li><li class="progresssection"><a href="3-tp.html">tp</a></li><li class="progresschapter"><a href="4-lv.html">4</a></li><li class="progresschapter"><a href="5-cfs.html">5</a></li><li class="progresschapter"><a href="6-inv.html">6</a></li><li class="progressnext"><a href="3-prcd.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -92,7 +92,7 @@ defined as "At 9:00 AM: ..." But two values are special:
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">use_as_event</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure use_as_event is accessed in 2/rlb, 2/act, 3/phr, 3/prcd, 3/tph, 4/lv, 4/sv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li></ul>
<ul class="endnotetexts"><li>The structure use_as_event is accessed in 2/rlb, 2/act, 3/id, 3/phr, 3/prcd, 3/tph, 4/lv, 4/sv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Timed events are stored in two simple arrays, processed by run-time code.
</p>
@ -103,7 +103,7 @@ defined as "At 9:00 AM: ..." But two values are special:
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">when_count</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">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, </span><span class="reserved-syntax">phrase</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><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">t</span><span class="plain-syntax"> == </span><span class="constant-syntax">NOT_A_TIMED_EVENT</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">t</span><span class="plain-syntax"> == </span><span class="constant-syntax">NO_FIXED_TIME</span><span class="plain-syntax">) </span><span class="identifier-syntax">when_count</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">Emit::array_iname_entry</span><span class="plain-syntax">(</span><a href="3-phr.html#SP10" class="function-link"><span class="function-syntax">Phrases::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">));</span>
@ -123,7 +123,7 @@ defined as "At 9:00 AM: ..." But two values are special:
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">when_count</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">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, </span><span class="reserved-syntax">phrase</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><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">t</span><span class="plain-syntax"> == </span><span class="constant-syntax">NOT_A_TIMED_EVENT</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">t</span><span class="plain-syntax"> == </span><span class="constant-syntax">NO_FIXED_TIME</span><span class="plain-syntax">) </span><span class="identifier-syntax">when_count</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">Emit::array_numeric_entry</span><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
@ -142,7 +142,7 @@ defined as "At 9:00 AM: ..." But two values are special:
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Timed::note_usage</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">Phrases::Timed::note_usage</span></span>:<br/>Compile Invocations Inline - <a href="6-cii.html#SP3_1_1_4_12">&#167;3.1.1.4.12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">at</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">t</span><span class="plain-syntax"> == </span><span class="constant-syntax">NO_FIXED_TIME</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">use_as_event</span><span class="plain-syntax"> *</span><span class="identifier-syntax">uae</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">use_as_event</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">uae</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">where_triggered</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">;</span>
@ -164,7 +164,7 @@ arguably shouldn't block compilation. Then again...
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Timed::check_for_unused</span><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">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, </span><span class="reserved-syntax">phrase</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">)) == </span><span class="constant-syntax">NO_FIXED_TIME</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">)) == </span><span class="constant-syntax">NO_FIXED_TIME</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">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">.</span><span class="element-syntax">uses_as_event</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">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_UnusedTimedEvent</span><span class="plain-syntax">),</span>
@ -195,7 +195,7 @@ arguably shouldn't block compilation. Then again...
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, </span><span class="reserved-syntax">phrase</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><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">t</span><span class="plain-syntax"> == </span><span class="constant-syntax">NO_FIXED_TIME</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">when_count</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">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
@ -204,7 +204,7 @@ arguably shouldn't block compilation. Then again...
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">when_count</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"tightin2\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP16" class="function-link"><span class="function-syntax">Phrases::Usage::index_preamble</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP15" class="function-link"><span class="function-syntax">Phrases::Usage::index_preamble</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">))))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Index::link</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">)));</span>
@ -224,7 +224,7 @@ arguably shouldn't block compilation. Then again...
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, </span><span class="reserved-syntax">phrase</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><a href="3-pu.html#SP13" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="3-pu.html#SP12" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">t</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="comment-syntax"> i.e., an actual time of day in minutes since midnight</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tt_count</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">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
@ -233,7 +233,7 @@ arguably shouldn't block compilation. Then again...
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">tt_count</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_OPEN_WITH</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">, </span><span class="string-syntax">"class=\"in2\""</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP16" class="function-link"><span class="function-syntax">Phrases::Usage::index_preamble</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP15" class="function-link"><span class="function-syntax">Phrases::Usage::index_preamble</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</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">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">))))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Index::link</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">)));</span>

View file

@ -189,7 +189,7 @@ reasons, that is, to make the compiled code more legible.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Routines::ToPhrases::register_all</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">Routines::ToPhrases::register_all</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Routines::ToPhrases::register_all</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">Routines::ToPhrases::register_all</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP11">&#167;11</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">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</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">ph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first_in_logical_order</span><span class="plain-syntax">; </span><span class="identifier-syntax">ph</span><span class="plain-syntax">; </span><span class="identifier-syntax">ph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_in_logical_order</span><span class="plain-syntax">) {</span>
@ -234,7 +234,7 @@ values in force, so that there is no possible ambiguity in how we read K.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">to_phrase_request</span><span class="plain-syntax"> *</span><span class="function-syntax">Routines::ToPhrases::make_request</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">Routines::ToPhrases::make_request</span></span>:<br/><a href="3-tph.html#SP7">&#167;7</a><br/>Imperative Definitions - <a href="3-id.html#SP3_5">&#167;3.5</a><br/>Phrases - <a href="3-phr.html#SP12">&#167;12</a><br/>Phrases as Values - <a href="3-pav.html#SP6">&#167;6</a><br/>Compile Invocations As Calls - <a href="6-ciac.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><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">,</span>
<span class="reserved-syntax">to_phrase_request</span><span class="plain-syntax"> *</span><span class="function-syntax">Routines::ToPhrases::make_request</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">Routines::ToPhrases::make_request</span></span>:<br/><a href="3-tph.html#SP7">&#167;7</a><br/>Imperative Definitions - <a href="3-id.html#SP13_5">&#167;13.5</a><br/>Phrases - <a href="3-phr.html#SP12">&#167;12</a><br/>Phrases as Values - <a href="3-pav.html#SP6">&#167;6</a><br/>Compile Invocations As Calls - <a href="6-ciac.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><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">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind_variable_declaration</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kvd</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ph</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">K</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">"bad request"</span><span class="plain-syntax">);</span>
@ -338,7 +338,7 @@ since the last time it was called.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">to_phrase_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">latest_request_granted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Routines::ToPhrases::compilation_coroutine</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">Routines::ToPhrases::compilation_coroutine</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP4">&#167;4</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">max_i</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Routines::ToPhrases::compilation_coroutine</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">Routines::ToPhrases::compilation_coroutine</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP14">&#167;14</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">max_i</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">N</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">while</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">to_phrase_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">;</span>

View file

@ -148,7 +148,7 @@ marks it as deallocated.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">local_variable</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure local_variable is accessed in 2/rlb, 2/act, 3/phr, 3/prcd, 3/tph, 3/tp, 4/sv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li></ul>
<ul class="endnotetexts"><li>The structure local_variable is accessed in 2/rlb, 2/act, 3/id, 3/phr, 3/prcd, 3/tph, 3/tp, 4/sv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>A local variable needs to be stored somewhere at run-time. The obvious
correspondence is to put these into I6 local variables, which are, in effect,
CPU registers. We won't need to do much in the way of register-allocation,

View file

@ -159,7 +159,7 @@ wants to compile an I6 routine for some purpose other than to define a phrase.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> &amp;</span><span class="identifier-syntax">nonphrasal_stack_frame</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">Frames::remove_nonphrase_stack_frame</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">Frames::remove_nonphrase_stack_frame</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP18_1_1">&#167;18.1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::remove_nonphrase_stack_frame</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">Frames::remove_nonphrase_stack_frame</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP17_1_1">&#167;17.1.1</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="identifier-syntax">nonphrasal_stack_frame</span><span class="plain-syntax"> = </span><a href="4-sf.html#SP4" class="function-link"><span class="function-syntax">Frames::new</span></a><span class="plain-syntax">(); </span><span class="comment-syntax"> to prevent accidental lucky misuse</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">nonphrasal_stack_frame_is_current</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-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::remove_current</span></a><span class="plain-syntax">();</span>
@ -187,16 +187,16 @@ if that's active, and otherwise must be set as needed.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_frame</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="function-syntax">Frames::current_stack_frame</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">Frames::current_stack_frame</span></span>:<br/><a href="4-sf.html#SP8">&#167;8</a>, <a href="4-sf.html#SP9">&#167;9</a>, <a href="4-sf.html#SP10">&#167;10</a>, <a href="4-sf.html#SP11">&#167;11</a>, <a href="4-sf.html#SP13">&#167;13</a>, <a href="4-sf.html#SP14">&#167;14</a><br/>Phrase Usage - <a href="3-pu.html#SP18_1_1">&#167;18.1.1</a><br/>Local Variables - <a href="4-lv.html#SP9">&#167;9</a>, <a href="4-lv.html#SP10">&#167;10</a>, <a href="4-lv.html#SP19">&#167;19</a>, <a href="4-lv.html#SP20">&#167;20</a>, <a href="4-lv.html#SP21">&#167;21</a>, <a href="4-lv.html#SP22">&#167;22</a>, <a href="4-lv.html#SP25">&#167;25</a>, <a href="4-lv.html#SP26">&#167;26</a>, <a href="4-lv.html#SP29">&#167;29</a>, <a href="4-lv.html#SP30">&#167;30</a>, <a href="4-lv.html#SP32">&#167;32</a>, <a href="4-lv.html#SP32_3">&#167;32.3</a>, <a href="4-lv.html#SP40">&#167;40</a>, <a href="4-lv.html#SP41">&#167;41</a><br/>Phrase Blocks - <a href="4-pb.html#SP7">&#167;7</a>, <a href="4-pb.html#SP17">&#167;17</a>, <a href="4-pb.html#SP18">&#167;18</a><br/>Compile Solutions to Equations - <a href="6-cste.html#SP3_3">&#167;3.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="function-syntax">Frames::current_stack_frame</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">Frames::current_stack_frame</span></span>:<br/><a href="4-sf.html#SP8">&#167;8</a>, <a href="4-sf.html#SP9">&#167;9</a>, <a href="4-sf.html#SP10">&#167;10</a>, <a href="4-sf.html#SP11">&#167;11</a>, <a href="4-sf.html#SP13">&#167;13</a>, <a href="4-sf.html#SP14">&#167;14</a><br/>Phrase Usage - <a href="3-pu.html#SP17_1_1">&#167;17.1.1</a><br/>Local Variables - <a href="4-lv.html#SP9">&#167;9</a>, <a href="4-lv.html#SP10">&#167;10</a>, <a href="4-lv.html#SP19">&#167;19</a>, <a href="4-lv.html#SP20">&#167;20</a>, <a href="4-lv.html#SP21">&#167;21</a>, <a href="4-lv.html#SP22">&#167;22</a>, <a href="4-lv.html#SP25">&#167;25</a>, <a href="4-lv.html#SP26">&#167;26</a>, <a href="4-lv.html#SP29">&#167;29</a>, <a href="4-lv.html#SP30">&#167;30</a>, <a href="4-lv.html#SP32">&#167;32</a>, <a href="4-lv.html#SP32_3">&#167;32.3</a>, <a href="4-lv.html#SP40">&#167;40</a>, <a href="4-lv.html#SP41">&#167;41</a><br/>Phrase Blocks - <a href="4-pb.html#SP7">&#167;7</a>, <a href="4-pb.html#SP17">&#167;17</a>, <a href="4-pb.html#SP18">&#167;18</a><br/>Compile Solutions to Equations - <a href="6-cste.html#SP3_3">&#167;3.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">current_frame</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">Frames::make_current</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">Frames::make_current</span></span>:<br/><a href="4-sf.html#SP5">&#167;5</a><br/>Imperative Definitions - <a href="3-id.html#SP1">&#167;1</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">&#167;8</a><br/>Compile Phrases - <a href="6-cp.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::make_current</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">Frames::make_current</span></span>:<br/><a href="4-sf.html#SP5">&#167;5</a><br/>Imperative Definitions - <a href="3-id.html#SP11">&#167;11</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">&#167;8</a><br/>Compile Phrases - <a href="6-cp.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</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">phsf</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">"can't select null stack frame"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_frame</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phsf</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">Frames::remove_current</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">Frames::remove_current</span></span>:<br/><a href="4-sf.html#SP5">&#167;5</a><br/>Imperative Definitions - <a href="3-id.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::remove_current</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">Frames::remove_current</span></span>:<br/><a href="4-sf.html#SP5">&#167;5</a><br/>Imperative Definitions - <a href="3-id.html#SP11">&#167;11</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="identifier-syntax">current_frame</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -242,7 +242,7 @@ if that's active, and otherwise must be set as needed.
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. Stacked variables. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::set_stvol</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">Frames::set_stvol</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP18_1_1">&#167;18.1.1</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">&#167;8</a><br/>Compile Phrases - <a href="6-cp.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</span><span class="plain-syntax">, </span><span class="reserved-syntax">stacked_variable_owner_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">stvol</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::set_stvol</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">Frames::set_stvol</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP17_1_1">&#167;17.1.1</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">&#167;8</a><br/>Compile Phrases - <a href="6-cp.html#SP2_2">&#167;2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</span><span class="plain-syntax">, </span><span class="reserved-syntax">stacked_variable_owner_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">stvol</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phsf</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">local_stvol</span><span class="plain-syntax"> = </span><span class="identifier-syntax">stvol</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -107,7 +107,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">stacked_variable_owner_list</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure stacked_variable is accessed in 2/rls, 2/fao, 2/act, 3/pu, 3/dptd, 3/po, 3/pav, 6/cii, 6/cste and here.</li><li>The structure stacked_variable_list is accessed in 2/rlb, 2/act, 3/phr, 3/prcd, 3/tph, 3/tp, 4/lv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li><li>The structure stacked_variable_owner is private to this section.</li><li>The structure stacked_variable_owner_list is accessed in 2/rlb, 2/act, 3/phr, 3/prcd, 3/tph, 3/tp, 4/lv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li></ul>
<ul class="endnotetexts"><li>The structure stacked_variable is accessed in 2/rls, 2/fao, 2/act, 3/pu, 3/dptd, 3/po, 3/pav, 6/cii, 6/cste and here.</li><li>The structure stacked_variable_list is accessed in 2/rlb, 2/act, 3/id, 3/phr, 3/prcd, 3/tph, 3/tp, 4/lv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li><li>The structure stacked_variable_owner is private to this section.</li><li>The structure stacked_variable_owner_list is accessed in 2/rlb, 2/act, 3/id, 3/phr, 3/prcd, 3/tph, 3/tp, 4/lv, 4/sf, 5/dtd, 5/cdp, 6/inv, 6/pi, 6/cii, 6/cp, 6/cste and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -129,7 +129,7 @@ which create routines which... and so on.
<span class="plain-syntax">}</span>
<span class="reserved-syntax">pcalc_prop_deferral</span><span class="plain-syntax"> *</span><span class="identifier-syntax">latest_pcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Propositions::Deferred::compilation_coroutine</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">Propositions::Deferred::compilation_coroutine</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Propositions::Deferred::compilation_coroutine</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">Propositions::Deferred::compilation_coroutine</span></span>:<br/>Imperative Definitions - <a href="3-id.html#SP14">&#167;14</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">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="plain-syntax"> </span><span class="reserved-syntax">while</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">pcalc_prop_deferral</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pdef</span><span class="plain-syntax">;</span>

View file

@ -102,14 +102,11 @@ should always be supplied for "To..." phrases, but left null for rules.
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Routines::Compile::routine</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">Routines::Compile::routine</span></span>:<br/>Phrases - <a href="3-phr.html#SP11">&#167;11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">stacked_variable_owner_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">legible</span><span class="plain-syntax">, </span><span class="reserved-syntax">to_phrase_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">code_at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</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">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">code_at</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">, </span><span class="identifier-syntax">DEFN_CONT_NT</span><span class="plain-syntax">)) </span><span class="identifier-syntax">code_at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">code_at</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">PHRASE_COMPILATION</span><span class="plain-syntax">, </span><span class="string-syntax">"Compiling phrase:\n$T"</span><span class="plain-syntax">, </span><span class="identifier-syntax">code_at</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">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">) != </span><span class="identifier-syntax">IMPERATIVE_NT</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::empty</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">))))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"tried to compile phrase with bad ROUTINE node"</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">PHRASE_COMPILATION</span><span class="plain-syntax">, </span><span class="string-syntax">"Compiling phrase:\n$T"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompilationUnits::set_current</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CompilationUnits::set_current</span><span class="plain-syntax">(</span><span class="identifier-syntax">code_at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">phrase_being_compiled</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-cp.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Set up the stack frame for this compilation request</span><span class="named-paragraph-number">2.2</span></a></span><span class="plain-syntax">;</span>
@ -131,7 +128,7 @@ should always be supplied for "To..." phrases, but left null for rules.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="3-tph.html#SP9" class="function-link"><span class="function-syntax">Routines::ToPhrases::comment_on_request</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP15" class="function-link"><span class="function-syntax">Phrases::Usage::write_I6_comment_describing</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-pu.html#SP14" class="function-link"><span class="function-syntax">Phrases::Usage::write_I6_comment_describing</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-cp.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>&#167;2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set up the stack frame for this compilation request</span><span class="named-paragraph-number">2.2</span></span><span class="comment-syntax"> =</span>
@ -161,14 +158,14 @@ should always be supplied for "To..." phrases, but left null for rules.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">code_at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-prcd.html#SP9" class="function-link"><span class="function-syntax">Phrases::Context::compile_test_head</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</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">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VerifyTree::verify_structure_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-cp.html#SP4" class="function-link"><span class="function-syntax">Routines::Compile::code_block_outer</span></a><span class="plain-syntax">(1, </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VerifyTree::verify_structure_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</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">code_at</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VerifyTree::verify_structure_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">code_at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-cp.html#SP4" class="function-link"><span class="function-syntax">Routines::Compile::code_block_outer</span></a><span class="plain-syntax">(1, </span><span class="identifier-syntax">code_at</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">VerifyTree::verify_structure_from</span><span class="plain-syntax">(</span><span class="identifier-syntax">code_at</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">code_at</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-prcd.html#SP9_1" class="function-link"><span class="function-syntax">Phrases::Context::compile_test_tail</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-cp.html#SP2_3_1" class="named-paragraph-link"><span class="named-paragraph">Compile a terminal return statement</span><span class="named-paragraph-number">2.3.1</span></a></span><span class="plain-syntax">;</span>

View file

@ -95,8 +95,10 @@ And here's another one.
<span class="plain-syntax"> *</span><span class="identifier-syntax">CW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">; *</span><span class="identifier-syntax">K</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ph</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">, </span><span class="identifier-syntax">DEFN_CONT_NT</span><span class="plain-syntax">)) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</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="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">, </span><span class="reserved-syntax">definition</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">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">definition_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">p</span><span class="plain-syntax">) &amp;&amp; (</span><a href="3-abp.html#SP1" class="function-link"><span class="function-syntax">Phrases::Phrasal::is_defined_by_phrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</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">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">p</span><span class="plain-syntax">) &amp;&amp; (</span><a href="3-abp.html#SP1" class="function-link"><span class="function-syntax">Phrases::Phrasal::is_defined_by_phrase</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::make_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ATOM_TASK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"(%n(*1))"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Phrases::iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">CW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">domain_calling</span><span class="plain-syntax">;</span>

View file

@ -194,8 +194,9 @@ the doubled use of colons is unfortunate.)
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;definition-header&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">compilation_unit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cm</span><span class="plain-syntax"> = </span><a href="2-cu.html#SP6" class="function-link"><span class="function-syntax">CompilationUnits::current</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-cu.html#SP6" class="function-link"><span class="function-syntax">CompilationUnits::set_current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</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">q</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-ad.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Futz with the parse tree, trying right not down</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) == </span><span class="identifier-syntax">DEFN_CONT_NT</span><span class="plain-syntax">) </span><span class="identifier-syntax">q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</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">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">q</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">DNW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">; </span><span class="comment-syntax"> domain name</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">; </span><span class="comment-syntax"> calling</span>
@ -204,9 +205,9 @@ the doubled use of colons is unfortunate.)
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">; </span><span class="comment-syntax"> condition text</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">the_format</span><span class="plain-syntax"> = </span><span class="constant-syntax">DEFINED_IN_SOME_WAY_NOT_YET_KNOWN</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ad.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Parse the Q-node as an adjective definition</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ad.html#SP4_3" class="named-paragraph-link"><span class="named-paragraph">Perform sanity checks on the result</span><span class="named-paragraph-number">4.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ad.html#SP4_4" class="named-paragraph-link"><span class="named-paragraph">Register the resulting adjective</span><span class="named-paragraph-number">4.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ad.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Parse the Q-node as an adjective definition</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ad.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Perform sanity checks on the result</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ad.html#SP4_3" class="named-paragraph-link"><span class="named-paragraph">Register the resulting adjective</span><span class="named-paragraph-number">4.3</span></a></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">the_format</span><span class="plain-syntax"> != </span><span class="constant-syntax">DEFINED_PHRASALLY</span><span class="plain-syntax">) </span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -214,25 +215,7 @@ the doubled use of colons is unfortunate.)
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b>The tree structure is slightly different according to whether the adjective
is defined by routine or not.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Futz with the parse tree, trying right not down</span><span class="named-paragraph-number">4.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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">) != </span><span class="identifier-syntax">IMPERATIVE_NT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">BelievedImpossible</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"don't leave me in suspense"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"write a definition after 'Definition:'!"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">; </span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">q</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax">; </span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">q</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">q</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ad.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>&#167;4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse the Q-node as an adjective definition</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse the Q-node as an adjective definition</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -247,7 +230,7 @@ is defined by routine or not.
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ad.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_3" class="paragraph-anchor"></a><b>&#167;4.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform sanity checks on the result</span><span class="named-paragraph-number">4.3</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>&#167;4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform sanity checks on the result</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -271,18 +254,19 @@ is defined by routine or not.
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ad.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_4" class="paragraph-anchor"></a><b>&#167;4.4. </b>As we've seen, adjectives can take many forms, and what we do here is to
<p class="commentary firstcommentary"><a id="SP4_3" class="paragraph-anchor"></a><b>&#167;4.3. </b>As we've seen, adjectives can take many forms, and what we do here is to
offer the new adjective around and see if anybody claims it.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register the resulting adjective</span><span class="named-paragraph-number">4.4</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register the resulting adjective</span><span class="named-paragraph-number">4.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">q</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::claim_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">, </span><span class="identifier-syntax">the_format</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">, </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">, </span><span class="identifier-syntax">CALLW</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">am</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">"unclaimed adjective definition"</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">NW</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">q</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">adj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</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">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">neg</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::negate</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveAmbiguity::add_meaning_to_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">, </span><span class="identifier-syntax">adj</span><span class="plain-syntax">);</span>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,13 +1,13 @@
Total memory consumption was 259998K = 254 MB
62.7% was used for 1337597 objects, in 280830 frames in 204 x 800K = 163200K = 159 MB:
62.7% was used for 1339202 objects, in 281437 frames in 204 x 800K = 163200K = 159 MB:
9.7% inter_tree_node_array 36 x 8192 = 294912 objects, 25953408 bytes
5.4% text_stream_array 2583 x 100 = 258300 objects, 14547456 bytes
3.8% parse_node 129371 objects, 10349680 bytes
2.7% verb_conjugation 160 objects, 7425280 bytes
2.6% linked_list 12665 objects, 7092400 bytes
2.5% parse_node_annotation_array 429 x 500 = 214500 objects, 6877728 bytes
2.5% parse_node_annotation_array 431 x 500 = 215500 objects, 6909792 bytes
2.3% inter_symbol_array 69 x 1024 = 70656 objects, 6219936 bytes
1.2% pcalc_prop_array 24 x 1000 = 24000 objects, 3264768 bytes
1.1% map_data 670 objects, 3178480 bytes
@ -20,8 +20,8 @@ Total memory consumption was 259998K = 254 MB
0.3% excerpt_meaning 3098 objects, 966576 bytes
0.3% inter_name_array 20 x 1000 = 20000 objects, 960640 bytes
0.3% inter_package 13227 objects, 952344 bytes
0.3% production 3888 objects, 902016 bytes
0.3% ptoken 8392 objects, 872768 bytes
0.3% production 3910 objects, 907120 bytes
0.3% ptoken 8519 objects, 885976 bytes
0.3% grammatical_usage 3610 objects, 866400 bytes
0.3% individual_form 2560 objects, 860160 bytes
0.3% inter_symbols_table 13227 objects, 846528 bytes
@ -29,8 +29,8 @@ Total memory consumption was 259998K = 254 MB
0.2% dictionary 16372 objects, 785856 bytes
0.2% dict_entry_array 232 x 100 = 23200 objects, 749824 bytes
0.2% package_request 7954 objects, 699952 bytes
0.2% inter_name_generator_array 16 x 1000 = 16000 objects, 640512 bytes
0.2% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes
0.2% inter_name_generator_array 16 x 1000 = 16000 objects, 640512 bytes
0.1% local_variable_array 45 x 100 = 4500 objects, 505440 bytes
0.1% verb_usage 1128 objects, 388032 bytes
0.1% rule 469 objects, 363944 bytes
@ -44,7 +44,7 @@ Total memory consumption was 259998K = 254 MB
---- binary_predicate 321 objects, 156648 bytes
---- stacked_variable_owner_list_array 38 x 100 = 3800 objects, 153216 bytes
---- index_lexicon_entry 395 objects, 142200 bytes
---- nonterminal 759 objects, 139656 bytes
---- nonterminal 764 objects, 140576 bytes
---- documentation_ref 1275 objects, 112200 bytes
---- inference 1703 objects, 108992 bytes
---- hierarchy_location 730 objects, 105120 bytes
@ -56,6 +56,7 @@ Total memory consumption was 259998K = 254 MB
---- kind_variable_declaration 1652 objects, 79296 bytes
---- inter_tree 6 objects, 78624 bytes
---- inter_schema 1509 objects, 72432 bytes
---- imperative_defn 1376 objects, 66048 bytes
---- rulebook 407 objects, 65120 bytes
---- spatial_data 670 objects, 64320 bytes
---- kind_macro_definition 9 objects, 62280 bytes
@ -70,12 +71,11 @@ Total memory consumption was 259998K = 254 MB
---- text_substitution 436 objects, 48832 bytes
---- cg_line 230 objects, 47840 bytes
---- table 7 objects, 45528 bytes
---- imperative_defn 940 objects, 45120 bytes
---- inter_node_list 750 objects, 42000 bytes
---- anl_clause_array 1 x 1000 objects, 40032 bytes
---- activity_list_array 1 x 1000 objects, 40032 bytes
---- anl_clause_array 1 x 1000 objects, 40032 bytes
---- response_message 407 objects, 35816 bytes
---- production_list 617 objects, 34552 bytes
---- production_list 622 objects, 34832 bytes
---- regions_data 670 objects, 32160 bytes
---- HTML_tag_array 1 x 1000 objects, 32032 bytes
---- property_permission 96 objects, 30720 bytes
@ -93,11 +93,11 @@ Total memory consumption was 259998K = 254 MB
---- action_name 90 objects, 18000 bytes
---- parse_node_tree 20 objects, 17280 bytes
---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes
---- action_name_list_array 1 x 1000 objects, 16032 bytes
---- match_avinue_array 1 x 1000 objects, 16032 bytes
---- linked_list_item_array 1 x 1000 objects, 16032 bytes
---- action_name_list_array 1 x 1000 objects, 16032 bytes
---- method 327 objects, 15696 bytes
---- to_phrase_request 59 objects, 15576 bytes
---- method 323 objects, 15504 bytes
---- adjective 137 objects, 14248 bytes
---- booking_list 407 objects, 13024 bytes
---- literal_text 147 objects, 12936 bytes
@ -123,22 +123,22 @@ Total memory consumption was 259998K = 254 MB
---- placement_affecting_array 1 x 100 objects, 4032 bytes
---- activity 35 objects, 3920 bytes
---- inbuild_edition 54 objects, 3888 bytes
---- parse_node_annotation_type 114 objects, 3648 bytes
---- inbuild_copy 35 objects, 3640 bytes
---- parse_node_annotation_type 113 objects, 3616 bytes
---- command_line_switch 43 objects, 3440 bytes
---- method_set 105 objects, 3360 bytes
---- property_setting_bp_data 84 objects, 3360 bytes
---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes
---- instance_usage_array 1 x 200 objects, 3232 bytes
---- method_set 100 objects, 3200 bytes
---- definition 44 objects, 3168 bytes
---- compatibility_specification 66 objects, 3168 bytes
---- inform_extension 19 objects, 3040 bytes
---- either_or_property_data 62 objects, 2976 bytes
---- property_of_value_storage 93 objects, 2976 bytes
---- either_or_property_data 62 objects, 2976 bytes
---- submodule_request 72 objects, 2880 bytes
---- inter_construct 32 objects, 2560 bytes
---- parentage_inference_data 79 objects, 2528 bytes
---- part_of_inference_data 79 objects, 2528 bytes
---- parentage_inference_data 79 objects, 2528 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
---- equation_symbol 30 objects, 2400 bytes
@ -154,48 +154,48 @@ Total memory consumption was 259998K = 254 MB
---- pipeline_step 12 objects, 1440 bytes
---- noun_filter_token 22 objects, 1408 bytes
---- special_meaning_holder 33 objects, 1320 bytes
---- build_script 40 objects, 1280 bytes
---- constant_phrase 20 objects, 1280 bytes
---- build_script 40 objects, 1280 bytes
---- invocation_options_array 1 x 100 objects, 1224 bytes
---- hierarchy_metadatum 15 objects, 1200 bytes
---- direction_inference_data 30 objects, 1200 bytes
---- hierarchy_metadatum 15 objects, 1200 bytes
---- quantifier 16 objects, 1024 bytes
---- table_column 16 objects, 896 bytes
---- inbuild_requirement 22 objects, 880 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- code_generation 1 object, 864 bytes
---- control_structure_phrase 12 objects, 864 bytes
---- cached_understanding 21 objects, 840 bytes
---- runtime_kind_structure 13 objects, 832 bytes
---- phrase_option_array 1 x 100 objects, 824 bytes
---- target_vm 6 objects, 816 bytes
---- pipeline_stage 17 objects, 816 bytes
---- target_vm 6 objects, 816 bytes
---- generated_segment 25 objects, 800 bytes
---- inter_data_type 14 objects, 784 bytes
---- submodule_identity 23 objects, 736 bytes
---- inform_language 6 objects, 672 bytes
---- I6T_intervention 8 objects, 640 bytes
---- relation_guard 5 objects, 640 bytes
---- inter_warehouse_room 10 objects, 640 bytes
---- I6T_intervention 8 objects, 640 bytes
---- nascent_array 7 objects, 616 bytes
---- inbuild_search_result 15 objects, 600 bytes
---- named_rulebook_outcome 15 objects, 600 bytes
---- inbuild_search_result 15 objects, 600 bytes
---- label_namespace 10 objects, 560 bytes
---- rulebook_outcome 17 objects, 544 bytes
---- small_word_set 11 objects, 528 bytes
---- implication 13 objects, 520 bytes
---- inform_kit 5 objects, 520 bytes
---- inference_family 11 objects, 440 bytes
---- i6_memory_setting 13 objects, 416 bytes
---- equation 4 objects, 416 bytes
---- i6_memory_setting 13 objects, 416 bytes
---- module_package 10 objects, 400 bytes
---- dval_written 10 objects, 400 bytes
---- article_usage 8 objects, 384 bytes
---- bp_family 12 objects, 384 bytes
---- source_file 5 objects, 360 bytes
---- inbuild_genre 7 objects, 336 bytes
---- grammatical_category 8 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- door_dir_notice 5 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- up_family 9 objects, 288 bytes
---- build_step 4 objects, 288 bytes
---- explicit_bp_data 5 objects, 280 bytes
@ -205,14 +205,14 @@ Total memory consumption was 259998K = 254 MB
---- adjective_meaning_family 7 objects, 224 bytes
---- release_instructions 1 object, 208 bytes
---- test_scenario 1 object, 208 bytes
---- compilation_unit 5 objects, 200 bytes
---- imperative_defn_family 5 objects, 200 bytes
---- build_skill 5 objects, 200 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- compilation_unit 5 objects, 200 bytes
---- kit_dependency 4 objects, 192 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- inform_project 1 object, 176 bytes
---- link_instruction 4 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- imperative_defn_family 5 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- pointer_allocation 2 objects, 160 bytes
---- code_generation_target 4 objects, 160 bytes
@ -235,7 +235,7 @@ Total memory consumption was 259998K = 254 MB
37.2% was used for memory not allocated for objects:
15.8% text stream storage 42066068 bytes in 264532 claims
15.8% text stream storage 42066236 bytes in 264534 claims
3.4% dictionary storage 9278976 bytes in 16372 claims
---- sorting 992 bytes in 3 claims
2.7% source text 7200000 bytes in 3 claims
@ -251,5 +251,5 @@ Total memory consumption was 259998K = 254 MB
---- emitter array storage 12320 bytes in 8 claims
---- code generation workspace for objects 9200 bytes in 9 claims
20.4% was overhead - 54437752 bytes = 53161K = 51 MB
20.4% was overhead - 54364824 bytes = 53090K = 51 MB

View file

@ -3,9 +3,9 @@
(@1)<cardinal-number>=1
(hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]
(@1)minus (@2)<cardinal-number>=1
(hits 0/2126) constraint DS = {12} extremes [2, 2]
(hits 0/1862) constraint DS = {12} extremes [2, 2]
(@1)<quoted-text>=1 (@2)( (@3)<response-letter>=2 (@4))
(hits 273/850) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {12} extremes [4, 4]
(hits 273/846) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {12} extremes [4, 4]
(@1)<quoted-text>=1
(hits 1564/5543) (matched: 'Represents geographical locations, both indoor
and outdoor, which are not necessarily areas in a building. A player in one
@ -14,12 +14,12 @@
<s-literal-real-number>=1
(hits 11/9911) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
(@1)<s-literal-truth-state>=1
(hits 78/827) (matched: 'false') constraint CS = {6} extremes [1, 1]
(hits 78/259) (matched: 'false') constraint CS = {6} extremes [1, 1]
<s-literal-list>=1
(hits 0/3162) constraint DS = {8} extremes [2, infinity)
(hits 0/3326) constraint DS = {8} extremes [2, infinity)
(@1)unicode <s-unicode-character>=1
(hits 0/4633) constraint DS = {12} extremes [2, infinity)
(hits 0/4224) constraint DS = {12} extremes [2, infinity)
<s-literal-time>=1
(hits 0/2167) constraint DW = {9, 10, 11} extremes [2, 5]
(hits 0/3286) constraint DW = {9, 10, 11} extremes [2, 5]
<s-literal-unit-notation>=1
(hits 0/9822) constraint (none) extremes [1, infinity)

View file

@ -28,8 +28,8 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'asking for information'
UNPARSED_NOUN_NT'out of world'
IMPERATIVE_NT'carry out asking for information' {unit: 4}
IMPERATIVE_NT'when play begins' {unit: 4}
IMPERATIVE_NT'carry out asking for information' {unit: 4} {imperative definition: 798}
IMPERATIVE_NT'when play begins' {unit: 4} {imperative definition: 799}
HEADING_NT'section 1 - errands' {heading 5} {under: H5'section 1 - errands'} {unit: 4}
SENTENCE_NT'the current actor is a person which varies' {unit: 4} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
@ -39,8 +39,8 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'current owner' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'current owner' {nonlocal: 'current owner'(var)person}} {created here}
COMMON_NOUN_NT'person which varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: << kind=people variable-pointer(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'every turn' {unit: 4}
IMPERATIVE_NT'every turn' {unit: 4}
IMPERATIVE_NT'every turn' {unit: 4} {imperative definition: 800}
IMPERATIVE_NT'every turn' {unit: 4} {imperative definition: 801}
SENTENCE_NT'a person can be active or passive' {unit: 4} {classified}
VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}
COMMON_NOUN_NT'a person' {refined} {refers: infs'person'} {creation: << kind=person(x) >>} {eval: TEST_VALUE_NT}
@ -56,34 +56,64 @@ ROOT_NT
VERB_NT'are' {verb 'be' 3p p act IS_TENSE +ve}
PROPER_NOUN_NT'character movement rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: character movement}} {created here}
COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: << kind=rulebook(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'the first character movement rule' {unit: 4}
IMPERATIVE_NT'a character movement rule' {unit: 4}
IMPERATIVE_NT'a character movement rule' {unit: 4}
IMPERATIVE_NT'to decide whether movement has not yet occurred' {unit: 4}
IMPERATIVE_NT'definition' {unit: 4}
IMPERATIVE_NT'definition' {unit: 4}
IMPERATIVE_NT'the first character movement rule' {unit: 4} {imperative definition: 802}
IMPERATIVE_NT'a character movement rule' {unit: 4} {imperative definition: 803}
IMPERATIVE_NT'a character movement rule' {unit: 4} {imperative definition: 804}
IMPERATIVE_NT'to decide whether movement has not yet occurred' {unit: 4} {imperative definition: 805}
IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 806}
IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 807}
SENTENCE_NT'the shopowner rules is a rulebook' {unit: 4} {classified} {clears pronouns}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'shopowner rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: shopowner}} {created here}
COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: << kind=rulebook(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'a shopowner rule' {unit: 4}
IMPERATIVE_NT'report someone closing a door when the person asked owns the' {unit: 4}
IMPERATIVE_NT'report vanessa closing the metal door when the metal door is' {unit: 4}
IMPERATIVE_NT'a shopowner rule' {unit: 4}
IMPERATIVE_NT'a shopowner rule' {unit: 4} {imperative definition: 808}
IMPERATIVE_NT'report someone closing a door when the person asked owns the' {unit: 4} {imperative definition: 809}
IMPERATIVE_NT'report vanessa closing the metal door when the metal door is' {unit: 4} {imperative definition: 810}
IMPERATIVE_NT'a shopowner rule' {unit: 4} {imperative definition: 811}
SENTENCE_NT'filing is an action applying to one thing' {unit: 4} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'filing'
UNPARSED_NOUN_NT'applying to one thing'
IMPERATIVE_NT'before someone filing something which is not carried by the ' {unit: 4}
IMPERATIVE_NT'carry out someone filing' {unit: 4}
IMPERATIVE_NT'report someone filing' {unit: 4}
IMPERATIVE_NT'before someone filing something which is not carried by the ' {unit: 4} {imperative definition: 812}
IMPERATIVE_NT'carry out someone filing' {unit: 4} {imperative definition: 813}
IMPERATIVE_NT'report someone filing' {unit: 4} {imperative definition: 814}
SENTENCE_NT'the shopper rules is a rulebook' {unit: 4} {classified} {clears pronouns}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'shopper rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: shopper}} {created here}
COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: << kind=rulebook(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'a shopper rule' {unit: 4}
IMPERATIVE_NT'a shopper rule' {unit: 4}
IMPERATIVE_NT'definition' {unit: 4}
IMPERATIVE_NT'a shopper rule' {unit: 4} {imperative definition: 815}
IMPERATIVE_NT'a shopper rule' {unit: 4} {imperative definition: 816}
IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 817}
DEFN_CONT_NT'a room is air-conditioned' {unit: 4}
CODE_BLOCK_NT
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if it is outdoors' {colon_block_command}
INVOCATION_NT'if it is outdoors' {phrase invoked: call}
CONDITION_CONTEXT_NT'it is outdoors' {token check to do: <null-parse-node>} {token to be parsed against: <null-parse-node>}
TEST_PROPOSITION_NT'it is outdoors' {proposition: << outdoors('it') >>} {term: 'it'}
CODE_BLOCK_NT
INVOCATION_LIST_NT'no' {results_from_splitting} {indent: 1}
INVOCATION_NT'no' {phrase invoked: call}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if it is the pool hall and the air conditioner is switched o' {colon_block_command}
INVOCATION_NT'if it is the pool hall and the air conditioner is switched o' {phrase invoked: call}
CONDITION_CONTEXT_NT'it is the pool hall and the air conditioner is switched off' {token check to do: <null-parse-node>} {token to be parsed against: <null-parse-node>}
LOGICAL_AND_NT'it is the pool hall and the air conditioner is switched off'
TEST_PROPOSITION_NT'it is the pool hall' {proposition: << ('it' == 'the pool hall') >>} {term: 'it'}
TEST_PROPOSITION_NT'the air conditioner is switched off' {proposition: << switched off('the air conditioner') >>} {term: 'the air conditioner'}
CODE_BLOCK_NT
INVOCATION_LIST_NT'no' {results_from_splitting} {indent: 1}
INVOCATION_NT'no' {phrase invoked: call}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if it is protected by a door' {colon_block_command}
INVOCATION_NT'if it is protected by a door' {phrase invoked: call}
CONDITION_CONTEXT_NT'it is protected by a door' {token check to do: <null-parse-node>} {token to be parsed against: <null-parse-node>}
TEST_PROPOSITION_NT'it is protected by a door' {proposition: << Exists x : kind=door(x) ^ protection(x, 'it') >>} {term: 'it'}
CODE_BLOCK_NT
INVOCATION_LIST_NT'yes' {results_from_splitting} {indent: 1}
INVOCATION_NT'yes' {phrase invoked: call}
INVOCATION_LIST_NT'no'
INVOCATION_NT'no' {phrase invoked: call}
SENTENCE_NT'protection relates a door ( called x ) to a room ( called y ' {unit: 4} {classified}
VERB_NT'relates' {verb 'relate' 3p s act IS_TENSE +ve} {special meaning: new-relation}
UNPARSED_NOUN_NT'protection' {new relation: protection}
@ -111,8 +141,8 @@ ROOT_NT
COMMON_NOUN_NT'artwork' {indefinite 'an' n/m/f nom/acc s} {refined} {creation: << kind=artwork(x) >>} {refers: infs'artwork'} {eval: TEST_VALUE_NT} {created here}
KIND_NT'kind of thing' {refined} {refers: infs'thing'}
COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: << kind=thing(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before printing the name of an artwork' {unit: 4}
IMPERATIVE_NT'after printing the name of an artwork' {unit: 4}
IMPERATIVE_NT'before printing the name of an artwork' {unit: 4} {imperative definition: 818}
IMPERATIVE_NT'after printing the name of an artwork' {unit: 4} {imperative definition: 819}
SENTENCE_NT'an artwork can be submitted or reserved' {unit: 4} {classified}
VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}
COMMON_NOUN_NT'an artwork' {refined} {refers: infs'artwork'} {creation: << kind=artwork(x) >>} {eval: TEST_VALUE_NT}
@ -125,49 +155,49 @@ ROOT_NT
COMMON_NOUN_NT'book' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: << kind=book(x) >>} {refers: infs'book'} {eval: TEST_VALUE_NT} {created here}
KIND_NT'kind of artwork' {refined} {refers: infs'artwork'}
COMMON_NOUN_NT'artwork' {refined} {refers: infs'artwork'} {creation: << kind=artwork(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before someone resolving a book when the person asked is not' {unit: 4}
IMPERATIVE_NT'carry out someone resolving a book' {unit: 4}
IMPERATIVE_NT'report someone resolving a book' {unit: 4}
IMPERATIVE_NT'before listing contents' {unit: 4}
IMPERATIVE_NT'before grouping together books' {unit: 4}
IMPERATIVE_NT'before someone resolving a book when the person asked is not' {unit: 4} {imperative definition: 820}
IMPERATIVE_NT'carry out someone resolving a book' {unit: 4} {imperative definition: 821}
IMPERATIVE_NT'report someone resolving a book' {unit: 4} {imperative definition: 822}
IMPERATIVE_NT'before listing contents' {unit: 4} {imperative definition: 823}
IMPERATIVE_NT'before grouping together books' {unit: 4} {imperative definition: 824}
SENTENCE_NT'a stamped envelope is a kind of thing' {unit: 4} {classified} {interpretation of subject: infs'book'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'stamped envelope' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: << kind=stamped envelope(x) >>} {refers: infs'stamped envelope'} {eval: TEST_VALUE_NT} {created here}
KIND_NT'kind of thing' {refined} {refers: infs'thing'}
COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: << kind=thing(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before someone resolving a stamped envelope when the person ' {unit: 4}
IMPERATIVE_NT'carry out someone resolving a stamped envelope' {unit: 4}
IMPERATIVE_NT'report someone resolving a stamped envelope' {unit: 4}
IMPERATIVE_NT'instead of someone resolving a stamped envelope when the per' {unit: 4}
IMPERATIVE_NT'before someone resolving a stamped envelope when the person ' {unit: 4} {imperative definition: 825}
IMPERATIVE_NT'carry out someone resolving a stamped envelope' {unit: 4} {imperative definition: 826}
IMPERATIVE_NT'report someone resolving a stamped envelope' {unit: 4} {imperative definition: 827}
IMPERATIVE_NT'instead of someone resolving a stamped envelope when the per' {unit: 4} {imperative definition: 828}
SENTENCE_NT'a dvd is a kind of artwork' {unit: 4} {classified} {interpretation of subject: infs'stamped envelope'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'dvd' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: << kind=dvd(x) >>} {refers: infs'dvd'} {eval: TEST_VALUE_NT} {created here}
KIND_NT'kind of artwork' {refined} {refers: infs'artwork'}
COMMON_NOUN_NT'artwork' {refined} {refers: infs'artwork'} {creation: << kind=artwork(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before someone resolving a dvd when the person asked is not ' {unit: 4}
IMPERATIVE_NT'carry out someone resolving a dvd' {unit: 4}
IMPERATIVE_NT'report someone resolving a dvd' {unit: 4}
IMPERATIVE_NT'instead of someone resolving a dvd when the person asked car' {unit: 4}
IMPERATIVE_NT'before listing contents' {unit: 4}
IMPERATIVE_NT'before grouping together dvds' {unit: 4}
IMPERATIVE_NT'before someone resolving a dvd when the person asked is not ' {unit: 4} {imperative definition: 829}
IMPERATIVE_NT'carry out someone resolving a dvd' {unit: 4} {imperative definition: 830}
IMPERATIVE_NT'report someone resolving a dvd' {unit: 4} {imperative definition: 831}
IMPERATIVE_NT'instead of someone resolving a dvd when the person asked car' {unit: 4} {imperative definition: 832}
IMPERATIVE_NT'before listing contents' {unit: 4} {imperative definition: 833}
IMPERATIVE_NT'before grouping together dvds' {unit: 4} {imperative definition: 834}
SENTENCE_NT'approaching is an action applying to one thing' {unit: 4} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'approaching'
UNPARSED_NOUN_NT'applying to one thing'
IMPERATIVE_NT'carry out someone approaching' {unit: 4}
IMPERATIVE_NT'carry out someone approaching' {unit: 4} {imperative definition: 835}
SENTENCE_NT'a coupon is a kind of thing' {unit: 4} {classified} {interpretation of subject: infs'dvd'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'coupon' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: << kind=coupon(x) >>} {refers: infs'coupon'} {eval: TEST_VALUE_NT} {created here}
KIND_NT'kind of thing' {refined} {refers: infs'thing'}
COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: << kind=thing(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'carry out someone resolving a coupon' {unit: 4}
IMPERATIVE_NT'carry out someone resolving a coupon' {unit: 4} {imperative definition: 836}
SENTENCE_NT'the block giving rule is not listed in any rulebook' {unit: 4} {classified}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {rule placement sense: negative} {special meaning: rule-listed-in}
UNPARSED_NOUN_NT'the block giving rule'
UNPARSED_NOUN_NT'in any rulebook'
IMPERATIVE_NT'check giving something to someone ( this is the block player' {unit: 4}
IMPERATIVE_NT'before someone resolving a coupon when the person asked is n' {unit: 4}
IMPERATIVE_NT'after someone giving a coupon to vanessa' {unit: 4}
IMPERATIVE_NT'check giving something to someone ( this is the block player' {unit: 4} {imperative definition: 837}
IMPERATIVE_NT'before someone resolving a coupon when the person asked is n' {unit: 4} {imperative definition: 838}
IMPERATIVE_NT'after someone giving a coupon to vanessa' {unit: 4} {imperative definition: 839}
SENTENCE_NT'infection color is a kind of value' {unit: 4} {classified} {interpretation of subject: infs'coupon'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'infection color' {refined} {creation: << kind=infection color(x) >>} {refers: infs'object'-k} {eval: TEST_VALUE_NT} {created here}
@ -227,7 +257,7 @@ ROOT_NT
AND_NT',' {refined}
PROPER_NOUN_NT'saffron silk' {refined} {refers: infs'saffron silk'} {eval: CONSTANT_NT'saffron silk' {kind: infection color} {instance: I86'saffron silk'[infection color]} {enumeration: 25}} {created here}
PROPER_NOUN_NT'cookie dough cream' {refined} {refers: infs'cookie dough cream'} {eval: CONSTANT_NT'cookie dough cream' {kind: infection color} {instance: I87'cookie dough cream'[infection color]} {enumeration: 26}} {created here}
IMPERATIVE_NT'to say list of flavors' {unit: 4}
IMPERATIVE_NT'to say list of flavors' {unit: 4} {imperative definition: 840}
SENTENCE_NT'understand "ask vanessa for [flavored ice cream]" as buying ' {unit: 4} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"ask vanessa for [flavored ice cream]"'
@ -240,8 +270,8 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'buying the flavor'
UNPARSED_NOUN_NT'applying to one infection color'
IMPERATIVE_NT'check buying the flavor' {unit: 4}
IMPERATIVE_NT'carry out buying the flavor' {unit: 4}
IMPERATIVE_NT'check buying the flavor' {unit: 4} {imperative definition: 841}
IMPERATIVE_NT'carry out buying the flavor' {unit: 4} {imperative definition: 842}
SENTENCE_NT'understand "ice cream" or "cream" or "ice" or "sherbet" or "' {unit: 4} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"ice cream" or "cream" or "ice" or "sherbet" or "sorbet"'
@ -275,12 +305,12 @@ ROOT_NT
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'the infection color property'
UNPARSED_NOUN_NT'referring to an ice cream cone'
IMPERATIVE_NT'carry out someone resolving an ice cream cone' {unit: 4}
IMPERATIVE_NT'instead of someone eating a fresh ice cream cone' {unit: 4}
IMPERATIVE_NT'report someone eating an ice cream cone' {unit: 4}
IMPERATIVE_NT'before printing the name of an ice cream cone' {unit: 4}
IMPERATIVE_NT'carry out someone resolving an ice cream cone' {unit: 4} {imperative definition: 843}
IMPERATIVE_NT'instead of someone eating a fresh ice cream cone' {unit: 4} {imperative definition: 844}
IMPERATIVE_NT'report someone eating an ice cream cone' {unit: 4} {imperative definition: 845}
IMPERATIVE_NT'before printing the name of an ice cream cone' {unit: 4} {imperative definition: 846}
HEADING_NT'section 2 - infection rules' {heading 5} {under: H5'section 2 - infection rules'} {unit: 4}
IMPERATIVE_NT'this is the infection rule' {unit: 4}
IMPERATIVE_NT'this is the infection rule' {unit: 4} {imperative definition: 847}
SENTENCE_NT'a person can be infected or clean' {unit: 4} {classified}
VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}
COMMON_NOUN_NT'a person' {refined} {refers: infs'person'} {creation: << kind=person(x) >>} {eval: TEST_VALUE_NT}
@ -293,11 +323,11 @@ ROOT_NT
COMMON_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'person'} {creation: << kind=person(x) >>} {eval: TEST_VALUE_NT}
ALLOWED_NT'has' {refined}
UNPARSED_NOUN_NT'infection color' {indefinite 'an' n/m/f nom/acc s} {refined}
IMPERATIVE_NT'every turn' {unit: 4}
IMPERATIVE_NT'definition' {unit: 4}
IMPERATIVE_NT'definition' {unit: 4}
IMPERATIVE_NT'when play begins' {unit: 4}
IMPERATIVE_NT'every turn' {unit: 4}
IMPERATIVE_NT'every turn' {unit: 4} {imperative definition: 848}
IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 849}
IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 850}
IMPERATIVE_NT'when play begins' {unit: 4} {imperative definition: 851}
IMPERATIVE_NT'every turn' {unit: 4} {imperative definition: 852}
SENTENCE_NT'understand "sneeze on [something]" as sneezing on' {unit: 4} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"sneeze on [something]"'
@ -306,11 +336,11 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'sneezing on'
UNPARSED_NOUN_NT'applying to one thing'
IMPERATIVE_NT'check sneezing on' {unit: 4}
IMPERATIVE_NT'carry out sneezing on' {unit: 4}
IMPERATIVE_NT'carry out someone sneezing on' {unit: 4}
IMPERATIVE_NT'report sneezing on' {unit: 4}
IMPERATIVE_NT'report someone sneezing on' {unit: 4}
IMPERATIVE_NT'check sneezing on' {unit: 4} {imperative definition: 853}
IMPERATIVE_NT'carry out sneezing on' {unit: 4} {imperative definition: 854}
IMPERATIVE_NT'carry out someone sneezing on' {unit: 4} {imperative definition: 855}
IMPERATIVE_NT'report sneezing on' {unit: 4} {imperative definition: 856}
IMPERATIVE_NT'report someone sneezing on' {unit: 4} {imperative definition: 857}
SENTENCE_NT'understand "inject [someone] with [something]" as injecting ' {unit: 4} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"inject [someone] with [something]"'
@ -331,10 +361,10 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'injecting it with'
UNPARSED_NOUN_NT'applying to two things'
IMPERATIVE_NT'check injecting it with' {unit: 4}
IMPERATIVE_NT'carry out injecting it with' {unit: 4}
IMPERATIVE_NT'after injecting the player with something' {unit: 4}
IMPERATIVE_NT'report injecting it with' {unit: 4}
IMPERATIVE_NT'check injecting it with' {unit: 4} {imperative definition: 858}
IMPERATIVE_NT'carry out injecting it with' {unit: 4} {imperative definition: 859}
IMPERATIVE_NT'after injecting the player with something' {unit: 4} {imperative definition: 860}
IMPERATIVE_NT'report injecting it with' {unit: 4} {imperative definition: 861}
HEADING_NT'section 3 - geography' {heading 5} {under: H5'section 3 - geography'} {unit: 4}
INCLUSION_NT'include locksmith by emily short' {unit: 4}
HEADING_NT'version 12 of locksmith by emily short begins here' {heading 0} {under: H0'version 12 of locksmith by emily short begins here'} {includes: Locksmith by Emily Short v12 } {unit: 4}
@ -359,9 +389,9 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'going toward'
UNPARSED_NOUN_NT'applying to one thing'
IMPERATIVE_NT'check going toward' {unit: 4}
IMPERATIVE_NT'carry out going toward' {unit: 4}
IMPERATIVE_NT'instead of waiting when the destination of the player is not' {unit: 4}
IMPERATIVE_NT'check going toward' {unit: 4} {imperative definition: 899}
IMPERATIVE_NT'carry out going toward' {unit: 4} {imperative definition: 900}
IMPERATIVE_NT'instead of waiting when the destination of the player is not' {unit: 4} {imperative definition: 901}
SENTENCE_NT'understand "stop" or "cease" as stopping' {unit: 4} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"stop" or "cease"'
@ -370,11 +400,11 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'stopping'
UNPARSED_NOUN_NT'applying to nothing'
IMPERATIVE_NT'carry out stopping' {unit: 4}
IMPERATIVE_NT'report stopping' {unit: 4}
IMPERATIVE_NT'after going to an air-conditioned room' {unit: 4}
IMPERATIVE_NT'after going from an air-conditioned room' {unit: 4}
IMPERATIVE_NT'instead of listening to an air-conditioned room' {unit: 4}
IMPERATIVE_NT'carry out stopping' {unit: 4} {imperative definition: 902}
IMPERATIVE_NT'report stopping' {unit: 4} {imperative definition: 903}
IMPERATIVE_NT'after going to an air-conditioned room' {unit: 4} {imperative definition: 904}
IMPERATIVE_NT'after going from an air-conditioned room' {unit: 4} {imperative definition: 905}
IMPERATIVE_NT'instead of listening to an air-conditioned room' {unit: 4} {imperative definition: 906}
SENTENCE_NT'the alfred cralle pool hall is a room' {unit: 4} {classified} {interpretation of subject: infs'person'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'alfred cralle pool hall' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'alfred cralle pool hall'} {eval: CONSTANT_NT'alfred cralle pool hall' {kind: object} {instance: I88'alfred cralle pool hall'} {enumeration: 0}} {created here}
@ -416,7 +446,7 @@ ROOT_NT
PROPER_NOUN_NT'felt door' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'felt door'} {eval: CONSTANT_NT'felt door' {kind: door} {instance: I90'felt door'} {enumeration: 0}}
PROPER_NOUN_NT'description' {refined} {eval: CONSTANT_NT {kind: texts valued property} {property: 'description'=text}}
PROPER_NOUN_NT'"It has a prominent lock, designed for an old-fashioned key.' {refined} {eval: CONSTANT_NT'"It has a prominent lock, designed for an old-fashioned key.' {kind: text}}
IMPERATIVE_NT'after locking a door with something in the presence of an ot' {unit: 4}
IMPERATIVE_NT'after locking a door with something in the presence of an ot' {unit: 4} {imperative definition: 907}
SENTENCE_NT'nancy johnson memorial square is west of the felt door' {unit: 4} {classified} {interpretation of subject: infs'key to the city'}
VERB_NT'is west of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: west of}
PROPER_NOUN_NT'nancy johnson memorial square' {refined} {refers: infs'nancy johnson memorial square'} {eval: CONSTANT_NT'nancy johnson memorial square' {kind: object} {instance: I92'nancy johnson memorial square'} {enumeration: 0}} {created here}
@ -478,8 +508,8 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'slot' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'slot'} {eval: CONSTANT_NT'slot' {kind: object} {instance: I97'slot'} {enumeration: 0}}
COMMON_NOUN_NT'container' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'container'} {creation: << kind=container(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'carry out inserting something into the slot' {unit: 4}
IMPERATIVE_NT'report inserting something into the slot' {unit: 4}
IMPERATIVE_NT'carry out inserting something into the slot' {unit: 4} {imperative definition: 908}
IMPERATIVE_NT'report inserting something into the slot' {unit: 4} {imperative definition: 909}
SENTENCE_NT'hamwi street is northeast of an iron gate' {unit: 4} {classified} {interpretation of subject: infs'slot'}
VERB_NT'is northeast of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: northeast of}
PROPER_NOUN_NT'hamwi street' {refined} {refers: infs'hamwi street'} {eval: CONSTANT_NT'hamwi street' {kind: object} {instance: I98'hamwi street'} {enumeration: 0}} {created here}
@ -503,7 +533,7 @@ ROOT_NT
AND_NT'and' {refined}
ADJECTIVE_NT'lockable' {refined} {predicate: lockable} {creation: << lockable(x) ^ lockable(x) >>}
ADJECTIVE_NT'unlocked' {refined} {predicate: unlocked} {creation: << unlocked(x) ^ unlocked(x) >>}
IMPERATIVE_NT'before printing the name of the iron gate while not opening ' {unit: 4}
IMPERATIVE_NT'before printing the name of the iron gate while not opening ' {unit: 4} {imperative definition: 910}
SENTENCE_NT'cold comfort ice cream is north of a metal door' {unit: 4} {classified} {interpretation of subject: infs'iron gate'}
VERB_NT'is north of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: north of}
PROPER_NOUN_NT'cold comfort ice cream' {refined} {refers: infs'cold comfort ice cream'} {eval: CONSTANT_NT'cold comfort ice cream' {kind: object} {instance: I100'cold comfort ice cream'} {enumeration: 0}} {created here}
@ -609,8 +639,8 @@ ROOT_NT
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"glass"'
UNPARSED_NOUN_NT'the box'
IMPERATIVE_NT'instead of attacking the closed emergency box' {unit: 4}
IMPERATIVE_NT'instead of attacking the open emergency box' {unit: 4}
IMPERATIVE_NT'instead of attacking the closed emergency box' {unit: 4} {imperative definition: 911}
IMPERATIVE_NT'instead of attacking the open emergency box' {unit: 4} {imperative definition: 912}
SENTENCE_NT'the syringe is in the emergency box' {unit: 4} {classified} {interpretation of subject: infs'emergency box'}
VERB_NT'is in' {verb 'be' 3p s act IS_TENSE +ve} {prep1: in}
PROPER_NOUN_NT'syringe' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'syringe'} {eval: CONSTANT_NT'syringe' {kind: object} {instance: I109'syringe'} {enumeration: 0}} {created here}
@ -713,9 +743,29 @@ ROOT_NT
SENTENCE_NT'use full-length room descriptions' {unit: 4} {classified}
VERB_NT'use' {verb 'use' 3p p act IS_TENSE +ve} {special meaning: use}
UNPARSED_NOUN_NT'full-length room descriptions'
IMPERATIVE_NT'after looking in an outdoors room' {unit: 4}
IMPERATIVE_NT'definition' {unit: 4}
IMPERATIVE_NT'before exiting when the player is in an indoors room' {unit: 4}
IMPERATIVE_NT'after looking in an outdoors room' {unit: 4} {imperative definition: 913}
IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 914}
DEFN_CONT_NT'a door is proximate' {unit: 4}
CODE_BLOCK_NT
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the front side of it is the location' {colon_block_command}
INVOCATION_NT'if the front side of it is the location' {phrase invoked: call}
CONDITION_CONTEXT_NT'front side of it is the location' {token check to do: <null-parse-node>} {token to be parsed against: <null-parse-node>}
TEST_PROPOSITION_NT'front side of it is the location' {proposition: << ('front side of it' == 'the location') >>} {term: 'front side of it'}
CODE_BLOCK_NT
INVOCATION_LIST_NT'yes' {results_from_splitting} {indent: 1}
INVOCATION_NT'yes' {phrase invoked: call}
CODE_BLOCK_NT {control structure: IF}
INVOCATION_LIST_NT'if the back side of it is the location' {colon_block_command}
INVOCATION_NT'if the back side of it is the location' {phrase invoked: call}
CONDITION_CONTEXT_NT'back side of it is the location' {token check to do: <null-parse-node>} {token to be parsed against: <null-parse-node>}
TEST_PROPOSITION_NT'back side of it is the location' {proposition: << ('back side of it' == 'the location') >>} {term: 'back side of it'}
CODE_BLOCK_NT
INVOCATION_LIST_NT'yes' {results_from_splitting} {indent: 1}
INVOCATION_NT'yes' {phrase invoked: call}
INVOCATION_LIST_NT'no'
INVOCATION_NT'no' {phrase invoked: call}
IMPERATIVE_NT'before exiting when the player is in an indoors room' {unit: 4} {imperative definition: 915}
SENTENCE_NT'blank is a room' {unit: 4} {classified} {interpretation of subject: infs'key to the city'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'blank' {refined} {refers: infs'blank'} {eval: CONSTANT_NT'blank' {kind: object} {instance: I113'blank'} {enumeration: 0}} {created here}
@ -941,15 +991,15 @@ ROOT_NT
PROPER_NOUN_NT'ned' {refined} {refers: infs'ned'} {eval: CONSTANT_NT'ned' {kind: man} {instance: I166'ned'} {enumeration: 0}}
RELATIONSHIP_NT'owns' {meaning: ownership-r} {refined}
PROPER_NOUN_NT'movie rental' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'movie rental store'} {eval: CONSTANT_NT'movie rental store' {kind: object} {instance: I104'movie rental store'} {enumeration: 0}}
IMPERATIVE_NT'after printing the name of someone ( called target ) while l' {unit: 4}
IMPERATIVE_NT'after printing the name of someone ( called target ) while l' {unit: 4} {imperative definition: 916}
SENTENCE_NT'the description of a person is usually "[The noun] [if the n' {unit: 4} {classified} {interpretation of subject: infs'ned'}
VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}
X_OF_Y_NT'description of a person' {definite 'the' n/m/f s/p nom/acc} {refined}
COMMON_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'person'} {creation: << kind=person(x) >>} {eval: TEST_VALUE_NT}
PROPER_NOUN_NT'description' {refined} {eval: CONSTANT_NT {kind: texts valued property} {property: 'description'=text}}
PROPER_NOUN_NT'"[The noun] [if the noun is clean]looks healthy[otherwise]is' {refined} {eval: CONSTANT_NT'"[The noun] [if the noun is clean]looks healthy[otherwise]is' {kind: text}}
IMPERATIVE_NT'after examining another person who is carrying something' {unit: 4}
IMPERATIVE_NT'when play begins' {unit: 4}
IMPERATIVE_NT'after examining another person who is carrying something' {unit: 4} {imperative definition: 917}
IMPERATIVE_NT'when play begins' {unit: 4} {imperative definition: 918}
HEADING_NT'section 5 - conversation' {heading 5} {under: H5'section 5 - conversation'} {unit: 4}
SENTENCE_NT'a person has a table name called conversation' {unit: 4} {classified}
VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}
@ -958,8 +1008,8 @@ ROOT_NT
PROPERTYCALLED_NT'called'
UNPARSED_NOUN_NT'table name' {indefinite 'a' n/m/f nom/acc s}
UNPARSED_NOUN_NT'conversation'
IMPERATIVE_NT'instead of asking someone about something' {unit: 4}
IMPERATIVE_NT'instead of telling someone about something' {unit: 4}
IMPERATIVE_NT'instead of asking someone about something' {unit: 4} {imperative definition: 919}
IMPERATIVE_NT'instead of telling someone about something' {unit: 4} {imperative definition: 920}
SENTENCE_NT'understand "recap" or "recall" or "review" as recalling conv' {unit: 4} {classified}
VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}
UNPARSED_NOUN_NT'"recap" or "recall" or "review"'
@ -968,7 +1018,7 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}
UNPARSED_NOUN_NT'recalling conversations'
UNPARSED_NOUN_NT'applying to nothing'
IMPERATIVE_NT'carry out recalling conversations' {unit: 4}
IMPERATIVE_NT'carry out recalling conversations' {unit: 4} {imperative definition: 921}
SENTENCE_NT'the conversation of a person is usually table of general chi' {unit: 4} {classified} {interpretation of subject: infs'person'}
VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}
X_OF_Y_NT'conversation of a person' {definite 'the' n/m/f s/p nom/acc} {refined}
@ -983,7 +1033,7 @@ ROOT_NT
PROPER_NOUN_NT'conversation' {refined} {eval: CONSTANT_NT {kind: table names valued property} {property: 'conversation'=table name}}
PROPER_NOUN_NT'table of vanessa chatter' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT'table of vanessa chatter' {kind: table name} {table: table_data}{meaning: {table of vanessa chatter = TABLE_MC}}}
TABLE_NT'table of vanessa chatter topic reply summary turn stamp char' {unit: 4}
IMPERATIVE_NT'after reading a command' {unit: 4}
IMPERATIVE_NT'after reading a command' {unit: 4} {imperative definition: 922}
HEADING_NT'section 6 - movement description' {heading 5} {under: H5'section 6 - movement description'} {unit: 4}
SENTENCE_NT'a person has some text called walk style' {unit: 4} {classified}
VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}
@ -1030,8 +1080,8 @@ ROOT_NT
PROPER_NOUN_NT'"sashay"' {refined} {eval: CONSTANT_NT'"sashay"' {kind: text}}
TABLE_NT'table of visible exits character second third heading chosen' {unit: 4}
TABLE_NT'table of visible entrances character second third heading ch' {unit: 4}
IMPERATIVE_NT'to clear ( current table - a table name )' {unit: 4}
IMPERATIVE_NT'to tidy departures of ( current table - a table name )' {unit: 4}
IMPERATIVE_NT'to clear ( current table - a table name )' {unit: 4} {imperative definition: 923}
IMPERATIVE_NT'to tidy departures of ( current table - a table name )' {unit: 4} {imperative definition: 924}
SENTENCE_NT'a door has a person called last opener' {unit: 4} {classified} {interpretation of subject: infs'person'}
VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'door' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'door'} {creation: << kind=door(x) >>} {eval: TEST_VALUE_NT}
@ -1039,21 +1089,21 @@ ROOT_NT
PROPERTYCALLED_NT'called'
UNPARSED_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s}
UNPARSED_NOUN_NT'last opener'
IMPERATIVE_NT'report someone opening a door' {unit: 4}
IMPERATIVE_NT'report someone going through a door ( called route )' {unit: 4}
IMPERATIVE_NT'report someone opening a door' {unit: 4} {imperative definition: 925}
IMPERATIVE_NT'report someone going through a door ( called route )' {unit: 4} {imperative definition: 926}
SENTENCE_NT'the last thing named is a thing that varies' {unit: 4} {classified} {interpretation of subject: infs'door'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'last thing named' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'last thing named' {nonlocal: 'last thing named'(var)thing}} {created here}
COMMON_NOUN_NT'thing that varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: << kind=things variable-pointer(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before printing the name of something ( called target ) whic' {unit: 4}
IMPERATIVE_NT'report someone going a direction' {unit: 4}
IMPERATIVE_NT'this is the movement reporting rule' {unit: 4}
IMPERATIVE_NT'to generate descriptions from ( current table - a table name' {unit: 4}
IMPERATIVE_NT'before printing the name of something ( called target ) whic' {unit: 4} {imperative definition: 927}
IMPERATIVE_NT'report someone going a direction' {unit: 4} {imperative definition: 928}
IMPERATIVE_NT'this is the movement reporting rule' {unit: 4} {imperative definition: 929}
IMPERATIVE_NT'to generate descriptions from ( current table - a table name' {unit: 4} {imperative definition: 930}
SENTENCE_NT'the last person named is a person that varies' {unit: 4} {classified} {interpretation of subject: infs'door'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'last person named' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'last person named' {nonlocal: 'last person named'(var)person}} {created here}
COMMON_NOUN_NT'person that varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: << kind=people variable-pointer(x) >>} {eval: TEST_VALUE_NT}
IMPERATIVE_NT'before printing the name of a person ( called target )' {unit: 4}
IMPERATIVE_NT'before printing the name of a person ( called target )' {unit: 4} {imperative definition: 931}
SENTENCE_NT'group size is a number that varies' {unit: 4} {classified} {interpretation of subject: infs'door'}
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'group size' {refined} {eval: NONLOCAL_VARIABLE_NT'group size' {nonlocal: 'group size'(var)number}} {created here}
@ -1062,19 +1112,19 @@ ROOT_NT
VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}
PROPER_NOUN_NT'group size' {refined} {eval: NONLOCAL_VARIABLE_NT'group size' {nonlocal: 'group size'(var)number}{meaning: {group size = VARIABLE_MC}}}
PROPER_NOUN_NT'1' {refined} {eval: CONSTANT_NT'1' {kind: number} {explicit literal} {number: 1}}
IMPERATIVE_NT'to clear marked people' {unit: 4}
IMPERATIVE_NT'before listing nondescript items' {unit: 4}
IMPERATIVE_NT'to describe patients' {unit: 4}
IMPERATIVE_NT'to say ( named character - a man ) as pronoun' {unit: 4}
IMPERATIVE_NT'to say ( named character - a woman ) as pronoun' {unit: 4}
IMPERATIVE_NT'to say looks as though dipped in for ( index - a number )' {unit: 4}
IMPERATIVE_NT'to clear marked people' {unit: 4} {imperative definition: 932}
IMPERATIVE_NT'before listing nondescript items' {unit: 4} {imperative definition: 933}
IMPERATIVE_NT'to describe patients' {unit: 4} {imperative definition: 934}
IMPERATIVE_NT'to say ( named character - a man ) as pronoun' {unit: 4} {imperative definition: 935}
IMPERATIVE_NT'to say ( named character - a woman ) as pronoun' {unit: 4} {imperative definition: 936}
IMPERATIVE_NT'to say looks as though dipped in for ( index - a number )' {unit: 4} {imperative definition: 937}
TABLE_NT'table of dipping phrases dipping "looks as though dipped in"' {unit: 4}
SENTENCE_NT'a door is usually scenery' {unit: 4} {classified} {interpretation of subject: infs'door'}
VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}
COMMON_NOUN_NT'door' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'door'} {creation: << kind=door(x) >>} {eval: TEST_VALUE_NT}
ADJECTIVE_NT'scenery' {refined} {predicate: scenery} {creation: << scenery(x) ^ scenery(x) >>}
IMPERATIVE_NT'to make delimiter ( index - a number ) of ( count - a number' {unit: 4}
IMPERATIVE_NT'to say optional comma' {unit: 4}
IMPERATIVE_NT'to make delimiter ( index - a number ) of ( count - a number' {unit: 4} {imperative definition: 938}
IMPERATIVE_NT'to say optional comma' {unit: 4} {imperative definition: 939}
SENTENCE_NT'test me with go to cold comfort / z / z / z / z / ask vaness' {unit: 4} {classified}
VERB_NT'test' {verb 'test' 3p p act IS_TENSE +ve} {prep2: with} {special meaning: test-with}
UNPARSED_NOUN_NT'me'

View file

@ -1,36 +1,35 @@
100.0% in inform7 run
67.4% in compilation to Inter
67.3% in compilation to Inter
25.9% in //ImperativeDefinitions::compile_first_block//
8.4% in //ImperativeDefinitions::compile_as_needed//
7.1% in //Strings::compile_responses//
8.5% in //ImperativeDefinitions::compile_as_needed//
6.9% in //Strings::compile_responses//
6.2% in //InferenceSubjects::emit_all//
3.8% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
2.0% in //RTRules::RulePrintingRule_routine//
4.2% in //MajorNodes::pre_pass//
3.3% in //MajorNodes::pass_1//
2.1% in //RTRules::RulePrintingRule_routine//
1.9% in //RTRules::rulebooks_array_array//
1.7% in //ImperativeDefinitions::find_phrases_and_rules//
1.5% in //ImperativeDefinitions::find_phrases_and_rules//
1.0% in //RTVerbs::ConjugateVerb//
0.5% in //World::stage_V//
0.3% in //MajorNodes::pass_2//
0.3% in //RTRelations::compile_defined_relations//
0.3% in //RTRules::compile_rulebooks//
0.3% in //World::stage_V//
0.1% in //RTCommandGrammars::compile_all//
0.1% in //RTKinds::compile_data_type_support_routines//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
3.3% not specifically accounted for
30.1% in running Inter pipeline
9.8% in inter step 2/12: link
9.7% in step preparation
6.9% in inter step 12/12: generate inform6 -> auto.inf
3.2% not specifically accounted for
30.3% in running Inter pipeline
9.5% in inter step 2/12: link
9.5% 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
0.1% in inter step 4/12: parse-linked-matter
0.1% in inter step 5/12: resolve-conditional-compilation
0.1% in inter step 6/12: assimilate
0.1% in inter step 7/12: resolve-external-symbols
0.1% in inter step 8/12: inspect-plugs
2.1% not specifically accounted for
2.0% in supervisor
0.4% not specifically accounted for
2.6% not specifically accounted for
2.1% in supervisor
0.2% not specifically accounted for

View file

@ -1,3 +1,4 @@
PhrasalDefnNotOnObjects
PM_APUnknown
PM_APWithBadWhen
PM_APWithDisjunction

View file

@ -1,14 +1,16 @@
Inform 7 build 6M32 has started.
Inform 7 v10.1.0 has started.
I've now read your source text, which is 16 words long.
I've also read Standard Rules by Graham Nelson, which is 42506 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
Problem__ PM_AdjDomainSlippery
>--> In 'Definition' (source text, line 3) you defined an adjective by 'An
open door is wibbly if it is 100 years old' intending that it would apply
to 'An open door': but this is slippery, because it can change during play.
Definitions can only be made in cases where it's clear for any given value
or object what definition will apply. For instance, 'Definition: a door is
shiny if ...' is fine, but 'Definition: an open door is shiny if ...' is
not allowed - Inform wouldn't know whether or not to apply it to the Big
Blue Door (say), since it would only apply some of the time.
Inform 7 has finished: 57 centiseconds used.
>--> In 'An open door is wibbly if it is 100 years old' (source text, line 3)
you defined an adjective by 'An open door is wibbly if it is 100 years old'
intending that it would apply to 'An open door': but this is slippery,
because it can change during play. Definitions can only be made in cases
where it's clear for any given value or object what definition will apply.
For instance, 'Definition: a door is shiny if ...' is fine, but
'Definition: an open door is shiny if ...' is not allowed - Inform wouldn't
know whether or not to apply it to the Big Blue Door (say), since it would
only apply some of the time.
Inform 7 has finished.

View file

@ -1,13 +1,15 @@
Inform 7 build 6M32 has started.
Inform 7 v10.1.0 has started.
I've now read your source text, which is 14 words long.
I've also read Standard Rules by Graham Nelson, which is 42506 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
Problem__ PM_AdjDomainSurreal
>--> In 'Definition' (source text, line 3) you defined an adjective by
'"Frogs" is wibbly if it is 100 years old' intending that it would apply to
'"Frogs"': but this isn't allowed as the domain of a definition, since
adjectives like this can be applied only to specific things, kinds of
things or kinds of values: so 'Definition: a door is ajar if...' is fine,
because a door is a kind of thing, and 'Definition: a number is prime if
...' is fine too, but 'Definition: 5 is prime if ...' is not allowed.
Inform 7 has finished: 57 centiseconds used.
>--> In '"Frogs" is wibbly if it is 100 years old' (source text, line 3) you
defined an adjective by '"Frogs" is wibbly if it is 100 years old'
intending that it would apply to '"Frogs"': but this isn't allowed as the
domain of a definition, since adjectives like this can be applied only to
specific things, kinds of things or kinds of values: so 'Definition: a door
is ajar if...' is fine, because a door is a kind of thing, and 'Definition:
a number is prime if ...' is fine too, but 'Definition: 5 is prime if ...'
is not allowed.
Inform 7 has finished.

View file

@ -1,16 +1,19 @@
Inform 7 build 6M45 has started.
Inform 7 v10.1.0 has started.
I've now read your source text, which is 98 words long.
I've also read Standard Rules by Graham Nelson, which is 42468 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
Problem__ PM_AdjDomainTopic
>--> In 'Definition' (source text, line 14) you defined an adjective by 'a
>--> In 'a topic is legendary rather than mundane if it is a topic listed in
the Table of Legend' (source text, line 14) you defined an adjective by 'a
topic is legendary rather than mundane if it is a topic listed in the Table
of Legend' intending that it would apply to 'a topic': but this isn't
allowed as the domain of a definition, because 'topic' doesn't behave the
way other kinds of value do when it comes to making comparisons.
Problem__ PM_AdjDomainTopic
>--> In 'Definition' (source text, line 14) you defined an adjective by 'a
>--> In 'a topic is legendary rather than mundane if it is a topic listed in
the Table of Legend' (source text, line 14) you defined an adjective by 'a
topic is legendary rather than mundane if it is a topic listed in the Table
of Legend' intending that it would apply to 'a topic': again, this isn't
allowed as the domain of a definition.
Inform 7 has finished: 76 centiseconds used.
Inform 7 has finished.

View file

@ -1,10 +1,12 @@
Inform 7 build 6M32 has started.
Inform 7 v10.1.0 has started.
I've now read your source text, which is 15 words long.
I've also read Standard Rules by Graham Nelson, which is 42506 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
Problem__ PM_AdjDomainUnknown
>--> In 'Definition' (source text, line 3) you defined an adjective by 'A
blorgle is wibbly if it is 100 years old' intending that it would apply to
'A blorgle': but this isn't a thing, a kind of thing or a kind of value,
and indeed doesn't have any meaning I can make sense of.
Inform 7 has finished: 57 centiseconds used.
>--> In 'A blorgle is wibbly if it is 100 years old' (source text, line 3)
you defined an adjective by 'A blorgle is wibbly if it is 100 years old'
intending that it would apply to 'A blorgle': but this isn't a thing, a
kind of thing or a kind of value, and indeed doesn't have any meaning I can
make sense of.
Inform 7 has finished.

View file

@ -1,10 +1,12 @@
Inform 7 build 6M40 has started.
Inform 7 v10.1.0 has started.
I've now read your source text, which is 14 words long.
I've also read Standard Rules by Graham Nelson, which is 42506 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
Problem__ PM_AdjDomainVague
>--> In 'Definition' (source text, line 2) you defined an adjective by 'a
sayable value is green if it is 0' intending that it would apply to 'a
sayable value': but this isn't allowed as the domain of a definition, since
it potentially describes many different kinds, not just one.
Inform 7 has finished: 72 centiseconds used.
>--> In 'a sayable value is green if it is 0' (source text, line 2) you
defined an adjective by 'a sayable value is green if it is 0' intending
that it would apply to 'a sayable value': but this isn't allowed as the
domain of a definition, since it potentially describes many different
kinds, not just one.
Inform 7 has finished.

View file

@ -4,8 +4,8 @@ I've also read Basic Inform by Graham Nelson, which is 7687 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
Problem__ PM_AdjectiveCircular
>--> In 'Definition' (source text, line 2) you defined an adjective by 'a big
number is big if it is 123' intending that it would apply to 'a big
number': but this doesn't really define an adjective, because it seems to
be circular - it is involved in its own definition.
>--> In 'a big number is big if it is 123' (source text, line 2) you defined
an adjective by 'a big number is big if it is 123' intending that it would
apply to 'a big number': but this doesn't really define an adjective,
because it seems to be circular - it is involved in its own definition.
Inform 7 has finished.

View file

@ -1,9 +1,10 @@
Inform 7 build 6M25 has started.
Inform 7 v10.1.0 has started.
I've now read your source text, which is 10 words long.
I've also read Standard Rules by Graham Nelson, which is 42500 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
Problem__ PM_AdjectivePunctuated
>--> The sentence 'Definition' (source text, line 2) seems to create an
adjective with the name 'blah () ()', but adjectives have to be contain
only unpunctuated words.
Inform 7 has finished: 17 centiseconds used.
>--> The sentence 'a person is blah () ()' (source text, line 2) seems to
create an adjective with the name 'blah () ()', but adjectives have to be
contain only unpunctuated words.
Inform 7 has finished.

View file

@ -1,9 +1,10 @@
Inform 7 build 6L26 has started.
Inform 7 v10.1.0 has started.
I've now read your source text, which is 13 words long.
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
Problem__ PM_ArticleAsAdjective
>--> You wrote 'Definition' (source text, line 3): but a defined adjective
cannot consist only of an article such as 'a' or 'the', since this will
lead to parsing ambiguities.
Inform 7 has finished: 14 centiseconds used.
>--> You wrote 'A room is the if it is dark' (source text, line 3): but a
defined adjective cannot consist only of an article such as 'a' or 'the',
since this will lead to parsing ambiguities.
Inform 7 has finished.

View file

@ -1,15 +1,16 @@
Inform 7 build 6M33 has started.
Inform 7 v10.1.0 has started.
I've now read your source text, which is 110 words long.
I've also read Standard Rules by Graham Nelson, which is 42506 words long.
I've also read English Language by Graham Nelson, which is 2288 words long.
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
I've also read English Language by Graham Nelson, which is 2328 words long.
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
Problem__ PM_BadImplicationDomain
>--> You wrote 'Definition' (source text, line 3): but that's an implication
where the condition to qualify is not one that I can determine in advance
of the start of play, since it involves more than simple either/or
properties plus a kind. (For example, adjectives like 'adjacent' or
'visible' here are too difficult to determine.)
>--> You wrote 'A thing is uncolored if it is not colored' (source text, line 3):
but that's an implication where the condition to qualify is not one that I
can determine in advance of the start of play, since it involves more than
simple either/or properties plus a kind. (For example, adjectives like
'adjacent' or 'visible' here are too difficult to determine.)
Problem__ PM_BadImplicationDomain
>--> You wrote 'Definition' (source text, line 2): again, that's an
implication where the condition to qualify is not one that I can determine
in advance of the start of play.
Inform 7 has finished: 20 centiseconds used.
>--> You wrote 'A thing is colored if it provides the property color' (source
text, line 2): again, that's an implication where the condition to qualify
is not one that I can determine in advance of the start of play.
Inform 7 has finished.

View file

@ -24,18 +24,32 @@ void ImperativeSubtrees::accept_all(void) {
}
void ImperativeSubtrees::accept(parse_node *p) {
ImperativeSubtrees::accept_inner(p, TRUE);
}
void ImperativeSubtrees::accept_body(parse_node *p) {
ImperativeSubtrees::accept_inner(p, FALSE);
}
void ImperativeSubtrees::accept_inner(parse_node *p, int accept_header) {
if ((Node::get_type(p) == IMPERATIVE_NT) && (p->down == NULL)) {
if (Node::get_impdef(p)) return;
parse_node *header = p;
parse_node *end_def = p;
while ((end_def->next) && (Node::get_type(end_def->next) == UNKNOWN_NT))
end_def = end_def->next;
if (p == end_def) return; /* |IMPERATIVE_NT| not followed by any |UNKNOWN_NT|s */
/* splice so that |p->next| to |end_def| become the children of |p|: */
p->down = p->next;
p->next = end_def->next;
end_def->next = NULL;
for (parse_node *inv_p = p->down; inv_p; inv_p = inv_p->next)
Node::set_type(inv_p, INVOCATION_LIST_NT);
@<Parse the structure of the code block@>;
if (header != end_def) {
/* splice so that |p->next| to |end_def| become the children of |p|: */
p->down = p->next;
p->next = end_def->next;
end_def->next = NULL;
for (parse_node *inv_p = p->down; inv_p; inv_p = inv_p->next)
Node::set_type(inv_p, INVOCATION_LIST_NT);
@<Parse the structure of the code block@>;
}
/* worry about the preamble in the node p */
if (accept_header)
Node::set_impdef(header,
ImperativeDefinitions::make_imperative_definition(header));
}
}

View file

@ -117,6 +117,8 @@ organisation, and are not directly functional in themselves.
global_pass_state.near_start_of_extension = 0; break;
case IMPERATIVE_NT: @<Pass through an IMPERATIVE node@>; break;
case DEFN_CONT_NT: break;
case SENTENCE_NT: @<Pass through a SENTENCE node@>; break;
case TRACE_NT: @<Pass through a TRACE node@>; break;
@ -143,16 +145,11 @@ organisation, and are not directly functional in themselves.
@ This is a little convoluted: see //Imperative Subtrees// for how
"acceptance" tidies up the nodes in the syntax tree corresponding to a block
of imperative code. After that, we look out for adjectives defined by phrases,
and for phrases with names, since both will affect how we read sentences in
passes 1 and 2.
of imperative code.
@<Pass through an IMPERATIVE node@> =
if (global_pass_state.pass == 0) {
if (global_pass_state.pass == 0)
SyntaxTree::traverse_run(p, ImperativeSubtrees::accept, IMPERATIVE_NT);
Phrases::Adjectives::look_for_headers(p);
Phrases::Usage::predeclare_name_in(p);
}
@ |SENTENCE_NT| nodes are by far the most varied and difficult. In the pre-pass,
we call //Classifying::sentence// to have them diagrammed, which determines

View file

@ -47,6 +47,8 @@ void CoreSyntax::create_node_types(void) {
@
@e DEFN_CONT_NT
@e ALLOWED_NT /* "an animal is allowed to have a description" */
@e EVERY_NT /* "every container" */
@e ADJECTIVE_NT /* "open" */
@ -54,11 +56,13 @@ void CoreSyntax::create_node_types(void) {
@e CREATED_NT /* "a vehicle called Sarah Jane's car" */
@<Create additional level 3 structural nodes@> =
NodeType::new(DEFN_CONT_NT, I"DEFN_CONT_NT", 0, INFTY, L2_NCAT, ASSERT_NFLAG);
NodeType::new(ALLOWED_NT, I"ALLOWED_NT", 1, 1, L3_NCAT, ASSERT_NFLAG);
NodeType::new(EVERY_NT, I"EVERY_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG);
NodeType::new(ADJECTIVE_NT, I"ADJECTIVE_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG);
NodeType::new(PROPERTYCALLED_NT, I"PROPERTYCALLED_NT", 2, 2, L3_NCAT, 0);
NodeType::new(CREATED_NT, I"CREATED_NT", 0, 0, L3_NCAT, ASSERT_NFLAG);
NodeType::new(CREATED_NT, I"CREATED_NT", 0, 0, L3_NCAT, 0);
@
@ -280,6 +284,7 @@ void CoreSyntax::grant_unit_permissions(void) {
@e classified_ANNOT /* |int|: this sentence has been classified */
@e clears_pronouns_ANNOT /* |int|: this sentence erases the current value of "it" */
@e impdef_ANNOT /* |imperative_defn|: for blocks of imperative code */
@e implicit_in_creation_of_ANNOT /* |inference_subject|: for assemblies */
@e implicitness_count_ANNOT /* int: keeping track of recursive assemblies */
@e interpretation_of_subject_ANNOT /* |inference_subject|: subject, during passes */
@ -287,10 +292,12 @@ void CoreSyntax::grant_unit_permissions(void) {
@e you_can_ignore_ANNOT /* |int|: for assertions now drained of meaning */
= (early code)
DECLARE_ANNOTATION_FUNCTIONS(impdef, imperative_defn)
DECLARE_ANNOTATION_FUNCTIONS(implicit_in_creation_of, inference_subject)
DECLARE_ANNOTATION_FUNCTIONS(interpretation_of_subject, inference_subject)
@ =
MAKE_ANNOTATION_FUNCTIONS(impdef, imperative_defn)
MAKE_ANNOTATION_FUNCTIONS(implicit_in_creation_of, inference_subject)
MAKE_ANNOTATION_FUNCTIONS(interpretation_of_subject, inference_subject)
@ -300,6 +307,8 @@ void CoreSyntax::declare_L2_annotations(void) {
classified_ANNOT, CoreSyntax::write_classified_ANNOT);
Annotations::declare_type(
clears_pronouns_ANNOT, CoreSyntax::write_clears_pronouns_ANNOT);
Annotations::declare_type(
impdef_ANNOT, CoreSyntax::write_impdef_ANNOT);
Annotations::declare_type(
implicit_in_creation_of_ANNOT, CoreSyntax::write_implicit_in_creation_of_ANNOT);
Annotations::declare_type(
@ -319,6 +328,10 @@ void CoreSyntax::write_clears_pronouns_ANNOT(text_stream *OUT, parse_node *p) {
if (Annotations::read_int(p, clears_pronouns_ANNOT))
WRITE(" {clears pronouns}");
}
void CoreSyntax::write_impdef_ANNOT(text_stream *OUT, parse_node *p) {
if (Node::get_impdef(p))
WRITE(" {imperative definition: %d}", Node::get_impdef(p)->allocation_id);
}
void CoreSyntax::write_implicit_in_creation_of_ANNOT(text_stream *OUT, parse_node *p) {
if (Node::get_implicit_in_creation_of(p))
WRITE(" {implicit in creation of: $j}", Node::get_implicit_in_creation_of(p));
@ -344,6 +357,7 @@ void CoreSyntax::grant_L2_permissions(void) {
Annotations::allow_for_category(L2_NCAT, clears_pronouns_ANNOT);
Annotations::allow_for_category(L2_NCAT, interpretation_of_subject_ANNOT);
Annotations::allow_for_category(L2_NCAT, verb_problem_issued_ANNOT);
Annotations::allow(IMPERATIVE_NT, impdef_ANNOT);
Annotations::allow(IMPERATIVE_NT, indentation_level_ANNOT);
Annotations::allow(SENTENCE_NT, implicit_in_creation_of_ANNOT);
Annotations::allow(SENTENCE_NT, implicitness_count_ANNOT);

View file

@ -508,7 +508,6 @@ matches the single term of the determination type of each CGL in the list.
int first_flag = TRUE;
LOOP_THROUGH_UNSORTED_CG_LINES(cgl, cg) {
parse_node *spec_of_line = DeterminationTypes::get_single_term(&(cgl->cgl_type));
LOG("CGL $g --> $P\n", cgl, spec_of_line);
if (first_flag) { /* initially no expectations: |spec_union| is meaningless */
spec_union = spec_of_line; /* so we set it to the first result */
first_flag = FALSE;

View file

@ -380,7 +380,7 @@ void Phrases::TypeData::Textual::parse(ph_type_data *phtd, wording XW, wording *
}
}
phtd->registration_text = XW;
Phrases::TypeData::Textual::phtd_parse_word_sequence(phtd, XW);
Phrases::TypeData::Textual::phtd_parse_word_sequence(phtd);
}
@<Find the first comma outside of parentheses, if any exists@> =
@ -762,10 +762,11 @@ behaviour have been stripped away, and what's left is the text which will
form the word and token sequences:
=
void Phrases::TypeData::Textual::phtd_parse_word_sequence(ph_type_data *phtd, wording W) {
void Phrases::TypeData::Textual::phtd_parse_word_sequence(ph_type_data *phtd) {
phtd->no_tokens = 0;
phtd->no_words = 0;
wording W = phtd->registration_text;
int i = Wordings::first_wn(W);
while (i <= Wordings::last_wn(W)) {
int word_to_add = 0; /* redundant assignment to keep |gcc| happy */
@ -779,6 +780,7 @@ void Phrases::TypeData::Textual::phtd_parse_word_sequence(ph_type_data *phtd, wo
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_PhraseTooLong),
"this phrase has too many words",
"and needs to be simplified.");
phtd->registration_text = Wordings::up_to(W, i-1);
return;
}
phtd->word_sequence[phtd->no_words++] = word_to_add;

View file

@ -17,6 +17,7 @@ typedef struct imperative_defn {
typedef struct imperative_defn_family {
struct text_stream *family_name;
struct method_set *methods;
CLASS_DEFINITION
} imperative_defn_family;
@ -29,24 +30,201 @@ imperative_defn_family *RULE_IN_RULEBOOK_EFF_family = NULL; /* "Before taking a
imperative_defn_family *ImperativeDefinitions::new_family(text_stream *name) {
imperative_defn_family *family = CREATE(imperative_defn_family);
family->family_name = Str::duplicate(name);
family->methods = Methods::new_set();
return family;
}
void ImperativeDefinitions::create_families(void) {
AS_YET_UNKNOWN_EFF_family = ImperativeDefinitions::new_family(I"AS_YET_UNKNOWN_EFF");
DEFINITIONAL_PHRASE_EFF_family = ImperativeDefinitions::new_family(I"DEFINITIONAL_PHRASE_EFF");
RULE_NOT_IN_RULEBOOK_EFF_family = ImperativeDefinitions::new_family(I"RULE_NOT_IN_RULEBOOK_EFF");
TO_PHRASE_EFF_family = ImperativeDefinitions::new_family(I"TO_PHRASE_EFF");
RULE_IN_RULEBOOK_EFF_family = ImperativeDefinitions::new_family(I"RULE_IN_RULEBOOK_EFF");
@ |CLAIM_IMP_DEFN_MTID| is for deciding from the syntax of a preamble whether
this definition should belong to the family or not.
@e CLAIM_IMP_DEFN_MTID
=
VOID_METHOD_TYPE(CLAIM_IMP_DEFN_MTID, imperative_defn_family *f, imperative_defn *id)
void ImperativeDefinitions::identify(imperative_defn *id) {
imperative_defn_family *f;
LOOP_OVER(f, imperative_defn_family)
if (id->family == AS_YET_UNKNOWN_EFF_family)
VOID_METHOD_CALL(f, CLAIM_IMP_DEFN_MTID, id);
}
@
=
void ImperativeDefinitions::create_families(void) {
AS_YET_UNKNOWN_EFF_family = ImperativeDefinitions::new_family(I"AS_YET_UNKNOWN_EFF");
DEFINITIONAL_PHRASE_EFF_family = ImperativeDefinitions::new_family(I"DEFINITIONAL_PHRASE_EFF");
METHOD_ADD(DEFINITIONAL_PHRASE_EFF_family, CLAIM_IMP_DEFN_MTID, ImperativeDefinitions::Defn_claim);
RULE_NOT_IN_RULEBOOK_EFF_family = ImperativeDefinitions::new_family(I"RULE_NOT_IN_RULEBOOK_EFF");
METHOD_ADD(RULE_NOT_IN_RULEBOOK_EFF_family, CLAIM_IMP_DEFN_MTID, ImperativeDefinitions::RNIR_claim);
TO_PHRASE_EFF_family = ImperativeDefinitions::new_family(I"TO_PHRASE_EFF");
METHOD_ADD(TO_PHRASE_EFF_family, CLAIM_IMP_DEFN_MTID, ImperativeDefinitions::To_claim);
RULE_IN_RULEBOOK_EFF_family = ImperativeDefinitions::new_family(I"RULE_IN_RULEBOOK_EFF");
METHOD_ADD(RULE_IN_RULEBOOK_EFF_family, CLAIM_IMP_DEFN_MTID, ImperativeDefinitions::RIR_claim);
}
@ =
<definition-preamble> ::=
definition ==> { -, DEFINITIONAL_PHRASE_EFF_family }
@ =
void ImperativeDefinitions::Defn_claim(imperative_defn_family *self, imperative_defn *id) {
wording W = Node::get_text(id->at);
if (<definition-preamble>(W)) {
id->family = DEFINITIONAL_PHRASE_EFF_family;
if ((id->at->next) && (id->at->down == NULL) &&
(Node::get_type(id->at->next) == IMPERATIVE_NT)) {
ImperativeSubtrees::accept_body(id->at->next);
Node::set_type(id->at->next, DEFN_CONT_NT);
}
Phrases::Adjectives::look_for_headers(id->at);
}
}
@ =
<rnir-preamble> ::=
this is the {... rule} | ==> { TRUE, - }
this is the rule | ==> @<Issue PM_NamelessRule problem@>
this is ... rule | ==> @<Issue PM_UnarticledRule problem@>
this is ... rules | ==> @<Issue PM_PluralisedRule problem@>
<event-rule-preamble> ==> { FALSE, - }
=
void ImperativeDefinitions::RNIR_claim(imperative_defn_family *self, imperative_defn *id) {
wording W = Node::get_text(id->at);
if (<rnir-preamble>(W)) {
id->family = RULE_NOT_IN_RULEBOOK_EFF_family;
if (<<r>>) {
wording RW = GET_RW(<rnir-preamble>, 1);
if (Rules::vet_name(RW)) Rules::obtain(RW, TRUE);
}
}
}
@ =
<to-phrase-preamble> ::=
to | ==> @<Issue PM_BareTo problem@>
to ... ( called ... ) | ==> @<Issue PM_DontCallPhrasesWithCalled problem@>
{to ...} ( this is the {### function} inverse to ### ) | ==> { TRUE, -, <<written>> = TRUE, <<inverted>> = TRUE }
{to ...} ( this is the {### function} ) | ==> { TRUE, -, <<written>> = TRUE, <<inverted>> = FALSE }
{to ...} ( this is ... ) | ==> { TRUE, -, <<written>> = FALSE }
to ... ==> { FALSE, - }
@<Issue PM_BareTo problem@> =
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_BareTo),
"'to' what? No name is given",
"which means that this would not define a new phrase.");
==> { FALSE, - };
@<Issue PM_DontCallPhrasesWithCalled problem@> =
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_DontCallPhrasesWithCalled),
"phrases aren't named using 'called'",
"and instead use 'this is...'. For example, 'To salute (called saluting)' "
"isn't allowed, but 'To salute (this is saluting)' is.");
==> { FALSE, - };
@ =
void ImperativeDefinitions::To_claim(imperative_defn_family *self, imperative_defn *id) {
wording W = Node::get_text(id->at);
if (<to-phrase-preamble>(W)) {
id->family = TO_PHRASE_EFF_family;
if (<<r>>) {
wording RW = GET_RW(<to-phrase-preamble>, 2);
if (<s-type-expression>(RW))
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_PhraseNameDuplicated),
"that name for this new phrase is not allowed",
"because it already has a meaning.");
if (Phrases::Constants::parse(RW) == NULL)
Phrases::Constants::create(RW, GET_RW(<to-phrase-preamble>, 1));
}
}
}
@ =
<rir-preamble> ::=
... ( this is the {... rule} ) | ==> { TRUE, - }
... ( this is the rule ) | ==> @<Issue PM_NamelessRule problem@>
... ( this is ... rule ) | ==> @<Issue PM_UnarticledRule problem@>
... ( this is ... rules ) | ==> @<Issue PM_PluralisedRule problem@>
... ==> { FALSE, - }
@<Issue PM_NamelessRule problem@> =
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_NamelessRule),
"there are many rules in Inform",
"so you need to give a name: 'this is the abolish dancing rule', say, "
"not just 'this is the rule'.");
==> { FALSE, - }
@<Issue PM_UnarticledRule problem@> =
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_UnarticledRule),
"a rule must be given a definite name",
"which begins with 'the', just to emphasise that it is the only one "
"with this name: 'this is the promote dancing rule', say, not just "
"'this is promote dancing rule'.");
==> { FALSE, - }
@<Issue PM_PluralisedRule problem@> =
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_PluralisedRule),
"a rule must be given a definite name ending in 'rule' not 'rules'",
"since the plural is only used for rulebooks, which can of course "
"contain many rules at once.");
==> { FALSE, - }
@ =
void ImperativeDefinitions::RIR_claim(imperative_defn_family *self, imperative_defn *id) {
wording W = Node::get_text(id->at);
if (<rir-preamble>(W)) {
id->family = RULE_IN_RULEBOOK_EFF_family;
if (<<r>>) {
wording RW = GET_RW(<rir-preamble>, 2);
if (Rules::vet_name(RW)) Rules::obtain(RW, TRUE);
}
}
}
@
=
imperative_defn *ImperativeDefinitions::make_imperative_definition(parse_node *p) {
imperative_defn *id = CREATE(imperative_defn);
id->at = p;
id->defines = NULL;
id->family = AS_YET_UNKNOWN_EFF_family;
current_sentence = p;
ImperativeDefinitions::identify(id);
return id;
}
@ Here we look at the preamble for a rule name: if we find it, we declare this
as a rule.
=
<rule-preamble-name> ::=
{to ...} ( this is the {### function} inverse to ### ) | ==> { 2, - }
{to ...} ( this is the {### function} ) | ==> { 2, - }
{to ...} ( this is ... ) | ==> { 2, - }
this is the {... rule} | ==> { -1, - }
... ( this is the {... rule} ) ==> { -2, - }
@ =
void ImperativeDefinitions::find_phrases_and_rules(void) {
int initial_problem_count = problem_count;
int progress_target = 0, progress_made = 0;
SyntaxTree::traverse_intp(Task::syntax_tree(), ImperativeDefinitions::visit_to_count,
&progress_target);
SyntaxTree::traverse_intp_intp(Task::syntax_tree(), ImperativeDefinitions::visit_to_create,
&progress_target, &progress_made);
int total = NUMBER_CREATED(imperative_defn), created = 0;
imperative_defn *id;
LOOP_OVER(id, imperative_defn) {
created++;
if ((created % 10) == 0)
ProgressBar::update(3,
((float) (created))/((float) (total)));
current_sentence = id->at;
Phrases::create_from_preamble(id);
}
if (initial_problem_count < problem_count) return;
Routines::ToPhrases::register_all();
@ -68,26 +246,6 @@ void ImperativeDefinitions::find_phrases_and_rules(void) {
SyntaxTree::traverse(Task::syntax_tree(), ImperativeDefinitions::visit_to_parse_placements);
}
void ImperativeDefinitions::visit_to_count(parse_node *p, int *progress_target) {
(*progress_target)++;
}
void ImperativeDefinitions::visit_to_create(parse_node *p, int *progress_target, int *progress_made) {
(*progress_made)++;
if ((*progress_made) % 10 == 0)
ProgressBar::update(3,
((float) (*progress_made))/((float) (*progress_target)));
if (Node::get_type(p) == IMPERATIVE_NT) {
imperative_defn *id = CREATE(imperative_defn);
id->at = p;
id->defines = NULL;
id->family = AS_YET_UNKNOWN_EFF_family;
if (<rule-preamble>(Node::get_text(id->at))) id->family = <<rp>>;
Phrases::create_from_preamble(id);
}
}
@
@e TRAVERSE_FOR_RULE_FILING_SMFT

View file

@ -28,19 +28,6 @@ typedef struct ph_usage_data {
int owning_rulebook_placement; /* ...and with this placement value: see Rulebooks */
} ph_usage_data;
@h The mid-morning predeclarations.
Recall that early in Inform's run, we make a coarse parsing of the preamble
of each rule to look for a name: if we find it, we declare it as a rule;
and in any event we throw away the PHUD produced. (We will make a better one
just before noon.)
=
void Phrases::Usage::predeclare_name_in(parse_node *p) {
ph_usage_data phud = Phrases::Usage::new(Node::get_text(p), TRUE, NULL);
if (Wordings::nonempty(phud.explicit_name))
Rules::obtain(phud.explicit_name, TRUE);
}
@h The late-morning creations.
A little later on, we've made a rule phrase, and it now has a proper PHUD.
If the rule is an anonymous one, such as:
@ -122,57 +109,22 @@ just enough from the wording to tell what sort of rule/phrase is to follow.
<rule-preamble> ::=
definition | ==> { -, DEFINITIONAL_PHRASE_EFF_family }
this is the {... rule} | ==> { -, RULE_NOT_IN_RULEBOOK_EFF_family, <<event-time>> = NOT_AN_EVENT, <<written>> = FALSE }
this is the rule | ==> @<Issue PM_NamelessRule problem@>
this is ... rule | ==> @<Issue PM_UnarticledRule problem@>
this is ... rules | ==> @<Issue PM_PluralisedRule problem@>
this is the rule | ==> { fail production }
this is ... rule | ==> { fail production }
this is ... rules | ==> { fail production }
<event-rule-preamble> | ==> { -, RULE_NOT_IN_RULEBOOK_EFF_family, <<event-time>> = R[1] }
to | ==> @<Issue PM_BareTo problem@>
to ... ( called ... ) | ==> @<Issue PM_DontCallPhrasesWithCalled problem@>
to | ==> { fail production }
to ... ( called ... ) | ==> { fail production }
{to ...} ( this is the {### function} inverse to ### ) | ==> { -, TO_PHRASE_EFF_family, <<named>> = TRUE, <<written>> = TRUE, <<inverted>> = TRUE }
{to ...} ( this is the {### function} ) | ==> { -, TO_PHRASE_EFF_family, <<named>> = TRUE, <<written>> = TRUE, <<inverted>> = FALSE }
{to ...} ( this is ... ) | ==> { -, TO_PHRASE_EFF_family, <<named>> = TRUE, <<written>> = FALSE }
to ... | ==> { -, TO_PHRASE_EFF_family, <<named>> = FALSE }
... ( this is the {... rule} ) | ==> { -, RULE_IN_RULEBOOK_EFF_family, <<named>> = TRUE, <<written>> = FALSE }
... ( this is the rule ) | ==> @<Issue PM_NamelessRule problem@>
... ( this is ... rule ) | ==> @<Issue PM_UnarticledRule problem@>
... ( this is ... rules ) | ==> @<Issue PM_PluralisedRule problem@>
... ( this is the rule ) | ==> { fail production }
... ( this is ... rule ) | ==> { fail production }
... ( this is ... rules ) | ==> { fail production }
... ==> { -, RULE_IN_RULEBOOK_EFF_family, <<named>> = FALSE }
@<Issue PM_NamelessRule problem@> =
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_NamelessRule),
"there are many rules in Inform",
"so you need to give a name: 'this is the abolish dancing rule', say, "
"not just 'this is the rule'.");
==> { -, AS_YET_UNKNOWN_EFF_family };
@<Issue PM_UnarticledRule problem@> =
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_UnarticledRule),
"a rule must be given a definite name",
"which begins with 'the', just to emphasise that it is the only one "
"with this name: 'this is the promote dancing rule', say, not just "
"'this is promote dancing rule'.");
==> { -, AS_YET_UNKNOWN_EFF_family };
@<Issue PM_PluralisedRule problem@> =
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_PluralisedRule),
"a rule must be given a definite name ending in 'rule' not 'rules'",
"since the plural is only used for rulebooks, which can of course "
"contain many rules at once.");
==> { -, AS_YET_UNKNOWN_EFF_family };
@<Issue PM_BareTo problem@> =
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_BareTo),
"'to' what? No name is given",
"which means that this would not define a new phrase.");
==> { -, AS_YET_UNKNOWN_EFF_family };
@<Issue PM_DontCallPhrasesWithCalled problem@> =
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_DontCallPhrasesWithCalled),
"phrases aren't named using 'called'",
"and instead use 'this is...'. For example, 'To salute (called saluting)' "
"isn't allowed, but 'To salute (this is saluting)' is.");
==> { -, AS_YET_UNKNOWN_EFF_family };
@ As a safety measure, to avoid ambiguities, Inform only allows one phrase
definition to begin with "now". It recognises such phrases as those whose
preambles match:
@ -270,7 +222,7 @@ ph_usage_data Phrases::Usage::new(wording W, int coarse_mode, imperative_defn *i
if (<<named>>) @<The preamble parses to a named To phrase@>;
if (<now-phrase-preamble>(W)) {
if ((coarse_mode) && (no_now_phrases++ == 1)) {
if (no_now_phrases++ == 1) {
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_RedefinedNow),
"creating new variants on 'now' is not allowed",
"because 'now' plays a special role in the language. "

View file

@ -26,14 +26,11 @@ should always be supplied for "To..." phrases, but left null for rules.
void Routines::Compile::routine(phrase *ph,
stacked_variable_owner_list *legible, to_phrase_request *req,
rule *R) {
parse_node *code_at = ph->from->at;
if (Node::is(code_at->next, DEFN_CONT_NT)) code_at = code_at->next;
LOGIF(PHRASE_COMPILATION, "Compiling phrase:\n$T", code_at);
if ((ph->from->at == NULL) ||
(Node::get_type(ph->from->at) != IMPERATIVE_NT) ||
(Wordings::empty(Node::get_text(ph->from->at))))
internal_error("tried to compile phrase with bad ROUTINE node");
LOGIF(PHRASE_COMPILATION, "Compiling phrase:\n$T", ph->from->at);
CompilationUnits::set_current(ph->from->at);
CompilationUnits::set_current(code_at);
phrase_being_compiled = ph;
@<Set up the stack frame for this compilation request@>;
@ -74,14 +71,14 @@ void Routines::Compile::routine(phrase *ph,
PreformCache::warn_of_changes(); /* that local variables may have changed */
@<Compile the body of the routine@> =
current_sentence = ph->from->at;
current_sentence = code_at;
if (Phrases::Context::compile_test_head(ph, R) == FALSE) {
if (ph->from->at) {
VerifyTree::verify_structure_from(ph->from->at);
Routines::Compile::code_block_outer(1, ph->from->at->down);
VerifyTree::verify_structure_from(ph->from->at);
if (code_at) {
VerifyTree::verify_structure_from(code_at);
Routines::Compile::code_block_outer(1, code_at->down);
VerifyTree::verify_structure_from(code_at);
}
current_sentence = ph->from->at;
current_sentence = code_at;
Phrases::Context::compile_test_tail(ph, R);
@<Compile a terminal return statement@>;

View file

@ -100,8 +100,9 @@ void Phrases::Adjectives::look_for_headers(parse_node *p) {
if (<definition-header>(Node::get_text(p))) {
compilation_unit *cm = CompilationUnits::current();
CompilationUnits::set_current(p);
parse_node *q = (p->down)?(p->down->down):NULL;
if (q == NULL) @<Futz with the parse tree, trying right not down@>;
parse_node *q = NULL;
if (Node::get_type(p->next) == DEFN_CONT_NT) q = p->next;
else q = (p->down)?(p->down->down):NULL;
wording DNW = EMPTY_WORDING; /* domain name */
wording CALLW = EMPTY_WORDING; /* calling */
@ -120,19 +121,6 @@ void Phrases::Adjectives::look_for_headers(parse_node *p) {
}
}
@ The tree structure is slightly different according to whether the adjective
is defined by routine or not.
@<Futz with the parse tree, trying right not down@> =
if ((p->next == NULL) ||
(Node::get_type(p->next) != IMPERATIVE_NT)) {
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(BelievedImpossible),
"don't leave me in suspense",
"write a definition after 'Definition:'!");
return;
}
q = p->next; p->next = q->next; p->down = q->down; q->next = NULL;
@<Parse the Q-node as an adjective definition@> =
if (<adjective-definition>(Node::get_text(q))) {
the_format = <<r>>;
@ -168,10 +156,11 @@ is defined by routine or not.
offer the new adjective around and see if anybody claims it.
@<Register the resulting adjective@> =
current_sentence = q;
adjective_meaning *am = AdjectiveMeanings::claim_definition(q, the_format, AW, DNW, CONW, CALLW);
if (am == NULL) internal_error("unclaimed adjective definition");
if (Wordings::nonempty(NW)) {
current_sentence = q;
adjective *adj = Adjectives::declare(NW, NULL);
adjective_meaning *neg = AdjectiveMeanings::negate(am);
AdjectiveAmbiguity::add_meaning_to_adjective(neg, adj);

View file

@ -24,8 +24,10 @@ void Phrases::Phrasal::define_adjective_by_phrase(parse_node *p, phrase *ph, wor
*CW = EMPTY_WORDING; *K = K_object;
if (ph == NULL) return;
if (Node::is(p->next, DEFN_CONT_NT)) p = p->next;
LOOP_OVER(def, definition)
if ((def->definition_node == p) && (Phrases::Phrasal::is_defined_by_phrase(def->am_of_def))) {
if ((def->node == p) && (Phrases::Phrasal::is_defined_by_phrase(def->am_of_def))) {
i6_schema *sch = AdjectiveMeanings::make_schema(def->am_of_def, TEST_ATOM_TASK);
Calculus::Schemas::modify(sch, "(%n(*1))", Phrases::iname(ph));
*CW = def->domain_calling;

View file

@ -1,5 +1,5 @@
Size of lexicon: 3098 excerpt meanings
Stored among 840 words out of total vocabulary of 10560
Stored among 840 words out of total vocabulary of 10565
710 words have a start list: longest belongs to report (with 293 meanings)
15 words have an end list: longest belongs to case (with 6 meanings)
29 words have a middle list: longest belongs to to (with 4 meanings)