mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 08:34:22 +03:00
Eliminated ph_usage_data
This commit is contained in:
parent
217bd4e104
commit
df2f345dad
|
@ -93,7 +93,7 @@ which use this module:
|
||||||
<span class="plain-syntax"> </span><a href="7-er.html#SP2" class="function-link"><span class="function-syntax">Relations::Explicit::start</span></a><span class="plain-syntax">();</span>
|
<span class="plain-syntax"> </span><a href="7-er.html#SP2" class="function-link"><span class="function-syntax">Relations::Explicit::start</span></a><span class="plain-syntax">();</span>
|
||||||
<span class="plain-syntax"> </span><a href="7-terr.html#SP1" class="function-link"><span class="function-syntax">EqualityDetails::start</span></a><span class="plain-syntax">();</span>
|
<span class="plain-syntax"> </span><a href="7-terr.html#SP1" class="function-link"><span class="function-syntax">EqualityDetails::start</span></a><span class="plain-syntax">();</span>
|
||||||
<span class="plain-syntax"> </span><a href="7-kpr.html#SP1" class="function-link"><span class="function-syntax">KindPredicatesRevisited::start</span></a><span class="plain-syntax">();</span>
|
<span class="plain-syntax"> </span><a href="7-kpr.html#SP1" class="function-link"><span class="function-syntax">KindPredicatesRevisited::start</span></a><span class="plain-syntax">();</span>
|
||||||
<span class="plain-syntax"> </span><a href="5-id.html#SP5" class="function-link"><span class="function-syntax">ImperativeDefinitions::create_families</span></a><span class="plain-syntax">();</span>
|
<span class="plain-syntax"> </span><a href="5-id.html#SP7" class="function-link"><span class="function-syntax">ImperativeDefinitions::create_families</span></a><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">ASSEMBLIES_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"assemblies"</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">ASSEMBLIES_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"assemblies"</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">ASSERTIONS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"assertions"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</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">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">ASSERTIONS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"assertions"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</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">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">IMPLICATIONS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"implications"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</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">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">IMPLICATIONS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"implications"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||||
|
|
|
@ -123,7 +123,7 @@ therefore safely be used to sweep up any <span class="extract"><span class="extr
|
||||||
<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="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="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">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><a href="5-id.html#SP6" class="function-link"><span class="function-syntax">ImperativeDefinitions::make_imperative_definition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">header</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><a href="5-id.html#SP8" class="function-link"><span class="function-syntax">ImperativeDefinitions::make_imperative_definition</span></a><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>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
|
|
@ -328,7 +328,7 @@ two cases") and all others (such as "regular meaning are more subtle").
|
||||||
<p class="commentary firstcommentary"><a id="SP3_1_3" class="paragraph-anchor"></a><b>§3.1.3. </b></p>
|
<p class="commentary firstcommentary"><a id="SP3_1_3" class="paragraph-anchor"></a><b>§3.1.3. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">MajorNodes::try_special_meaning</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">MajorNodes::try_special_meaning</span></span>:<br/><a href="2-ptmn.html#SP3_1_2_2">§3.1.2.2</a><br/>Imperative Definitions - <a href="5-id.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">MajorNodes::try_special_meaning</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">MajorNodes::try_special_meaning</span></span>:<br/><a href="2-ptmn.html#SP3_1_2_2">§3.1.2.2</a><br/>Imperative Definitions - <a href="5-id.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</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="identifier-syntax">SpecialMeanings::call</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_special_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">), </span><span class="identifier-syntax">task</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="plain-syntax"> </span><span class="identifier-syntax">SpecialMeanings::call</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_special_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">), </span><span class="identifier-syntax">task</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="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
|
|
@ -81,7 +81,7 @@ function togglePopup(material_id) {
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">AdjectivalDefinitionFamily::create_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">AdjectivalDefinitionFamily::create_family</span></span>:<br/>Imperative Definitions - <a href="5-id.html#SP5">§5</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">AdjectivalDefinitionFamily::create_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">AdjectivalDefinitionFamily::create_family</span></span>:<br/>Imperative Definitions - <a href="5-id.html#SP7">§7</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">DEFINITIONAL_PHRASE_EFF_family</span><span class="plain-syntax"> = </span><a href="5-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">DEFINITIONAL_PHRASE_EFF_family</span><span class="plain-syntax"> = </span><a href="5-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="5-adf.html#SP4" class="function-link"><span class="function-syntax">AdjectivalDefinitionFamily::claim</span></a><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="5-adf.html#SP4" class="function-link"><span class="function-syntax">AdjectivalDefinitionFamily::claim</span></a><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">NEW_PHRASE_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="5-adf.html#SP5" class="function-link"><span class="function-syntax">AdjectivalDefinitionFamily::new_phrase</span></a><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">NEW_PHRASE_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="5-adf.html#SP5" class="function-link"><span class="function-syntax">AdjectivalDefinitionFamily::new_phrase</span></a><span class="plain-syntax">);</span>
|
||||||
|
|
|
@ -72,6 +72,8 @@ 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">assertions</a></li><li><a href="index.html#5">Chapter 5: Imperative Code</a></li><li><b>Imperative Definitions</b></li></ul></div>
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">assertions</a></li><li><a href="index.html#5">Chapter 5: Imperative Code</a></li><li><b>Imperative Definitions</b></li></ul></div>
|
||||||
<p class="purpose">Each IMPERATIVE node in the syntax tree makes a definition of a phrase or rule.</p>
|
<p class="purpose">Each IMPERATIVE node in the syntax tree makes a definition of a phrase or rule.</p>
|
||||||
|
|
||||||
|
<ul class="toc"><li><a href="5-id.html#SP15">§15. 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>§1. </b>When this function starts, the tree contains a number of top-level <span class="extract"><span class="extract-syntax">IMPERATIVE_NT</span></span>
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>When this function starts, the tree contains a number of top-level <span class="extract"><span class="extract-syntax">IMPERATIVE_NT</span></span>
|
||||||
nodes with <span class="extract"><span class="extract-syntax">INVOCATION_LIST_NT</span></span> nodes hanging from them, but we haven't looked at
|
nodes with <span class="extract"><span class="extract-syntax">INVOCATION_LIST_NT</span></span> nodes hanging from them, but we haven't looked at
|
||||||
any of the text in the <span class="extract"><span class="extract-syntax">IMPERATIVE_NT</span></span> head nodes and therefore we have no idea what
|
any of the text in the <span class="extract"><span class="extract-syntax">IMPERATIVE_NT</span></span> head nodes and therefore we have no idea what
|
||||||
|
@ -84,6 +86,7 @@ they define. Some will be rules, some will define To... phrases, and so on.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">family_specific_data</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">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">family_specific_data</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">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">struct</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">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">defines</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">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">defines</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">log_text</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="identifier-syntax">CLASS_DEFINITION</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="reserved-syntax">imperative_defn</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
@ -95,7 +98,7 @@ 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">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> used only temporarily</span>
|
<span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> used only temporarily</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="5-id.html#SP5">§5</a><br/>Adjectival Definition Family - <a href="5-adf.html#SP2">§2</a><br/>To Phrase Family - <a href="5-tpf.html#SP2">§2</a><br/>Rule Family - <a href="5-rf.html#SP2">§2</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="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="5-id.html#SP7">§7</a><br/>Adjectival Definition Family - <a href="5-adf.html#SP2">§2</a><br/>To Phrase Family - <a href="5-tpf.html#SP2">§2</a><br/>Rule Family - <a href="5-rf.html#SP2">§2</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="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">-></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">-></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">-></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="identifier-syntax">family</span><span class="plain-syntax">-></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>
|
||||||
|
@ -112,15 +115,26 @@ this definition should belong to the family or not.
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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="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="5-id.html#SP6">§6</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">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="5-id.html#SP8">§8</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="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="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">-></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="identifier-syntax">id</span><span class="plain-syntax">-></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><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>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b><span class="extract"><span class="extract-syntax">NEW_PHRASE_IMP_DEFN_MTID</span></span> is for deciding from the syntax of a preamble whether
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b><span class="extract"><span class="extract-syntax">ASSESS_IMP_DEFN_MTID</span></span> is for parsing it in more detail, later on.
|
||||||
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">ASSESS_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">ASSESS_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::assess</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::assess</span></span>:<br/><a href="5-id.html#SP9">§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="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax">, </span><span class="constant-syntax">ASSESS_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="SP4" class="paragraph-anchor"></a><b>§4. </b><span class="extract"><span class="extract-syntax">NEW_PHRASE_IMP_DEFN_MTID</span></span> is for ...
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">NEW_PHRASE_IMP_DEFN_MTID</span>
|
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">NEW_PHRASE_IMP_DEFN_MTID</span>
|
||||||
|
@ -132,7 +146,20 @@ this definition should belong to the family or not.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VOID_METHOD_CALL</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax">, </span><span class="constant-syntax">NEW_PHRASE_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_ph</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">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax">, </span><span class="constant-syntax">NEW_PHRASE_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b></p>
|
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b><span class="extract"><span class="extract-syntax">TO_RCD_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">TO_RCD_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">TO_RCD_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="identifier-syntax">ph_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rcd</span><span class="plain-syntax">)</span>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::to_rcd</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">ImperativeDefinitions::to_rcd</span></span>:<br/><a href="5-id.html#SP16">§16</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="identifier-syntax">ph_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rcd</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">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax">, </span><span class="constant-syntax">TO_RCD_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::goes_in_rulebooks</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::goes_in_rulebooks</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>
|
||||||
|
@ -140,10 +167,10 @@ this definition should belong to the family or not.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b></p>
|
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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><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::create_families</span></span>:<br/>Assertions Module - <a href="1-am.html#SP2">§2</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">ImperativeDefinitions::create_families</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::create_families</span></span>:<br/>Assertions Module - <a href="1-am.html#SP2">§2</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">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax"> = </span><a href="5-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">AS_YET_UNKNOWN_EFF_family</span><span class="plain-syntax"> = </span><a href="5-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><a href="5-adf.html#SP2" class="function-link"><span class="function-syntax">AdjectivalDefinitionFamily::create_family</span></a><span class="plain-syntax">();</span>
|
<span class="plain-syntax"> </span><a href="5-adf.html#SP2" class="function-link"><span class="function-syntax">AdjectivalDefinitionFamily::create_family</span></a><span class="plain-syntax">();</span>
|
||||||
|
@ -153,21 +180,22 @@ this definition should belong to the family or not.
|
||||||
<span class="plain-syntax"> </span><a href="5-rf.html#SP2" class="function-link"><span class="function-syntax">RuleFamily::create_family</span></a><span class="plain-syntax">();</span>
|
<span class="plain-syntax"> </span><a href="5-rf.html#SP2" class="function-link"><span class="function-syntax">RuleFamily::create_family</span></a><span class="plain-syntax">();</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b></p>
|
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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><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">ImperativeDefinitions::make_imperative_definition</span></span>:<br/>Imperative Subtrees - <a href="2-is.html#SP1">§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">imperative_defn</span><span class="plain-syntax"> *</span><span class="function-syntax">ImperativeDefinitions::make_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">ImperativeDefinitions::make_imperative_definition</span></span>:<br/>Imperative Subtrees - <a href="2-is.html#SP1">§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><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="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">-></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">-></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">-></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">-></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">-></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">id</span><span class="plain-syntax">-></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">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL_GENERAL_POINTER</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL_GENERAL_POINTER</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">log_text</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">current_sentence</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">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="5-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><a href="5-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><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>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b></p>
|
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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="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>
|
||||||
|
@ -181,6 +209,7 @@ this definition should belong to the family or not.
|
||||||
<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="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="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">-></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">id</span><span class="plain-syntax">-></span><span class="element-syntax">at</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="5-id.html#SP3" class="function-link"><span class="function-syntax">ImperativeDefinitions::assess</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="identifier-syntax">Phrases::create_from_preamble</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">Phrases::create_from_preamble</span><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="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"> < </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="reserved-syntax">if</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="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||||
|
@ -193,7 +222,7 @@ this definition should belong to the family or not.
|
||||||
<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">-></span><span class="identifier-syntax">from</span><span class="plain-syntax">-></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">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">from</span><span class="plain-syntax">-></span><span class="element-syntax">at</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Frames::make_current</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">stack_frame</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Frames::make_current</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">stack_frame</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">runtime_context_data</span><span class="plain-syntax"> =</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">runtime_context_data</span><span class="plain-syntax"> =</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Phrases::Usage::to_runtime_context_data</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">usage_data</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><a href="5-id.html#SP16" class="function-link"><span class="function-syntax">ImperativeDefinitions::to_runtime_context_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Frames::remove_current</span><span class="plain-syntax">();</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Frames::remove_current</span><span class="plain-syntax">();</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">initial_problem_count</span><span class="plain-syntax"> < </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="reserved-syntax">if</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="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||||
|
@ -201,15 +230,15 @@ this definition should belong to the family or not.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RuleBookings::make_automatic_placements</span><span class="plain-syntax">();</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">RuleBookings::make_automatic_placements</span><span 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"> < </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="reserved-syntax">if</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="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="5-id.html#SP8" 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="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="5-id.html#SP10" 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="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b></p>
|
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b></p>
|
||||||
|
|
||||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">TRAVERSE_FOR_RULE_FILING_SMFT</span>
|
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">TRAVERSE_FOR_RULE_FILING_SMFT</span>
|
||||||
</pre>
|
</pre>
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">ImperativeDefinitions::visit_to_parse_placements</span></span>:<br/><a href="5-id.html#SP7">§7</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="5-id.html#SP9">§9</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">) &&</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">) &&</span>
|
||||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">) &&</span>
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</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">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">) == </span><span class="identifier-syntax">VERB_NT</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">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">) == </span><span class="identifier-syntax">VERB_NT</span><span class="plain-syntax">)) {</span>
|
||||||
|
@ -218,7 +247,7 @@ this definition should belong to the family or not.
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>The rulebooks are now complete and final. It is time to
|
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </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
|
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,
|
these phrases. This will be a long task, and we can only do most of it now,
|
||||||
because more phrases will appear later.
|
because more phrases will appear later.
|
||||||
|
@ -228,16 +257,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_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">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="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="5-id.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Count up the scale of the task</span><span class="named-paragraph-number">9.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP11_1" class="named-paragraph-link"><span class="named-paragraph">Count up the scale of the task</span><span class="named-paragraph-number">11.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">Compile definitions of rules in rulebooks</span><span class="named-paragraph-number">9.2</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP11_2" class="named-paragraph-link"><span class="named-paragraph">Compile definitions of rules in rulebooks</span><span class="named-paragraph-number">11.2</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP9_3" class="named-paragraph-link"><span class="named-paragraph">Compile definitions of rules left out of rulebooks</span><span class="named-paragraph-number">9.3</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP11_3" class="named-paragraph-link"><span class="named-paragraph">Compile definitions of rules left out of rulebooks</span><span class="named-paragraph-number">11.3</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP9_4" class="named-paragraph-link"><span class="named-paragraph">Compile phrases which define adjectives</span><span class="named-paragraph-number">9.4</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP11_4" class="named-paragraph-link"><span class="named-paragraph">Compile phrases which define adjectives</span><span class="named-paragraph-number">11.4</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP9_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">9.5</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP11_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">11.5</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP9_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">9.6</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP11_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">11.6</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP9_7" class="named-paragraph-link"><span class="named-paragraph">Throw problems for inline phrases named as constants</span><span class="named-paragraph-number">9.7</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-id.html#SP11_7" class="named-paragraph-link"><span class="named-paragraph">Throw problems for inline phrases named as constants</span><span class="named-paragraph-number">11.7</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>§9.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">9.1</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP11_1" class="paragraph-anchor"></a><b>§11.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">11.1</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -247,8 +276,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">-></span><span class="identifier-syntax">at_least_one_compiled_form_needed</span><span 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">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>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">total_phrases_to_compile</span><span class="plain-syntax">++;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP9">§9</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP11">§11</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>§9.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">9.2</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP11_2" class="paragraph-anchor"></a><b>§11.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">11.2</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -257,8 +286,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"> </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"> &</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>
|
<span class="plain-syntax"> &</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>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP9">§9</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP11">§11</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP9_3" class="paragraph-anchor"></a><b>§9.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">9.3</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP11_3" class="paragraph-anchor"></a><b>§11.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">11.3</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -267,13 +296,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"> </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"> &</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>
|
<span class="plain-syntax"> &</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>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP9">§9</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP11">§11</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP9_4" class="paragraph-anchor"></a><b>§9.4. </b>This doesn't compile all adjective definitions, only the ones which supply
|
<p class="commentary firstcommentary"><a id="SP11_4" class="paragraph-anchor"></a><b>§11.4. </b>This doesn't compile all adjective definitions, only the ones which supply
|
||||||
a whole multi-step phrase to define them — a relatively little-used feature
|
a whole multi-step phrase to define them — a relatively little-used feature
|
||||||
of Inform.
|
of Inform.
|
||||||
</p>
|
</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">9.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">11.4</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -284,8 +313,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">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>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">RTAdjectives::compile_support_code</span><span class="plain-syntax">();</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP9">§9</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP11">§11</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP9_5" class="paragraph-anchor"></a><b>§9.5. </b>As we'll see, it's legal in Inform to define "To..." phrases with vague
|
<p class="commentary firstcommentary"><a id="SP11_5" class="paragraph-anchor"></a><b>§11.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
|
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
|
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,
|
to store X. Instead, for each different kind of X which is actually needed,
|
||||||
|
@ -299,7 +328,7 @@ request the boring ones with straightforward kinds ("To award (N - a number)
|
||||||
points", say). This is where we do it:
|
points", say). This is where we do it:
|
||||||
</p>
|
</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">9.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">11.5</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -312,8 +341,8 @@ points", say). This is where we do it:
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP9">§9</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP11">§11</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP9_6" class="paragraph-anchor"></a><b>§9.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">9.6</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP11_6" class="paragraph-anchor"></a><b>§11.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">11.6</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -352,15 +381,15 @@ points", say). This is where we do it:
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP9">§9</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP11">§11</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP9_7" class="paragraph-anchor"></a><b>§9.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">9.7</span></span><span class="comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP11_7" class="paragraph-anchor"></a><b>§11.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">11.7</span></span><span class="comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="plain-syntax"> </span><span class="identifier-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">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="identifier-syntax">phrase</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="identifier-syntax">phrase</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Phrases::TypeData::invoked_inline</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">Phrases::TypeData::invoked_inline</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">Phrases::Usage::has_name_as_constant</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">usage_data</span><span class="plain-syntax">)))) {</span>
|
<span class="plain-syntax"> (</span><a href="5-tpf.html#SP8" class="function-link"><span class="function-syntax">ToPhraseFamily::has_name_as_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">from</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">Phrases::declaration_node</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">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Phrases::declaration_node</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">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_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>
|
<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>
|
||||||
|
@ -373,8 +402,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><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP9">§9</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-id.html#SP11">§11</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>The twilight gathers, but our work is far from done. Recall that we have
|
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. </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
|
accumulated compilation requests for "To..." phrases, but haven't actually
|
||||||
acted on them yet.
|
acted on them yet.
|
||||||
</p>
|
</p>
|
||||||
|
@ -437,6 +466,44 @@ hand over to the others to generate more work.
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. </b>In our compiled code, it's useful to label routines with I6 comments:
|
||||||
|
</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::write_comment_describing</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">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="string-syntax">"%~W:"</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">log_text</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::comment</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">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="SP14" class="paragraph-anchor"></a><b>§14. </b>And similarly:
|
||||||
|
</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::index_preamble</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">log_text</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. 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>
|
||||||
|
|
||||||
|
<p class="commentary">As will be seen, about six-sevenths of the code is given over to choosing good
|
||||||
|
problem messages when the PHUD is malformed — these are some of the most
|
||||||
|
seen problems in Inform. A couple of variables are needed just for that:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>§16. </b></p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="identifier-syntax">ph_runtime_context_data</span><span class="plain-syntax"> </span><span class="function-syntax">ImperativeDefinitions::to_runtime_context_data</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">ImperativeDefinitions::to_runtime_context_data</span></span>:<br/><a href="5-id.html#SP9">§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="identifier-syntax">ph_runtime_context_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Phrases::Context::new</span><span class="plain-syntax">();</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="5-id.html#SP5" class="function-link"><span class="function-syntax">ImperativeDefinitions::to_rcd</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, &</span><span class="identifier-syntax">phrcd</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>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="4-imp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresscurrent">id</li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-adf.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="4-imp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresscurrent">id</li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-adf.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
|
@ -73,17 +73,28 @@ 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">assertions</a></li><li><a href="index.html#5">Chapter 5: Imperative Code</a></li><li><b>Rule Family</b></li></ul></div>
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">assertions</a></li><li><a href="index.html#5">Chapter 5: Imperative Code</a></li><li><b>Rule Family</b></li></ul></div>
|
||||||
<p class="purpose">Imperative definitions of rules.</p>
|
<p class="purpose">Imperative definitions of rules.</p>
|
||||||
|
|
||||||
|
<ul class="toc"><li><a href="5-rf.html#SP9">§9. The late-morning creations</a></li><li><a href="5-rf.html#SP13">§13. Miscellaneous</a></li></ul><hr class="tocbar">
|
||||||
|
|
||||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b></p>
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">imperative_defn_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">RULE_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="identifier-syntax">RULE_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">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax"> {</span>
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax"> {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">reduced_stem</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">constant_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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">constant_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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">pattern</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">pattern</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">not_in_rulebook</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">not_in_rulebook</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">event_time</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">event_time</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">event_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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">event_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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">uses_as_event</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">use_as_event</span></span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule_parameter</span><span class="plain-syntax">; </span><span class="comment-syntax"> text of object or action parameter</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">whenwhile</span><span class="plain-syntax">; </span><span class="comment-syntax"> when/while for action/activity rulebooks</span>
|
||||||
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">during_scene_spec</span><span class="plain-syntax">; </span><span class="comment-syntax"> what scene is currently under way</span>
|
||||||
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owning_rulebook</span><span class="plain-syntax">; </span><span class="comment-syntax"> the primary booking for the phrase will be here</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">owning_rulebook_placement</span><span class="plain-syntax">; </span><span class="comment-syntax"> ...and with this placement value: see Rulebooks</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -91,10 +102,12 @@ function togglePopup(material_id) {
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RuleFamily::create_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">RuleFamily::create_family</span></span>:<br/>Imperative Definitions - <a href="5-id.html#SP5">§5</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">RuleFamily::create_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">RuleFamily::create_family</span></span>:<br/>Imperative Definitions - <a href="5-id.html#SP7">§7</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">RULE_EFF_family</span><span class="plain-syntax"> = </span><a href="5-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_EFF"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">RULE_EFF_family</span><span class="plain-syntax"> = </span><a href="5-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_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_EFF_family</span><span class="plain-syntax">, </span><span class="constant-syntax">CLAIM_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="5-rf.html#SP5" class="function-link"><span class="function-syntax">RuleFamily::claim</span></a><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_EFF_family</span><span class="plain-syntax">, </span><span class="constant-syntax">CLAIM_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="5-rf.html#SP5" class="function-link"><span class="function-syntax">RuleFamily::claim</span></a><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_EFF_family</span><span class="plain-syntax">, </span><span class="constant-syntax">ASSESS_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="5-rf.html#SP6" class="function-link"><span class="function-syntax">RuleFamily::assess</span></a><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_EFF_family</span><span class="plain-syntax">, </span><span class="constant-syntax">NEW_PHRASE_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="5-rf.html#SP8" class="function-link"><span class="function-syntax">RuleFamily::new_phrase</span></a><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_EFF_family</span><span class="plain-syntax">, </span><span class="constant-syntax">NEW_PHRASE_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="5-rf.html#SP8" class="function-link"><span class="function-syntax">RuleFamily::new_phrase</span></a><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_EFF_family</span><span class="plain-syntax">, </span><span class="constant-syntax">TO_RCD_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="5-rf.html#SP13" class="function-link"><span class="function-syntax">RuleFamily::to_rcd</span></a><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b></p>
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b></p>
|
||||||
|
@ -194,6 +207,15 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">pattern</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">pattern</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">event_time</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOT_A_TIMED_EVENT</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">event_time</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOT_A_TIMED_EVENT</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">event_name</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">event_name</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">uses_as_event</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">use_as_event</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</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">rfd</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><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">reduced_stem</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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">during_scene_spec</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">endif</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</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="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">owning_rulebook_placement</span><span class="plain-syntax"> = </span><span class="identifier-syntax">MIDDLE_PLACEMENT</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">form</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">not_in_rulebook</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">form</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">not_in_rulebook</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">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">);</span>
|
||||||
|
@ -227,27 +249,15 @@ function togglePopup(material_id) {
|
||||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b></p>
|
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">RuleFamily::is</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">RuleFamily::is</span></span>:<br/>Imperative Definitions - <a href="5-id.html#SP4">§4</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">RuleFamily::is</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">RuleFamily::is</span></span>:<br/>Imperative Definitions - <a href="5-id.html#SP6">§6</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RULE_EFF_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RULE_EFF_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</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">RuleFamily::not_in_rulebook</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">RuleFamily::assess</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">RuleFamily::assess</span></span>:<br/><a href="5-rf.html#SP2">§2</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-rf.html#SP6" class="function-link"><span class="function-syntax">RuleFamily::is</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">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">not_in_rulebook</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RuleFamily::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="identifier-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">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">timing_of_event</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="identifier-syntax">event_time</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">event_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">event_name</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">explicit_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">not_in_rulebook</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">not_in_rulebook</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="5-rf.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Parse the rulebook stem in fine mode</span><span class="named-paragraph-number">6.2</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP6_2" class="named-paragraph-link"><span class="named-paragraph">Parse the rulebook stem in fine mode</span><span class="named-paragraph-number">6.2</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>§6.1. </b>Much later on, Inform returns to the definition to look at it in fine detail:
|
<p class="commentary firstcommentary"><a id="SP6_1" class="paragraph-anchor"></a><b>§6.1. </b>Much later on, Inform returns to the definition to look at it in fine detail:
|
||||||
|
@ -300,17 +310,17 @@ affects rules giving a rulebook and some circumstances:
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">form</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">form</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="function-syntax"><unrecognised-rule-stem-diagnosis></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="function-syntax"><unrecognised-rule-stem-diagnosis></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">else</span><span class="plain-syntax"> {</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">form</span><span class="plain-syntax">) </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">whenwhile</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><rule-preamble-finer></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="identifier-syntax">form</span><span class="plain-syntax">) </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">whenwhile</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><rule-preamble-finer></span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">during_scene_spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">during_spec</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">during_scene_spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">during_spec</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">endif</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">owning_rulebook</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parsed_rm</span><span class="plain-syntax">-></span><span class="identifier-syntax">matched_rulebook</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</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="identifier-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="identifier-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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rfd</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="identifier-syntax">owning_rulebook_placement</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parsed_rm</span><span class="plain-syntax">-></span><span class="identifier-syntax">placement_requested</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</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="identifier-syntax">placement_requested</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP6_2_2" class="named-paragraph-link"><span class="named-paragraph">Disallow the definite article for anonymous rules</span><span class="named-paragraph-number">6.2.2</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP6_2_2" class="named-paragraph-link"><span class="named-paragraph">Disallow the definite article for anonymous rules</span><span class="named-paragraph-number">6.2.2</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP6_2_1" class="named-paragraph-link"><span class="named-paragraph">Cut off the bud from the stem</span><span class="named-paragraph-number">6.2.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP6_2_1" class="named-paragraph-link"><span class="named-paragraph">Cut off the bud from the stem</span><span class="named-paragraph-number">6.2.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-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="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">reduced_stem</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-rf.html#SP6">§6</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-rf.html#SP6">§6</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP6_2_1" class="paragraph-anchor"></a><b>§6.2.1. </b>The bud is not always present at all, and need not always be at the end
|
<p class="commentary firstcommentary"><a id="SP6_2_1" class="paragraph-anchor"></a><b>§6.2.1. </b>The bud is not always present at all, and need not always be at the end
|
||||||
|
@ -361,17 +371,17 @@ of the stem, so we have to be very careful:
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BW</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">BW</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">CW</span><span class="plain-syntax">)) </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">rule_parameter</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CW</span><span 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">CW</span><span class="plain-syntax">)) </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CW</span><span 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="identifier-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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">owning_rulebook</span><span class="plain-syntax">) &&</span>
|
||||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Rulebooks::runs_during_activities</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">owning_rulebook</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">Rulebooks::runs_during_activities</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">owning_rulebook</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">Rulebooks::action_focus</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">owning_rulebook</span><span class="plain-syntax">)) &&</span>
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Rulebooks::action_focus</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">owning_rulebook</span><span class="plain-syntax">)) &&</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="identifier-syntax">rule_parameter</span><span class="plain-syntax">)) &&</span>
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="identifier-syntax">rule_parameter</span><span class="plain-syntax">)) &&</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="identifier-syntax">whenwhile</span><span class="plain-syntax">))) {</span>
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="identifier-syntax">whenwhile</span><span class="plain-syntax">))) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">rule_parameter</span><span class="plain-syntax"> =</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax"> =</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">rule_parameter</span><span class="plain-syntax">),</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">),</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">whenwhile</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">whenwhile</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-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><span class="identifier-syntax">rfd</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>
|
<span class="plain-syntax"> }</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-rf.html#SP6_2">§6.2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-rf.html#SP6_2">§6.2</a>.</li></ul>
|
||||||
|
@ -441,16 +451,629 @@ of the stem, so we have to be very careful:
|
||||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b></p>
|
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RuleFamily::new_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">RuleFamily::new_phrase</span></span>:<br/><a href="5-rf.html#SP2">§2</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="identifier-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RuleFamily::new_phrase</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">RuleFamily::new_phrase</span></span>:<br/><a href="5-rf.html#SP2">§2</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="identifier-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">not_in_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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">not_in_rulebook</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Phrases::Usage::to_rule</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-></span><span class="identifier-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="5-rf.html#SP9" class="function-link"><span class="function-syntax">RuleFamily::to_rule</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">else</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Rules::request_automatic_placement</span><span class="plain-syntax">(</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Rules::request_automatic_placement</span><span class="plain-syntax">(</span><a href="5-rf.html#SP9" class="function-link"><span class="function-syntax">RuleFamily::to_rule</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="identifier-syntax">Phrases::Usage::to_rule</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-></span><span class="identifier-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">-></span><span class="identifier-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="identifier-syntax">new_ph</span><span class="plain-syntax">-></span><span class="identifier-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>
|
||||||
</pre>
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. 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>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<p>Instead of jumping: say "Don't."</p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p class="commentary">then we need to call <span class="extract"><span class="extract-syntax">Rules::obtain</span></span> to create a nameless <span class="extract"><span class="extract-syntax">rule</span></span> structure
|
||||||
|
to be connected to it. But if the phrase has an explicit name:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<p>Instead of swimming (this is the avoid water rule): say "Don't."</p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p class="commentary">then we have a predeclared rule called "avoid water rule" already, so we
|
||||||
|
connect this existing one to the phrase.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="identifier-syntax">rule</span><span class="plain-syntax"> *</span><span class="function-syntax">RuleFamily::to_rule</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">RuleFamily::to_rule</span></span>:<br/><a href="5-rf.html#SP8">§8</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">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_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><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="5-rf.html#SP9_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">9.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-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><span class="identifier-syntax">Rules::by_name</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">R</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP9_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">9.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><span class="identifier-syntax">Rules::obtain</span><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">-></span><span class="identifier-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">-></span><span class="element-syntax">at</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Rules::set_imperative_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</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">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">-></span><span class="element-syntax">defines</span><span class="plain-syntax">;</span>
|
||||||
|
<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">-></span><span class="identifier-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">-></span><span class="identifier-syntax">owning_module</span><span class="plain-syntax">);</span>
|
||||||
|
|
||||||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP9_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">9.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="SP9_1" class="paragraph-anchor"></a><b>§9.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">9.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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">event_name</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">event_name</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_name</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_name</span><span class="plain-syntax">);</span>
|
||||||
|
<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="5-rf.html#SP9">§9</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>§9.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">9.2</span></span><span class="comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">existing_id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rules::get_imperative_definition</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">existing_id</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">existing_id</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">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">W</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_DuplicateRuleName</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">"You wrote %1, but this would give a name ('%2') to a "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"new rule which already belongs to an existing one."</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>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>This code is used in <a href="5-rf.html#SP9">§9</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP9_3" class="paragraph-anchor"></a><b>§9.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">9.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">IX</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></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="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">whenwhile</span><span 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::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">whenwhile</span><span class="plain-syntax">) == </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</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">IX</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">), </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">whenwhile</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">IX</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">whenwhile</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">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="5-rf.html#SP9">§9</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b></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">RuleFamily::get_timing_of_event</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">RULE_EFF_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOT_A_TIMED_EVENT</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">event_time</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>For example, for the rule
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<p>Instead of taking the box while the skylight is open: ...</p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p class="commentary">this returns "taking the box".
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">RuleFamily::get_prewhile_text</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">RULE_EFF_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</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">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></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"><when-while-clause></span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">)) </span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><when-while-clause></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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</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">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>§12. </b></p>
|
||||||
|
|
||||||
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||||
|
<span class="Preform-function-syntax"><when-while-clause></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>§13. Miscellaneous. </b>Some access routines.
|
||||||
|
</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">RuleFamily::get_rulebook_placement</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">RULE_EFF_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">MIDDLE_PLACEMENT</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">owning_rulebook_placement</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
<span class="identifier-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="function-syntax">RuleFamily::get_rulebook</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">RULE_EFF_family</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">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">owning_rulebook</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">RuleFamily::set_rulebook</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">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">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">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">RULE_EFF_family</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"cannot set rulebook: not a rule"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">owning_rulebook</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rb</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="function-syntax">RuleFamily::get_uses_as_event</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">RULE_EFF_family</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">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">uses_as_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="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>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RuleFamily::to_rcd</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">RuleFamily::to_rcd</span></span>:<br/><a href="5-rf.html#SP2">§2</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="identifier-syntax">ph_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rcd</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">rule_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_rule_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">not_in_rulebook</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="identifier-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">else</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP13_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">13.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1" class="paragraph-anchor"></a><b>§13.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">13.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">rcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">compile_for_rulebook</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP13_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">13.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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">whenwhile</span><span class="plain-syntax">)) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">activity_context</span><span class="plain-syntax"> =</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">whenwhile</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">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">whenwhile</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">activity_where</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
|
||||||
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">during_scene_spec</span><span class="plain-syntax">) </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">during_scene</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></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="5-rf.html#SP13">§13</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1_1" class="paragraph-anchor"></a><b>§13.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">13.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="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Rulebooks::action_focus</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">owning_rulebook</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">saved</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseActionPatterns::enter_mode</span><span class="plain-syntax">(</span><span class="identifier-syntax">PERMIT_TRYING_OMISSION</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Rules::all_action_processing_variables</span><span class="plain-syntax">())</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Frames::set_stvol</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Frames::current_stack_frame</span><span class="plain-syntax">(), </span><span class="identifier-syntax">Rules::all_action_processing_variables</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"><action-pattern>(rfd-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">)) </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="function-syntax"><<rp>></span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Frames::remove_nonphrase_stack_frame</span><span class="plain-syntax">();</span>
|
||||||
|
<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">rcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP13_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">13.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><span class="identifier-syntax">Rulebooks::get_focus_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">owning_rulebook</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="identifier-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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">, </span><span class="identifier-syntax">pk</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">whenwhile</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">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::up_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">whenwhile</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="identifier-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">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">pk</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</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">rfd</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>
|
||||||
|
<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">rcd</span><span class="plain-syntax">-></span><span class="identifier-syntax">ap</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP13_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">13.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><span class="identifier-syntax">Rulebooks::get_focus_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></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="5-rf.html#SP13_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">13.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="5-rf.html#SP13_1">§13.1</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1_1_1" class="paragraph-anchor"></a><b>§13.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 — which covers an enormous
|
||||||
|
range of different faults.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="commentary">The "PAP failure reason" is a sort of error code set by the action pattern
|
||||||
|
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">13.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><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">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">, </span><span class="identifier-syntax">rcd</span><span class="plain-syntax">-></span><span class="identifier-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">rfd</span><span class="plain-syntax">-></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"><action-problem-diagnosis>(rfd-></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="5-rf.html#SP13_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithDisjunction problem</span><span class="named-paragraph-number">13.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="5-rf.html#SP13_1_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithNoParticiple problem</span><span class="named-paragraph-number">13.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="5-rf.html#SP13_1_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithImmiscible problem</span><span class="named-paragraph-number">13.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="5-rf.html#SP13_1_1_1_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithBadWhen problem</span><span class="named-paragraph-number">13.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="5-rf.html#SP13_1_1_1_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APUnknown problem</span><span class="named-paragraph-number">13.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="5-rf.html#SP13_1_1">§13.1.1</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1_1_1_1" class="paragraph-anchor"></a><b>§13.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">13.1.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><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_APWithDisjunction</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">"You wrote %1, which seems to introduce a rule, but the "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"circumstances ('%2') seem to be too general for me to "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"understand in a single rule. I can understand a choice of "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"of actions, in a list such as 'taking or dropping the ball', "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"but there can only be one set of noun(s) supplied. So 'taking "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"the ball or taking the bat' is disallowed. You can get around "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"this by using named actions ('Taking the ball is being "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"mischievous. Taking the bat is being mischievous. Instead of "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"being mischievous...'), or it may be less bother just to "</span>
|
||||||
|
<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="5-rf.html#SP13_1_1_1">§13.1.1.1</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1_1_1_2" class="paragraph-anchor"></a><b>§13.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">13.1.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><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_APWithNoParticiple</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">"You wrote %1, which seems to introduce a rule taking effect "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"only '%2'. But this does not look like an action, since "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"there is no sign of a participle ending '-ing' (as in "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"'taking the brick', say) - which makes me think I have "</span>
|
||||||
|
<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="5-rf.html#SP13_1_1_1">§13.1.1.1</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1_1_1_3" class="paragraph-anchor"></a><b>§13.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">13.1.1.1.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::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_APWithImmiscible</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">"You wrote %1, which seems to introduce a rule taking effect "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"only '%2'. But this is a combination of actions which cannot "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"be mixed. The only alternatives where 'or' is allowed are "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"cases where a choice of actions is given but applying to "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"the same objects in each case. (So 'taking or dropping the "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"CD' is allowed, but 'dropping the CD or inserting the CD "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"into the jewel box' is not, because the alternatives there "</span>
|
||||||
|
<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="5-rf.html#SP13_1_1_1">§13.1.1.1</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1_1_1_4" class="paragraph-anchor"></a><b>§13.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">13.1.1.1.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::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_APWithBadWhen</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">Q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</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">diagnosis</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="function-syntax"><action-when-diagnosis></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">Q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="function-syntax"><<cw1>></span><span class="plain-syntax">, </span><span class="function-syntax"><<cw2>></span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">diagnosis</span><span class="plain-syntax"> = </span><span class="function-syntax"><<r>></span><span class="plain-syntax">;</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">Q</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(3, </span><span class="string-syntax">"so I am unable to accept this rule."</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">diagnosis</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(3,</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"perhaps because 'nothing' tends not to be allowed in Inform conditions? "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"(Whereas 'no thing' is usually allowed.)"</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">diagnosis</span><span class="plain-syntax"> == </span><span class="constant-syntax">3</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(3,</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"perhaps because 'nowhere' tends not to be allowed in Inform conditions? "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"(Whereas 'no room' is usually allowed.)"</span><span class="plain-syntax">);</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">"You wrote %1, which seems to introduce a rule taking effect "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"only '%2'. But this condition did not make sense, %3"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">diagnosis</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">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"%PIt might be worth mentioning that a 'when' condition tacked on to "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"an action like this is not allowed to mention or use 'called' values."</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">diagnosis</span><span class="plain-syntax"> == </span><span class="constant-syntax">4</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">"%PThe problem might be that 'and' has been followed by 'when' or "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"'while'. For example, to make a rule with two conditions, this is "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"okay: 'Instead of jumping when Peter is happy and Peter is in the "</span>
|
||||||
|
<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="5-rf.html#SP13_1_1_1">§13.1.1.1</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1_1_1_5" class="paragraph-anchor"></a><b>§13.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">13.1.1.1.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">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></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="identifier-syntax">pap_failure_reason</span><span class="plain-syntax"> == </span><span class="identifier-syntax">WHENOKAY_PAPF</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(3,</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"The part after 'when' (or 'while') was fine, but the earlier words"</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">Problems::quote_text</span><span class="plain-syntax">(3, </span><span class="string-syntax">"But that"</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_APUnknown</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">"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="5-rf.html#SP13_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">13.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="5-rf.html#SP13_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">13.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="5-rf.html#SP13_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">13.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="5-rf.html#SP13_1_1_1">§13.1.1.1</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1_1_1_5_1" class="paragraph-anchor"></a><b>§13.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">13.1.1.1.5.1</span></span><span class="comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">action_name</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">) < </span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">ActionNameNames::tensed</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">))) &&</span>
|
||||||
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::match</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::truncate</span><span class="plain-syntax">(</span><span class="identifier-syntax">ActionNameNames::tensed</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">), </span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">))))) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">ActionNameNames::tensed</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">" I notice that there's an action called '%3', though: perhaps "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"this is what you meant?"</span><span class="plain-syntax">);</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="5-rf.html#SP13_1_1_1_5">§13.1.1.1.5</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1_1_1_5_2" class="paragraph-anchor"></a><b>§13.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">13.1.1.1.5.2</span></span><span class="comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pap_failure_reason</span><span class="plain-syntax"> == </span><span class="identifier-syntax">WHENOKAY_PAPF</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">time_period</span><span class="plain-syntax"> *</span><span class="identifier-syntax">duration</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Occurrence::parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">reduced_stem</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">duration</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">Occurrence::used_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">duration</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 wonder if this might be because '%3', which looks like a "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"condition on the timing, is the wrong side of the 'when...' "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"clause?)"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>This code is used in <a href="5-rf.html#SP13_1_1_1_5">§13.1.1.1.5</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1_1_1_5_3" class="paragraph-anchor"></a><b>§13.1.1.1.5.3. </b>If the action pattern contains what looks like a list of action names, as
|
||||||
|
for example
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<p>Instead of taking or dropping the magnet: ...</p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p class="commentary">then the anl-diagnosis grammar will parse this and return N equal to 2, the
|
||||||
|
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">13.1.1.1.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">issuing_ANL_problem</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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="plain-syntax"> </span><span class="function-syntax"><anl-diagnosis>(rfd-></span><span class="element-syntax">rule_parameter</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="function-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">N</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">positive</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">ActionNameLists::parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">rfd</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">, &</span><span class="identifier-syntax">positive</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">positive</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">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">" This looks like a list of actions to avoid: "</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">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">" Looking at this as a list of alternative actions: "</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">issuing_ANL_problem</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</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="plain-syntax"> </span><span class="function-syntax"><anl-diagnosis>(rfd-></span><span class="element-syntax">rule_parameter</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="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="5-rf.html#SP13_1_1_1_5">§13.1.1.1.5</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP13_1_1_2" class="paragraph-anchor"></a><b>§13.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">13.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><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">rfd</span><span class="plain-syntax">-></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"><parametric-problem-diagnosis>(rfd-></span><span class="element-syntax">reduced_stem</span><span class="plain-syntax">);</span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>This code is used in <a href="5-rf.html#SP13_1_1">§13.1.1</a> (twice).</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>§14. </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="SP15" class="paragraph-anchor"></a><b>§15. </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"><parametric-problem-diagnosis></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">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP15_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_WhenThePlay problem</span><span class="named-paragraph-number">15.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="named-paragraph-container code-font"><a href="5-rf.html#SP15_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadParameter problem</span><span class="named-paragraph-number">15.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="SP15_1" class="paragraph-anchor"></a><b>§15.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_WhenThePlay problem</span><span class="named-paragraph-number">15.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_WhenThePlay</span><span class="plain-syntax">),</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"there's no scene called 'the play'"</span><span class="plain-syntax">,</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"so I think you need to remove 'the' - Inform has two "</span>
|
||||||
|
<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="5-rf.html#SP15">§15</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP15_2" class="paragraph-anchor"></a><b>§15.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadParameter problem</span><span class="named-paragraph-number">15.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::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_BadParameter</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">"You wrote %1, but the description of the thing(s) to which the rule "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"applies ('%2') did not make sense. This is %3 based rulebook, so "</span>
|
||||||
|
<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="5-rf.html#SP15">§15</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>§16. </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"><action-problem-diagnosis></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">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP16_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NonActionInPresenceOf problem</span><span class="named-paragraph-number">16.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">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-rf.html#SP16_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NonActionIn problem</span><span class="named-paragraph-number">16.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="SP16_1" class="paragraph-anchor"></a><b>§16.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NonActionInPresenceOf problem</span><span class="named-paragraph-number">16.1</span></span><span class="Preform-comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="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_NonActionInPresenceOf</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">"You wrote %1, but 'in the presence of...' is a clause which can "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"only be used to talk about an action: so, for instance, 'waiting "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"in the presence of...' is needed. "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"This problem arises especially with 'every turn' rules, where "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"'every turn in the presence of...' looks plausible but doesn't "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"work. This could be fixed by writing 'Every turn doing something "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"in the presence of...', but a neater solution talks about the "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"current situation instead: 'Every turn when the player can "</span>
|
||||||
|
<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="5-rf.html#SP16">§16</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP16_2" class="paragraph-anchor"></a><b>§16.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NonActionIn problem</span><span class="named-paragraph-number">16.2</span></span><span class="comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="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_NonActionIn</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">"You wrote %1, but 'in...' used in this way should really belong "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"to an action: for instance, 'Before waiting in the Library'. "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"Rules like 'Every turn in the Library' don't work, because "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"'every turn' is not an action; what's wanted is 'Every turn "</span>
|
||||||
|
<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="5-rf.html#SP16">§16</a>.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>§17. </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.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||||
|
<span class="Preform-function-syntax"><action-when-diagnosis></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-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">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 1, -, <<cw1>> = Wordings::first_wn(WR[3]), <<cw2>> = Wordings::last_wn(WR[3]) }</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-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">nothing</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"> { 2, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }</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-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">nowhere</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"> { 3, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }</span>
|
||||||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">and</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">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 4, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }</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-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 5, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = 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="SP18" class="paragraph-anchor"></a><b>§18. </b></p>
|
||||||
|
|
||||||
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||||
|
<span class="Preform-function-syntax"><anl-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-inner-diagnosis></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><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"> { pass 1 }</span>
|
||||||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-inner-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }</span>
|
||||||
|
|
||||||
|
<span class="Preform-function-syntax"><anl-inner-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-entry-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-tail-diagnosis></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"> { R[1] + R[2], - }</span>
|
||||||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-entry-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }</span>
|
||||||
|
|
||||||
|
<span class="Preform-function-syntax"><anl-tail-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-inner-diagnosis></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"> { pass 1 }</span>
|
||||||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_,/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-inner-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }</span>
|
||||||
|
|
||||||
|
<span class="Preform-function-syntax"><anl-entry-diagnosis></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="named-paragraph-container code-font"><a href="5-rf.html#SP18_1" class="named-paragraph-link"><span class="named-paragraph">Diagnose problem with this ANL entry</span><span class="named-paragraph-number">18.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="SP18_1" class="paragraph-anchor"></a><b>§18.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">18.1</span></span><span class="Preform-comment-syntax"> =</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">issuing_ANL_problem</span><span class="plain-syntax">) && (!</span><span class="identifier-syntax">preform_lookahead_mode</span><span class="plain-syntax">)) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><action-pattern></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">Problems::issue_problem_segment</span><span class="plain-syntax">(</span><span class="string-syntax">"'%4' did not make sense; "</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="function-syntax"><<rp>></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">form</span><span class="plain-syntax"> = </span><span class="function-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">APClauses::is_request</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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">"'%4' would make sense as an action on its own, but 'or' can't "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"be used in combination with 'asking... to try...' actions; "</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ActionPatterns::refers_to_past</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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">"'%4' would make sense as an action on its own, but 'or' can't "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"be used in combination with actions with time periods attached; "</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><named-action-pattern></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</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="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">"'%4' only made sense as a named kind of action, which can "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"be used on its own but not in an action list; "</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">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"'%4' is another named kind of action; "</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">NAP_problem_explained</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">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">form</span><span class="plain-syntax"> == </span><span class="identifier-syntax">ACTOR_EXP_PLAYER</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">"'%4' would have been okay except for using the word 'trying', "</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="string-syntax">"which isn't allowed in a list like this; "</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span><span class="string-syntax">"'%4' was okay; "</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">1</span><span class="plain-syntax">, - };</span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>This code is used in <a href="5-rf.html#SP18">§18</a>.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="5-tpf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresscurrent">rf</li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="6-tc.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="5-tpf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresssection"><a href="5-tpf.html">tpf</a></li><li class="progresscurrent">rf</li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="6-tc.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
|
@ -73,6 +73,8 @@ 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">assertions</a></li><li><a href="index.html#5">Chapter 5: Imperative Code</a></li><li><b>To Phrase Family</b></li></ul></div>
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">assertions</a></li><li><a href="index.html#5">Chapter 5: Imperative Code</a></li><li><b>To Phrase Family</b></li></ul></div>
|
||||||
<p class="purpose">Imperative definitions of "To..." phrases.</p>
|
<p class="purpose">Imperative definitions of "To..." phrases.</p>
|
||||||
|
|
||||||
|
<ul class="toc"><li><a href="5-tpf.html#SP9">§9. Extracting the stem</a></li></ul><hr class="tocbar">
|
||||||
|
|
||||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b></p>
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -80,9 +82,12 @@ function togglePopup(material_id) {
|
||||||
|
|
||||||
<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">to_family_data</span><span class="plain-syntax"> {</span>
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">to_family_data</span><span class="plain-syntax"> {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">pattern</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">pattern</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">prototype_text</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">constant_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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">constant_name</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">explicit_name_used_in_maths</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">constant_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">constant_phrase_holder</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">explicit_name_for_inverse</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">explicit_name_used_in_maths</span><span class="plain-syntax">; </span><span class="comment-syntax"> if so, this flag means it's like </span><span class="extract"><span class="extract-syntax">log()</span></span><span class="comment-syntax"> or </span><span class="extract"><span class="extract-syntax">sin()</span></span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">explicit_name_for_inverse</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g. </span><span class="extract"><span class="extract-syntax">exp</span></span><span class="comment-syntax"> for </span><span class="extract"><span class="extract-syntax">log</span></span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to_begin</span><span class="plain-syntax">; </span><span class="comment-syntax"> used in Basic mode only: this is to be the main phrase</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">to_family_data</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">to_family_data</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -90,9 +95,10 @@ function togglePopup(material_id) {
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ToPhraseFamily::create_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">ToPhraseFamily::create_family</span></span>:<br/>Imperative Definitions - <a href="5-id.html#SP5">§5</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">ToPhraseFamily::create_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">ToPhraseFamily::create_family</span></span>:<br/>Imperative Definitions - <a href="5-id.html#SP7">§7</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">TO_PHRASE_EFF_family</span><span class="plain-syntax"> = </span><a href="5-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">TO_PHRASE_EFF_family</span><span class="plain-syntax"> = </span><a href="5-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="5-tpf.html#SP4" class="function-link"><span class="function-syntax">ToPhraseFamily::claim</span></a><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="5-tpf.html#SP4" class="function-link"><span class="function-syntax">ToPhraseFamily::claim</span></a><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">ASSESS_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="5-tpf.html#SP7" class="function-link"><span class="function-syntax">ToPhraseFamily::assess</span></a><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">NEW_PHRASE_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="5-tpf.html#SP8" class="function-link"><span class="function-syntax">ToPhraseFamily::new_phrase</span></a><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">NEW_PHRASE_IMP_DEFN_MTID</span><span class="plain-syntax">, </span><a href="5-tpf.html#SP8" class="function-link"><span class="function-syntax">ToPhraseFamily::new_phrase</span></a><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -142,6 +148,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_name</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">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_name</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">tfd</span><span class="plain-syntax">-></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">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></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">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tfd</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>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">tfd</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>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_phrase_holder</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">-></span><span class="element-syntax">family_specific_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_to_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">tfd</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_to_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">tfd</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">form</span><span class="plain-syntax"> = </span><span class="function-syntax"><<r>></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">form</span><span class="plain-syntax"> = </span><span class="function-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">form</span><span class="plain-syntax"> != </span><span class="constant-syntax">4</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">form</span><span class="plain-syntax"> != </span><span class="constant-syntax">4</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -158,7 +165,7 @@ function togglePopup(material_id) {
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">form</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">form</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">)) </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">explicit_name_used_in_maths</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">form</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">form</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">)) </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">explicit_name_used_in_maths</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">form</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">explicit_name_for_inverse</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><to-phrase-preamble></span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">form</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">explicit_name_for_inverse</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><to-phrase-preamble></span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">pattern</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><to-phrase-preamble></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">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">prototype_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><to-phrase-preamble></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>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -184,10 +191,9 @@ preambles match:
|
||||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b></p>
|
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ToPhraseFamily::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="identifier-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">ToPhraseFamily::assess</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">ToPhraseFamily::assess</span></span>:<br/><a href="5-tpf.html#SP2">§2</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="reserved-syntax">to_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_to_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">to_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_to_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_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><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">pattern</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">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">prototype_text</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-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="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_name</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-tpf.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">The preamble parses to a named To phrase</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="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_name</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-tpf.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">The preamble parses to a named To phrase</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"><now-phrase-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"><now-phrase-preamble></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
|
||||||
|
@ -201,7 +207,7 @@ preambles match:
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><begin-phrase-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"><begin-phrase-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="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-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><span class="identifier-syntax">tfd</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>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -233,19 +239,71 @@ mode, we can get that value back again if we look it up by name.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</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>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"CPHR failed at %d, %u\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="identifier-syntax">cphr_kind</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">"CPHR failed at %d, %u\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="identifier-syntax">cphr_kind</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">explicit_name_used_in_maths</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">explicit_name_used_in_maths</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">explicit_name_for_inverse</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">explicit_name_for_inverse</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">explicit_name_used_in_maths</span><span class="plain-syntax"> = </span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">explicit_name_used_in_maths</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">constant_phrase_holder</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">;</span>
|
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="5-tpf.html#SP7">§7</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="5-tpf.html#SP7">§7</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b></p>
|
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ToPhraseFamily::new_phrase</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">ToPhraseFamily::new_phrase</span></span>:<br/><a href="5-tpf.html#SP2">§2</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="identifier-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ToPhraseFamily::new_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">ToPhraseFamily::new_phrase</span></span>:<br/><a href="5-tpf.html#SP2">§2</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="identifier-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_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">new_ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">usage_data</span><span class="plain-syntax">.</span><span class="identifier-syntax">to_begin</span><span class="plain-syntax">) </span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-></span><span class="identifier-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><span class="reserved-syntax">to_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_to_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_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">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">to_begin</span><span class="plain-syntax">) </span><span class="identifier-syntax">new_ph</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><span class="identifier-syntax">Routines::ToPhrases::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Routines::ToPhrases::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
<span class="identifier-syntax">phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">ToPhraseFamily::inverse</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">ToPhraseFamily::inverse</span></span>:<br/>Equations - <a href="6-eqt.html#SP41_3_2">§41.3.2</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></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="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">to_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_to_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_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">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">explicit_name_for_inverse</span><span class="plain-syntax">)) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-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="identifier-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="5-tpf.html#SP8" class="function-link"><span class="function-syntax">ToPhraseFamily::get_equation_form</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">from</span><span 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">tfd</span><span class="plain-syntax">-></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>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
<span class="identifier-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">ToPhraseFamily::constant_phrase</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></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="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">to_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_to_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</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">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ToPhraseFamily::constant_name</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">to_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_to_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</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">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_name</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ToPhraseFamily::has_name_as_constant</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">ToPhraseFamily::has_name_as_constant</span></span>:<br/>Imperative Definitions - <a href="5-id.html#SP11_7">§11.7</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></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="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">to_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_to_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_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">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax">) &&</span>
|
||||||
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></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">) &&</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">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax">-></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>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ToPhraseFamily::get_equation_form</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">ToPhraseFamily::get_equation_form</span></span>:<br/>Equations - <a href="6-eqt.html#SP19">§19</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">to_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_to_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_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">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">explicit_name_used_in_maths</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">Wordings::first_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§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">
|
||||||
|
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">ToPhraseFamily::get_prototype_text</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">to_family_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfd</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_to_family_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="element-syntax">family_specific_data</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">tfd</span><span class="plain-syntax">-></span><span class="element-syntax">prototype_text</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="5-adf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresscurrent">tpf</li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-rf.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="5-adf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-id.html">id</a></li><li class="progresssection"><a href="5-adf.html">adf</a></li><li class="progresscurrent">tpf</li><li class="progresssection"><a href="5-rf.html">rf</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progresschapter"><a href="7-kpr.html">7</a></li><li class="progressnext"><a href="5-rf.html">❯</a></li></ul></div>
|
||||||
|
|
|
@ -760,7 +760,7 @@ declarations will trump them.
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-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">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="identifier-syntax">phrase</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="identifier-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><span class="identifier-syntax">Phrases::Usage::get_equation_form</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-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="5-tpf.html#SP8" class="function-link"><span class="function-syntax">ToPhraseFamily::get_equation_form</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">from</span><span 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::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">equation_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ev</span><span class="plain-syntax"> = </span><a href="6-eqt.html#SP20" class="function-link"><span class="function-syntax">Equations::eqn_add_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_real_number</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">equation_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ev</span><span class="plain-syntax"> = </span><a href="6-eqt.html#SP20" class="function-link"><span class="function-syntax">Equations::eqn_add_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_real_number</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">ev</span><span class="plain-syntax">-></span><span class="element-syntax">function_notated</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">ev</span><span class="plain-syntax">-></span><span class="element-syntax">function_notated</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">;</span>
|
||||||
|
@ -2095,7 +2095,7 @@ in this case, <span class="extract"><span class="extract-syntax">exp</span></spa
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"not a function being applied"</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">"not a function being applied"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">f</span><span class="plain-syntax"> = </span><span class="identifier-syntax">fnode</span><span class="plain-syntax">-></span><span class="element-syntax">leaf_symbol</span><span class="plain-syntax">-></span><span class="element-syntax">function_notated</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">f</span><span class="plain-syntax"> = </span><span class="identifier-syntax">fnode</span><span class="plain-syntax">-></span><span class="element-syntax">leaf_symbol</span><span class="plain-syntax">-></span><span class="element-syntax">function_notated</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">finv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Phrases::Usage::get_equation_inverse</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">f</span><span class="plain-syntax">-></span><span class="identifier-syntax">usage_data</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">finv</span><span class="plain-syntax"> = </span><a href="5-tpf.html#SP8" class="function-link"><span class="function-syntax">ToPhraseFamily::inverse</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">f</span><span class="plain-syntax">-></span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">finv</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> no known inverse for this function</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">finv</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="comment-syntax"> no known inverse for this function</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">equation_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ev</span><span class="plain-syntax">, *</span><span class="identifier-syntax">ev_inverse</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">equation_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ev</span><span class="plain-syntax">, *</span><span class="identifier-syntax">ev_inverse</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
|
|
@ -197,7 +197,7 @@ table we are in, yet still only cite a small part of it —
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ACT_ON_SIGIL</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ACT_ON_SIGIL</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_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_stream</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">definition</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_stream</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">definition</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><span class="identifier-syntax">Phrases::Usage::get_preamble_text</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-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">XW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ToPhraseFamily::get_prototype_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording_as_source</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">XW</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording_as_source</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">XW</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_begin</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="string-syntax">""</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_begin</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP6" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="string-syntax">""</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="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||||
|
|
|
@ -187,7 +187,7 @@ a given action:
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Rulebooks::requires_specific_action</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Rulebooks::requires_specific_action</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">waiver</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">waiver</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax"> = </span><span class="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">PW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Phrases::Usage::get_prewhile_text</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-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">PW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RuleFamily::get_prewhile_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">)) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">)) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_WORDING</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">PW</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_WORDING</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">PW</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-nap.html#SP3" class="function-link"><span class="function-syntax">NamedActionPatterns::by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::from</span><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">)))</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-nap.html#SP3" class="function-link"><span class="function-syntax">NamedActionPatterns::by_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::from</span><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">)))</span>
|
||||||
|
|
|
@ -89,7 +89,6 @@ 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">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">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">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#SP8" 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="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">, &</span><a href="4-lv.html#SP43" class="function-link"><span class="function-syntax">LocalVariables::writer</span></a><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">, &</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 +97,6 @@ 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">'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">'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">'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#SP8" 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">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">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>
|
<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>
|
||||||
|
|
|
@ -92,7 +92,7 @@ and a shared set of variables, so this will not be a long section of code.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">activity</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">activity</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure activity is accessed in 2/rls, 2/rlb, 2/fao, 3/pu, 3/prcd, 3/dptd, 3/po, 3/pav, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure activity is accessed in 2/rls, 2/rlb, 2/fao, 3/prcd, 3/po, 3/pav, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Whereas rulebooks can turn values into other values, activities are more like
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Whereas rulebooks can turn values into other values, activities are more like
|
||||||
void functions: they work on a value, but produce nothing.
|
void functions: they work on a value, but produce nothing.
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -170,7 +170,7 @@ structures <a href="2-fao.html#SP3" class="internal">rulebook_outcome</a> and <a
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">named_rulebook_outcome</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">named_rulebook_outcome</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure named_rulebook_outcome is accessed in 2/rls, 2/act, 3/pu, 3/dptd, 3/po, 3/pav, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure named_rulebook_outcome is accessed in 2/rls, 2/act, 3/po, 3/pav, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>That awkward distinction between a <a href="2-fao.html#SP3" class="internal">rulebook_outcome</a> and a <a href="2-fao.html#SP4" class="internal">named_rulebook_outcome</a>
|
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>That awkward distinction between a <a href="2-fao.html#SP3" class="internal">rulebook_outcome</a> and a <a href="2-fao.html#SP4" class="internal">named_rulebook_outcome</a>
|
||||||
brings us edge cases if a rule has been written for use in one rulebook, but then
|
brings us edge cases if a rule has been written for use in one rulebook, but then
|
||||||
has been explicitly listed in another, or is more than one rulebook.
|
has been explicitly listed in another, or is more than one rulebook.
|
||||||
|
|
|
@ -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="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">-></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">id</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">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">-></span><span class="identifier-syntax">defines</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">-></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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::get_rulebook</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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><span class="identifier-syntax">RuleFamily::get_rulebook</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::get_rulebook_placement</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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><span class="identifier-syntax">RuleFamily::get_rulebook_placement</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</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="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">-></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">, &</span><span class="identifier-syntax">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">-></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">, &</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><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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::set_rulebook</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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">RuleFamily::set_rulebook</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</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 --> $K\n"</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 --> $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><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>
|
<span class="plain-syntax"> }</span>
|
||||||
|
|
|
@ -126,7 +126,7 @@ quaint idea of having enumerated ways in which they finish (see <a href="2-fao.h
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">rulebook</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">rulebook</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure rulebook is accessed in 2/rls, 2/fao, 2/act, 3/pu, 6/cp and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure rulebook is accessed in 2/rls, 2/fao, 2/act, 6/cp and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>The following creates one:
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>The following creates one:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -242,12 +242,12 @@ being analogous to a function \(X\to Y\).
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">§8</a><br/>Phrase Usage - <a href="3-pu.html#SP12_1_1">§12.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">§8</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">(&(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-></span><span class="element-syntax">my_focus</span><span 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">(&(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-></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="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="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">§2.4</a><br/>Phrase Usage - <a href="3-pu.html#SP12_1_1">§12.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">§2.4</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">(&(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-></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><a href="2-fao.html#SP1" class="function-link"><span class="function-syntax">FocusAndOutcome::get_focus_parameter_kind</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-></span><span class="element-syntax">my_focus</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
@ -436,7 +436,7 @@ It marks a rulebook as definitely needing to check the actor.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Rulebooks::log_name_only</span></span>:<br/>Phrase Usage - <a href="3-pu.html#SP8">§8</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><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">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">B</span><span class="plain-syntax">-></span><span class="element-syntax">primary_name</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">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">B</span><span class="plain-syntax">-></span><span class="element-syntax">primary_name</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
@ -590,7 +590,7 @@ go into <span class="extract"><span class="extract-syntax">B->my_variables</s
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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::grant_access_to_variables</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::grant_access_to_variables</span></span>:<br/>Activities - <a href="2-act.html#SP6">§6</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">stacked_variable_owner</span><span class="plain-syntax"> *</span><span class="identifier-syntax">set</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::grant_access_to_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">Rulebooks::grant_access_to_variables</span></span>:<br/>Activities - <a href="2-act.html#SP6">§6</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">stacked_variable_owner</span><span class="plain-syntax"> *</span><span class="identifier-syntax">set</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax">-></span><span class="element-syntax">accessible_variables</span><span class="plain-syntax"> =</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">B</span><span class="plain-syntax">-></span><span class="element-syntax">accessible_variables</span><span class="plain-syntax"> =</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-sv.html#SP3" class="function-link"><span class="function-syntax">StackedVariables::add_owner_to_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-></span><span class="element-syntax">accessible_variables</span><span class="plain-syntax">, </span><span class="identifier-syntax">set</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="4-sv.html#SP3" class="function-link"><span class="function-syntax">StackedVariables::add_owner_to_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">B</span><span class="plain-syntax">-></span><span class="element-syntax">accessible_variables</span><span class="plain-syntax">, </span><span class="identifier-syntax">set</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
@ -611,7 +611,7 @@ user in beta-testing.)
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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::attach_rule</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">Rulebooks::attach_rule</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP6">§6</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">booking</span><span class="plain-syntax"> *</span><span class="identifier-syntax">br</span><span class="plain-syntax">,</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::attach_rule</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::attach_rule</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP6">§6</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">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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">placing</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">side</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ref_rule</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">placing</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">side</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ref_rule</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">"Attaching booking $b to rulebook $K"</span><span class="plain-syntax">, </span><span class="identifier-syntax">br</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">RULE_ATTACHMENTS</span><span class="plain-syntax">, </span><span class="string-syntax">"Attaching booking $b to rulebook $K"</span><span class="plain-syntax">, </span><span class="identifier-syntax">br</span><span class="plain-syntax">, </span><span class="identifier-syntax">B</span><span class="plain-syntax">);</span>
|
||||||
|
|
||||||
|
@ -777,7 +777,7 @@ rulebooks. This is all a bit inelegant, but we manage.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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::rb_match_from_description</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">Rulebooks::rb_match_from_description</span></span>:<br/><a href="2-rlb.html#SP15">§15</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">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">SB</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax">, </span><span class="reserved-syntax">rulebook_match</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rm</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::rb_match_from_description</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">Rulebooks::rb_match_from_description</span></span>:<br/><a href="2-rlb.html#SP15">§15</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">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">SB</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">len</span><span class="plain-syntax">, </span><span class="reserved-syntax">rulebook_match</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rm</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-rlb.html#SP17_1" class="named-paragraph-link"><span class="named-paragraph">Find the longest-named rulebook whose name appears at the front of W</span><span class="named-paragraph-number">17.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-rlb.html#SP17_1" class="named-paragraph-link"><span class="named-paragraph">Find the longest-named rulebook whose name appears at the front of W</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rm</span><span class="plain-syntax">-></span><span class="element-syntax">matched_rulebook</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rm</span><span class="plain-syntax">-></span><span class="element-syntax">matched_rulebook</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
@ -897,7 +897,7 @@ for the first two.
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">built_in_rulebooks_initialised</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">built_in_rulebooks_initialised</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">built_in_rulebooks</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_BUILT_IN_RULEBOOKS</span><span class="plain-syntax">];</span>
|
<span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">built_in_rulebooks</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_BUILT_IN_RULEBOOKS</span><span class="plain-syntax">];</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::std</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Rulebooks::std</span></span>:<br/><a href="2-rlb.html#SP2_1">§2.1</a>, <a href="2-rlb.html#SP7">§7</a>, <a href="2-rlb.html#SP16_1">§16.1</a>, <a href="2-rlb.html#SP16_2">§16.2</a><br/>Rules - <a href="2-rls.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rb</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="function-syntax">Rulebooks::std</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">Rulebooks::std</span></span>:<br/><a href="2-rlb.html#SP2_1">§2.1</a>, <a href="2-rlb.html#SP7">§7</a>, <a href="2-rlb.html#SP16_1">§16.1</a>, <a href="2-rlb.html#SP16_2">§16.2</a><br/>Rules - <a href="2-rls.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">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">rb</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">rb</span><span class="plain-syntax"> >= </span><span class="constant-syntax">MAX_BUILT_IN_RULEBOOKS</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"rb out of range"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">rb</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">rb</span><span class="plain-syntax"> >= </span><span class="constant-syntax">MAX_BUILT_IN_RULEBOOKS</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"rb out of range"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">built_in_rulebooks_initialised</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">built_in_rulebooks_initialised</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">built_in_rulebooks_initialised</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">built_in_rulebooks_initialised</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
|
@ -906,7 +906,7 @@ for the first two.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">built_in_rulebooks</span><span class="plain-syntax">[</span><span class="identifier-syntax">rb</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">built_in_rulebooks</span><span class="plain-syntax">[</span><span class="identifier-syntax">rb</span><span class="plain-syntax">];</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::set_std</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">Rulebooks::set_std</span></span>:<br/><a href="2-rlb.html#SP2">§2</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::set_std</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Rulebooks::set_std</span></span>:<br/><a href="2-rlb.html#SP2">§2</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">built_in_rulebooks_initialised</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">built_in_rulebooks_initialised</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">built_in_rulebooks_initialised</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">built_in_rulebooks_initialised</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">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="plain-syntax"><</span><span class="constant-syntax">MAX_BUILT_IN_RULEBOOKS</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">built_in_rulebooks</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</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="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="plain-syntax"><</span><span class="constant-syntax">MAX_BUILT_IN_RULEBOOKS</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">built_in_rulebooks</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
|
|
@ -124,7 +124,7 @@ different dynamics altogether. In short, then: rules are not phrases.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">rule</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">rule</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure rule is accessed in 2/rlb, 2/fao, 2/act, 3/pu, 3/prcd, 3/dptd, 3/po, 3/pav, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure rule is accessed in 2/rlb, 2/fao, 2/act, 3/prcd, 3/po, 3/pav, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Rules are created before their definitions can be parsed or compiled. A
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Rules are created before their definitions can be parsed or compiled. A
|
||||||
typical rule like so:
|
typical rule like so:
|
||||||
</p>
|
</p>
|
||||||
|
@ -145,7 +145,7 @@ rule called <span class="extract"><span class="extract-syntax">W</span></span>,
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">§11</a><br/>Phrase Usage - <a href="3-pu.html#SP2">§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="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">§11</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="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="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>
|
<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>
|
||||||
|
@ -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="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="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">§2</a>, <a href="2-rls.html#SP6">§6</a><br/>Phrase Usage - <a href="3-pu.html#SP2">§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">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">§2</a>, <a href="2-rls.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="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="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="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>
|
<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>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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#SP2">§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="identifier-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><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">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">-></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="identifier-syntax">R</span><span class="plain-syntax">-></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="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="identifier-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">§6</a><br/>Booking Lists - <a href="2-bl.html#SP7">§7</a><br/>Phrase Usage - <a href="3-pu.html#SP2_2">§2.2</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">§8</a><br/>Compile Invocations Inline - <a href="6-cii.html#SP3_1_1_4_12">§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="identifier-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="function-syntax">Rules::get_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::get_imperative_definition</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP6">§6</a><br/>Booking Lists - <a href="2-bl.html#SP7">§7</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">§8</a><br/>Compile Invocations Inline - <a href="6-cii.html#SP3_1_1_4_12">§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">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">-></span><span class="element-syntax">defn_as_I7_source</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="element-syntax">defn_as_I7_source</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
@ -333,7 +333,7 @@ the variables belonging to that activity.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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::put_variables_in_scope</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">Rules::put_variables_in_scope</span></span>:<br/>Rulebooks - <a href="2-rlb.html#SP12">§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">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">Rules::put_variables_in_scope</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::put_variables_in_scope</span></span>:<br/>Rulebooks - <a href="2-rlb.html#SP12">§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">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">R</span><span class="plain-syntax">-></span><span class="element-syntax">variables_visible_in_definition</span><span class="plain-syntax"> =</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">variables_visible_in_definition</span><span class="plain-syntax"> =</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-sv.html#SP3" class="function-link"><span class="function-syntax">StackedVariables::append_owner_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">variables_visible_in_definition</span><span class="plain-syntax">, </span><span class="identifier-syntax">stvol</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="4-sv.html#SP3" class="function-link"><span class="function-syntax">StackedVariables::append_owner_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">variables_visible_in_definition</span><span class="plain-syntax">, </span><span class="identifier-syntax">stvol</span><span class="plain-syntax">);</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">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#SP12_1_1">§12.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><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">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">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>
|
<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>
|
||||||
|
@ -383,7 +383,7 @@ is wording which should contain just the double-quoted function name.
|
||||||
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. Logging. </b></p>
|
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. Logging. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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::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">Rules::log</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP2">§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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::log</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">Rules::log</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP2">§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="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="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"<null-rule>"</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">R</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">"<null-rule>"</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">R</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"["</span><span 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">R</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">R</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"["</span><span 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">defn_as_I7_source</span><span 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">defn_as_I7_source</span><span class="plain-syntax">)</span>
|
||||||
|
@ -406,7 +406,7 @@ at run-time if this should happen:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::eq</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">Rules::eq</span></span>:<br/>Booking Lists - <a href="2-bl.html#SP5_2">§5.2</a>, <a href="2-bl.html#SP5_3">§5.3</a>, <a href="2-bl.html#SP5_6_1">§5.6.1</a>, <a href="2-bl.html#SP6">§6</a>, <a href="2-bl.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R1</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::eq</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::eq</span></span>:<br/>Booking Lists - <a href="2-bl.html#SP5_2">§5.2</a>, <a href="2-bl.html#SP5_3">§5.3</a>, <a href="2-bl.html#SP5_6_1">§5.6.1</a>, <a href="2-bl.html#SP6">§6</a>, <a href="2-bl.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R1</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R2</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#SP13" class="function-link"><span class="function-syntax">Rules::defined</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R1</span><span class="plain-syntax">)) || (</span><a href="2-rls.html#SP13" class="function-link"><span class="function-syntax">Rules::defined</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R2</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#SP13" class="function-link"><span class="function-syntax">Rules::defined</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R1</span><span class="plain-syntax">)) || (</span><a href="2-rls.html#SP13" class="function-link"><span class="function-syntax">Rules::defined</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R2</span><span class="plain-syntax">))) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R2</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax"> != </span><span class="identifier-syntax">R1</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R2</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax"> != </span><span class="identifier-syntax">R1</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::ne</span><span class="plain-syntax">(</span><span class="identifier-syntax">R1</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_Inter_function</span><span class="plain-syntax">, </span><span class="identifier-syntax">R2</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_Inter_function</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::ne</span><span class="plain-syntax">(</span><span class="identifier-syntax">R1</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_Inter_function</span><span class="plain-syntax">, </span><span class="identifier-syntax">R2</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_Inter_function</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>
|
||||||
|
@ -428,7 +428,7 @@ than <span class="extract"><span class="extract-syntax">R1</span></span>, or 0 i
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::cmp</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">Rules::cmp</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R1</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R2</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">log_this</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::cmp</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">Rules::cmp</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R1</span><span class="plain-syntax">, </span><span class="reserved-syntax">rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R2</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">log_this</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">R1</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax">, *</span><span class="identifier-syntax">id2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">R2</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">id1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">R1</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax">, *</span><span class="identifier-syntax">id2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">R2</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</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">phrcd1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">phrcd2</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">ph_runtime_context_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phrcd1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">phrcd2</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">id1</span><span class="plain-syntax">) </span><span class="identifier-syntax">phrcd1</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">id1</span><span class="plain-syntax">-></span><span class="identifier-syntax">defines</span><span class="plain-syntax">-></span><span class="element-syntax">runtime_context_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">id1</span><span class="plain-syntax">) </span><span class="identifier-syntax">phrcd1</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">id1</span><span class="plain-syntax">-></span><span class="identifier-syntax">defines</span><span class="plain-syntax">-></span><span class="element-syntax">runtime_context_data</span><span class="plain-syntax">);</span>
|
||||||
|
@ -562,14 +562,14 @@ it's possible to change the way that applicability testing is done.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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_always_test_actor</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Rules::set_always_test_actor</span></span>:<br/>Rulebooks - <a href="2-rlb.html#SP8">§8</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::set_always_test_actor</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">Rules::set_always_test_actor</span></span>:<br/>Rulebooks - <a href="2-rlb.html#SP8">§8</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">defn_as_I7_source</span><span 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">defn_as_I7_source</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="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax">-></span><span class="identifier-syntax">defines</span><span class="plain-syntax">-></span><span class="element-syntax">runtime_context_data</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="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax">-></span><span class="identifier-syntax">defines</span><span class="plain-syntax">-></span><span class="element-syntax">runtime_context_data</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="3-prcd.html#SP3" class="function-link"><span class="function-syntax">Phrases::Context::set_always_test_actor</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="3-prcd.html#SP3" class="function-link"><span class="function-syntax">Phrases::Context::set_always_test_actor</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::set_never_test_actor</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">Rules::set_never_test_actor</span></span>:<br/>Rulebooks - <a href="2-rlb.html#SP8">§8</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::set_never_test_actor</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">Rules::set_never_test_actor</span></span>:<br/>Rulebooks - <a href="2-rlb.html#SP8">§8</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">defn_as_I7_source</span><span 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">defn_as_I7_source</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="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax">-></span><span class="identifier-syntax">defines</span><span class="plain-syntax">-></span><span class="element-syntax">runtime_context_data</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="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="element-syntax">defn_as_I7_source</span><span class="plain-syntax">-></span><span class="identifier-syntax">defines</span><span class="plain-syntax">-></span><span class="element-syntax">runtime_context_data</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="3-prcd.html#SP3" class="function-link"><span class="function-syntax">Phrases::Context::set_never_test_actor</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="3-prcd.html#SP3" class="function-link"><span class="function-syntax">Phrases::Context::set_never_test_actor</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">);</span>
|
||||||
|
@ -631,7 +631,7 @@ possibility we store one of these:
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">content</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">content</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">rule_response</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">rule_response</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">rule_response</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::new_rule_response</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Rules::new_rule_response</span></span>:<br/><a href="2-rls.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">rule_response</span><span class="plain-syntax"> </span><span class="function-syntax">Rules::new_rule_response</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Rules::new_rule_response</span></span>:<br/><a href="2-rls.html#SP2">§2</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">rule_response</span><span class="plain-syntax"> </span><span class="identifier-syntax">rr</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">rule_response</span><span class="plain-syntax"> </span><span class="identifier-syntax">rr</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rr</span><span class="plain-syntax">.</span><span class="element-syntax">message</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">rr</span><span class="plain-syntax">.</span><span class="element-syntax">message</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">rr</span><span class="plain-syntax">.</span><span class="element-syntax">used</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">rr</span><span class="plain-syntax">.</span><span class="element-syntax">used</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
|
|
@ -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">-></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">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">-></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">-></span><span class="element-syntax">return_kind</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">-></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">"</i>"</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">"</i>"</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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::get_equation_form</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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><span class="identifier-syntax">ToPhraseFamily::get_equation_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span 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::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">"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>y</i>&nbsp;=&nbsp;<b>%+W</b>(<i>x</i>)"</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">"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>y</i>&nbsp;=&nbsp;<b>%+W</b>(<i>x</i>)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
|
@ -397,7 +397,7 @@ of course.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::get_equation_form</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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><span class="identifier-syntax">ToPhraseFamily::get_equation_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span 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::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_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>
|
<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>
|
||||||
|
@ -411,13 +411,13 @@ of course.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">ph</span><span class="plain-syntax">-></span><span class="element-syntax">usage_data</span><span class="plain-syntax">.</span><span class="element-syntax">constant_phrase_holder</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">CW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ToPhraseFamily::constant_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</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">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">usage_data</span><span class="plain-syntax">.</span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax">-></span><span class="element-syntax">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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">CW</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_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>
|
<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>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"<b>Name:</b> "</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">"<b>Name:</b> "</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PasteButtons::paste_W</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</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">PasteButtons::paste_W</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">CW</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">"&nbsp;%+W"</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">"&nbsp;%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">CW</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="3-dptd.html#SP6">§6</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="3-dptd.html#SP6">§6</a>.</li></ul>
|
||||||
|
@ -1236,7 +1236,7 @@ in exactly one place: for example,
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="3-dptd.html#SP21">§21</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="3-dptd.html#SP21">§21</a>.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-ptd.html">❮</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-phr.html">phr</a></li><li class="progresssection"><a href="3-pu.html">pu</a></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="progresscurrent">dptd</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-po.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-ptd.html">❮</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-phr.html">phr</a></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="progresscurrent">dptd</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-po.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -228,7 +228,7 @@ significant timing difficulties.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="2-act.html">❮</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="progresscurrent">itp</li><li class="progresssection"><a href="3-phr.html">phr</a></li><li class="progresssection"><a href="3-pu.html">pu</a></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-phr.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="2-act.html">❮</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="progresscurrent">itp</li><li class="progresssection"><a href="3-phr.html">phr</a></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-phr.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -93,7 +93,7 @@ own right, a functional-programming sort of device. For example:
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</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="reserved-syntax">constant_phrase</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure constant_phrase is accessed in 2/rls, 2/fao, 2/act, 3/pu, 3/dptd, 3/po, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure constant_phrase is accessed in 2/rls, 2/fao, 2/act, 3/po, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Here we create a new named phrase ("doubling", say):
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Here we create a new named phrase ("doubling", say):
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -152,10 +152,10 @@ the following takes a patch-it-later approach.
|
||||||
<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('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Phrases::Constants::as_phrase</span></span>:<br/><a href="3-pav.html#SP6">§6</a>, <a href="3-pav.html#SP7">§7</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('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Phrases::Constants::as_phrase</span></span>:<br/><a href="3-pav.html#SP6">§6</a>, <a href="3-pav.html#SP7">§7</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"> == </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">-></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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></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>
|
<span class="plain-syntax"> </span><span class="identifier-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">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">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">imperative_defn</span><span 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="element-syntax">usage_data</span><span class="plain-syntax">.</span><span class="element-syntax">constant_phrase_holder</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">ToPhraseFamily::constant_phrase</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">) == </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">phrase_meant</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">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">phrase_meant</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="identifier-syntax">defines</span><span class="plain-syntax">;</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">break</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
|
@ -314,7 +314,7 @@ made above.
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="3-pav.html#SP8">§8</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="3-pav.html#SP8">§8</a>.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-po.html">❮</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-phr.html">phr</a></li><li class="progresssection"><a href="3-pu.html">pu</a></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="progresscurrent">pav</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-tph.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-po.html">❮</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-phr.html">phr</a></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="progresscurrent">pav</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-tph.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -116,7 +116,6 @@ code below.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">requests_package</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">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">requests_package</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ph_type_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">type_data</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ph_type_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">type_data</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">usage_data</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ph_runtime_context_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">runtime_context_data</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ph_runtime_context_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">runtime_context_data</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ph_stack_frame</span><span class="plain-syntax"> </span><span class="identifier-syntax">stack_frame</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ph_stack_frame</span><span class="plain-syntax"> </span><span class="identifier-syntax">stack_frame</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ph_options_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">options_data</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ph_options_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">options_data</span><span class="plain-syntax">;</span>
|
||||||
|
@ -133,7 +132,7 @@ code below.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</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">phrase</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure phrase is accessed in 2/rls, 2/rb, 3/pu, 3/prcd, 3/ptd, 3/dptd, 3/po, 3/pav, 3/tph, 3/tp, 6/inv, 6/pi, 6/ci, 6/cii, 6/cp, 6/cste and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure phrase is accessed in 2/rls, 2/rb, 3/prcd, 3/ptd, 3/dptd, 3/po, 3/pav, 3/tph, 3/tp, 6/inv, 6/pi, 6/ci, 6/cii, 6/cp, 6/cste and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>"To..." phrases, though no others, are listed in logical precedence order:
|
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>"To..." phrases, though no others, are listed in logical precedence order:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -162,7 +161,6 @@ invocation which is given as verbatim I6.
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ph_options_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">phod</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">ph_options_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">phod</span><span class="plain-syntax">;</span>
|
||||||
<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">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">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_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">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">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="reserved-syntax">ph_runtime_context_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
@ -202,14 +200,14 @@ invocation which is given as verbatim I6.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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#SP3" 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">id</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> ;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="3-phr.html#SP5">§5</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="3-phr.html#SP5">§5</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP5_3" class="paragraph-anchor"></a><b>§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 class="commentary firstcommentary"><a id="SP5_3" class="paragraph-anchor"></a><b>§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>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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#SP4" class="function-link"><span class="function-syntax">Phrases::Usage::get_preamble_text</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">phud</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ToPhraseFamily::get_prototype_text</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">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="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"> >= </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">(&</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">inline_wn</span><span class="plain-syntax"> >= </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">(&</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">-></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="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="identifier-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TO_PHRASE_EFF_family</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -270,8 +268,7 @@ inline definitions.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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#SP4" class="function-link"><span class="function-syntax">Phrases::Usage::get_preamble_text</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">phud</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="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: <%W>\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="identifier-syntax">log_text</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: <%W>\n$U"</span><span class="plain-syntax">, </span><span class="identifier-syntax">XW</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">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>
|
<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>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</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">-></span><span class="element-syntax">from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">id</span><span class="plain-syntax">;</span>
|
||||||
|
@ -280,7 +277,6 @@ inline definitions.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-></span><span class="element-syntax">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">new_ph</span><span class="plain-syntax">-></span><span class="element-syntax">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">new_ph</span><span class="plain-syntax">-></span><span class="element-syntax">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="identifier-syntax">new_ph</span><span class="plain-syntax">-></span><span class="element-syntax">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="identifier-syntax">new_ph</span><span class="plain-syntax">-></span><span class="element-syntax">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">new_ph</span><span class="plain-syntax">-></span><span class="element-syntax">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">new_ph</span><span class="plain-syntax">-></span><span class="element-syntax">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">new_ph</span><span class="plain-syntax">-></span><span class="element-syntax">inline_wn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">inline_wn</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="element-syntax">inline_wn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">inline_wn</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="element-syntax">inter_head_defn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">new_ph</span><span class="plain-syntax">-></span><span class="element-syntax">inter_head_defn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
|
@ -386,7 +382,6 @@ 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('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Phrases::log</span></span>:<br/>Imperative Module - <a href="1-im.html#SP2">§2</a><br/>To Phrases - <a href="3-tph.html#SP5">§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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::log</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::log</span></span>:<br/>Imperative Module - <a href="1-im.html#SP2">§2</a><br/>To Phrases - <a href="3-tph.html#SP5">§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="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><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#SP8" class="function-link"><span class="function-syntax">Phrases::Usage::log_rule_name</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::log_briefly</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_briefly</span></span>:<br/>Invocations - <a href="6-inv.html#SP9">§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>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::log_briefly</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_briefly</span></span>:<br/>Invocations - <a href="6-inv.html#SP9">§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>
|
||||||
|
@ -527,7 +522,7 @@ response to "requests". All other phrases are compiled just once.
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-itp.html">❮</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="progresscurrent">phr</li><li class="progresssection"><a href="3-pu.html">pu</a></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-pu.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-itp.html">❮</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="progresscurrent">phr</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">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -108,7 +108,7 @@ valid as values, since a condition is not also a value in Inform 7.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax">; </span><span class="comment-syntax"> text of name</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax">; </span><span class="comment-syntax"> text of name</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">phrase_option</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">phrase_option</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure phrase_option is accessed in 2/rls, 2/fao, 2/act, 3/pu, 3/dptd, 3/pav, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure phrase_option is accessed in 2/rls, 2/fao, 2/act, 3/pav, 4/sv, 6/cii, 6/cste and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Creation. </b>By default, a phrase has no options.
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Creation. </b>By default, a phrase has no options.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -407,7 +407,7 @@ by "and":
|
||||||
</pre>
|
</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>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-dptd.html">❮</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-phr.html">phr</a></li><li class="progresssection"><a href="3-pu.html">pu</a></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="progresscurrent">po</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-pav.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-dptd.html">❮</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-phr.html">phr</a></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="progresscurrent">po</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-pav.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -176,13 +176,13 @@ rulebooks reach them.
|
||||||
<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">endif</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure ph_runtime_context_data is accessed in 3/pu and here.</li><li>The structure rule_context is private to this section.</li></ul>
|
<ul class="endnotetexts"><li>The structure ph_runtime_context_data is private to this section.</li><li>The structure rule_context is private to this section.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>As we've seen, PHRCDs are really made by translating them from PHUDs, and
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>As we've seen, PHRCDs are really made by translating them from PHUDs, and
|
||||||
the following only blanks out a PHRCD structure ready for that to happen.
|
the following only blanks out a PHRCD structure ready for that to happen.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">§5.6</a><br/>Phrase Usage - <a href="3-pu.html#SP12">§12</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">§5.6</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="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_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>
|
<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>
|
||||||
|
@ -902,7 +902,7 @@ values, of the kind to which the activity applies.
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-pu.html">❮</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-phr.html">phr</a></li><li class="progresssection"><a href="3-pu.html">pu</a></li><li class="progresscurrent">prcd</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-ptd.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-phr.html">❮</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-phr.html">phr</a></li><li class="progresscurrent">prcd</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-ptd.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -991,7 +991,7 @@ source text.
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-prcd.html">❮</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-phr.html">phr</a></li><li class="progresssection"><a href="3-pu.html">pu</a></li><li class="progresssection"><a href="3-prcd.html">prcd</a></li><li class="progresscurrent">ptd</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-dptd.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-prcd.html">❮</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-phr.html">phr</a></li><li class="progresssection"><a href="3-prcd.html">prcd</a></li><li class="progresscurrent">ptd</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-dptd.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -1,864 +0,0 @@
|
||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Phrase Usage</title>
|
|
||||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
||||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
||||||
<meta http-equiv="Content-Language" content="en-gb">
|
|
||||||
|
|
||||||
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
||||||
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
||||||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
||||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
||||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
||||||
<script>
|
|
||||||
function togglePopup(material_id) {
|
|
||||||
var popup = document.getElementById(material_id);
|
|
||||||
popup.classList.toggle("show");
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<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">
|
|
||||||
<nav role="navigation">
|
|
||||||
<h1><a href="../index.html">
|
|
||||||
<img src="../docs-assets/Inform.png" height=72">
|
|
||||||
</a></h1>
|
|
||||||
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
|
||||||
<li><a href="../other.html">other tools</a></li>
|
|
||||||
<li><a href="../extensions.html">extensions and kits</a></li>
|
|
||||||
<li><a href="../units.html">unit test tools</a></li>
|
|
||||||
</ul><h2>Compiler Webs</h2><ul>
|
|
||||||
<li><a href="../inbuild/index.html">inbuild</a></li>
|
|
||||||
<li><a href="../inform7/index.html">inform7</a></li>
|
|
||||||
<li><a href="../inter/index.html">inter</a></li>
|
|
||||||
</ul><h2>Inbuild Modules</h2><ul>
|
|
||||||
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
|
||||||
</ul><h2>Inform7 Modules</h2><ul>
|
|
||||||
<li><a href="../core-module/index.html">core</a></li>
|
|
||||||
<li><a href="../assertions-module/index.html">assertions</a></li>
|
|
||||||
<li><a href="../values-module/index.html">values</a></li>
|
|
||||||
<li><a href="../knowledge-module/index.html">knowledge</a></li>
|
|
||||||
<li><a href="index.html"><span class="selectedlink">imperative</span></a></li>
|
|
||||||
<li><a href="../runtime-module/index.html">runtime</a></li>
|
|
||||||
<li><a href="../if-module/index.html">if</a></li>
|
|
||||||
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
|
||||||
<li><a href="../index-module/index.html">index</a></li>
|
|
||||||
</ul><h2>Inter Modules</h2><ul>
|
|
||||||
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
|
||||||
<li><a href="../building-module/index.html">building</a></li>
|
|
||||||
<li><a href="../codegen-module/index.html">codegen</a></li>
|
|
||||||
</ul><h2>Services</h2><ul>
|
|
||||||
<li><a href="../arch-module/index.html">arch</a></li>
|
|
||||||
<li><a href="../calculus-module/index.html">calculus</a></li>
|
|
||||||
<li><a href="../html-module/index.html">html</a></li>
|
|
||||||
<li><a href="../inflections-module/index.html">inflections</a></li>
|
|
||||||
<li><a href="../kinds-module/index.html">kinds</a></li>
|
|
||||||
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
|
||||||
<li><a href="../problems-module/index.html">problems</a></li>
|
|
||||||
<li><a href="../syntax-module/index.html">syntax</a></li>
|
|
||||||
<li><a href="../words-module/index.html">words</a></li>
|
|
||||||
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<main role="main">
|
|
||||||
<!--Weave of 'Phrase Usage' generated by Inweb-->
|
|
||||||
<div class="breadcrumbs">
|
|
||||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">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">§2. The late-morning creations</a></li><li><a href="3-pu.html#SP3">§3. Parsing</a></li><li><a href="3-pu.html#SP4">§4. Extracting the stem</a></li><li><a href="3-pu.html#SP7">§7. Miscellaneous</a></li><li><a href="3-pu.html#SP8">§8. Logging and indexing</a></li><li><a href="3-pu.html#SP11">§11. 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>§1. </b>And here is the usage data.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
|
||||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ph_usage_data</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">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">full_preamble</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g. to identify nameless rules in the log</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">constant_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">constant_phrase_holder</span><span class="plain-syntax">; </span><span class="comment-syntax"> for named To... phrases</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">to_begin</span><span class="plain-syntax">; </span><span class="comment-syntax"> used in Basic mode only: this is to be the main phrase</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">timing_of_event</span><span class="plain-syntax">; </span><span class="comment-syntax"> one of two values defined below; or a specific time</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">use_as_event</span><span class="plain-syntax"> *</span><span class="identifier-syntax">uses_as_event</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">explicit_name</span><span class="plain-syntax">; </span><span class="comment-syntax"> if a named rule, this is its name</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">explicit_name_used_in_maths</span><span class="plain-syntax">; </span><span class="comment-syntax"> if so, this flag means it's like </span><span class="extract"><span class="extract-syntax">log()</span></span><span class="comment-syntax"> or </span><span class="extract"><span class="extract-syntax">sin()</span></span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">explicit_name_for_inverse</span><span class="plain-syntax">; </span><span class="comment-syntax"> e.g. </span><span class="extract"><span class="extract-syntax">exp</span></span><span class="comment-syntax"> for </span><span class="extract"><span class="extract-syntax">log</span></span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">whenwhile</span><span class="plain-syntax">; </span><span class="comment-syntax"> when/while for action/activity rulebooks</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule_preamble</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">rule_parameter</span><span class="plain-syntax">; </span><span class="comment-syntax"> text of object or action parameter</span>
|
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">during_scene_spec</span><span class="plain-syntax">; </span><span class="comment-syntax"> what scene is currently under way</span>
|
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">event_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="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owning_rulebook</span><span class="plain-syntax">; </span><span class="comment-syntax"> the primary booking for the phrase will be here</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">owning_rulebook_placement</span><span class="plain-syntax">; </span><span class="comment-syntax"> ...and with this placement value: see Rulebooks</span>
|
|
||||||
<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/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>§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>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>Instead of jumping: say "Don't."</p>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<p class="commentary">then we need to call <span class="extract"><span class="extract-syntax">Rules::obtain</span></span> to create a nameless <span class="extract"><span class="extract-syntax">rule</span></span> structure
|
|
||||||
to be connected to it. But if the phrase has an explicit name:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>Instead of swimming (this is the avoid water rule): say "Don't."</p>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<p class="commentary">then we have a predeclared rule called "avoid water rule" already, so we
|
|
||||||
connect this existing one to the phrase.
|
|
||||||
</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">Phrases::Usage::to_rule</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="identifier-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#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#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">-></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">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">));</span>
|
|
||||||
<span class="plain-syntax"> </span><a href="2-rls.html#SP9" class="function-link"><span class="function-syntax">Rules::set_imperative_definition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</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">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">-></span><span class="identifier-syntax">defines</span><span class="plain-syntax">;</span>
|
|
||||||
<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">-></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">-></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#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="SP2_1" class="paragraph-anchor"></a><b>§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">
|
|
||||||
<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="identifier-syntax">event_name</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">phud</span><span class="plain-syntax">-></span><span class="element-syntax">event_name</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">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><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">phud</span><span class="plain-syntax">-></span><span class="element-syntax">explicit_name</span><span class="plain-syntax">);</span>
|
|
||||||
<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#SP2">§2</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>§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">
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">imperative_defn</span><span class="plain-syntax"> *</span><span class="identifier-syntax">existing_id</span><span class="plain-syntax"> = </span><a href="2-rls.html#SP9" class="function-link"><span class="function-syntax">Rules::get_imperative_definition</span></a><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">existing_id</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">existing_id</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">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">W</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_DuplicateRuleName</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">"You wrote %1, but this would give a name ('%2') to a "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"new rule which already belongs to an existing one."</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>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
</pre>
|
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP2">§2</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP2_3" class="paragraph-anchor"></a><b>§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">2.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">IX</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></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="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">whenwhile</span><span 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::first_wn</span><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">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</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">IX</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">), </span><span class="identifier-syntax">Wordings::last_wn</span><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="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">IX</span><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="plain-syntax"> }</span>
|
|
||||||
<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#SP2">§2</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Parsing. </b></p>
|
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
|
||||||
<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('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Phrases::Usage::new</span></span>:<br/>Phrases - <a href="3-phr.html#SP5_2">§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="identifier-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#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Empty the PHUD</span><span class="named-paragraph-number">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">id</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="identifier-syntax">ToPhraseFamily::phud</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, &</span><span class="identifier-syntax">phud</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><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">id</span><span class="plain-syntax">-></span><span class="identifier-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RULE_EFF_family</span><span class="plain-syntax">) { </span><span class="identifier-syntax">RuleFamily::phud</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, &</span><span class="identifier-syntax">phud</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><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="SP3_1" class="paragraph-anchor"></a><b>§3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Empty the PHUD</span><span class="named-paragraph-number">3.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">phud</span><span class="plain-syntax">.</span><span class="element-syntax">full_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="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">constant_phrase_holder</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">phud</span><span class="plain-syntax">.</span><span class="element-syntax">from</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><span class="element-syntax">explicit_name</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">phud</span><span class="plain-syntax">.</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">;</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">EMPTY_WORDING</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_parameter</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">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><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">FALSE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">.</span><span class="element-syntax">during_scene_spec</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">endif</span>
|
|
||||||
<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">EMPTY_WORDING</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">timing_of_event</span><span class="plain-syntax"> = </span><span class="constant-syntax">NOT_A_TIMED_EVENT</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">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">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="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#SP3">§3</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. 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">
|
|
||||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::get_preamble_text</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::get_preamble_text</span></span>:<br/>Phrases - <a href="3-phr.html#SP5_3">§5.3</a>, <a href="3-phr.html#SP5_8">§5.8</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">-></span><span class="element-syntax">from</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="reserved-syntax">return</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="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="element-syntax">full_preamble</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
</pre>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>For example, for the rule
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>Instead of taking the box while the skylight is open: ...</p>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<p class="commentary">this returns "taking the box".
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
|
||||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::get_prewhile_text</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="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="identifier-syntax">rule_parameter</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">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></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"><when-while-clause></span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">)) </span><span class="identifier-syntax">E</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><when-while-clause></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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">E</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">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
</pre>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b></p>
|
|
||||||
|
|
||||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
|
||||||
<span class="Preform-function-syntax"><when-while-clause></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="SP7" class="paragraph-anchor"></a><b>§7. Miscellaneous. </b>Some access routines.
|
|
||||||
</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::Usage::get_rulebook_placement</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::Usage::get_rulebook_placement</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP6">§6</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">return</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="plain-syntax">}</span>
|
|
||||||
|
|
||||||
<span class="reserved-syntax">rulebook</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Usage::get_rulebook</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::Usage::get_rulebook</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP6">§6</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">return</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="plain-syntax">}</span>
|
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::set_rulebook</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">Phrases::Usage::set_rulebook</span></span>:<br/>Rule Bookings - <a href="2-rb.html#SP6">§6</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">rulebook</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rb</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">owning_rulebook</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rb</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::get_timing_of_event</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::Usage::get_timing_of_event</span></span>:<br/>Timed Phrases - <a href="3-tp.html#SP3">§3</a>, <a href="3-tp.html#SP4">§4</a>, <a href="3-tp.html#SP5">§5</a>, <a href="3-tp.html#SP6_1">§6.1</a>, <a href="3-tp.html#SP6_2">§6.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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></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><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">-></span><span class="element-syntax">constant_phrase_holder</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_used_in_maths</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">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">-></span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax">-></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>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
|
|
||||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::get_equation_form</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::Usage::get_equation_form</span></span>:<br/>Describing Phrase Type Data - <a href="3-dptd.html#SP5">§5</a>, <a href="3-dptd.html#SP6_3">§6.3</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">-></span><span class="element-syntax">explicit_name_used_in_maths</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">Wordings::first_word</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">-></span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
|
|
||||||
<span class="reserved-syntax">phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Usage::get_equation_inverse</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="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="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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::get_equation_form</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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">-></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>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
</pre>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. 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('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Phrases::Usage::log</span></span>:<br/><a href="3-pu.html#SP12_1_1_1">§12.1.1.1</a>, <a href="3-pu.html#SP12_1_1_2">§12.1.1.2</a><br/>Imperative Module - <a href="1-im.html#SP2">§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: <%W>: rule attachment mode %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">full_preamble</span><span class="plain-syntax">, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">family</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></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: <%W>\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">-></span><span class="element-syntax">constant_phrase_holder</span><span class="plain-syntax">-></span><span class="element-syntax">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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">explicit_name</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">" Explicit name: <%W>\n"</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><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">explicit_name_used_in_maths</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">" Used functionally in equations\n"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">rule_preamble</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">" Rule preamble: <%W>\n"</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="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="identifier-syntax">rule_parameter</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">" Rule parameter: <%W>\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></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="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="identifier-syntax">whenwhile</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">" When/while text: <%W>\n"</span><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="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="identifier-syntax">event_name</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">" Event name: <%W>\n"</span><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="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">timing_of_event</span><span class="plain-syntax"> != </span><span class="constant-syntax">NOT_A_TIMED_EVENT</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">" Timed event: at %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">timing_of_event</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</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">during_scene_spec</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">" During scene: <$P>\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></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>
|
|
||||||
<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="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">place</span><span class="plain-syntax"> = </span><span class="string-syntax">"<UNKNOWN_NT>"</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">" Owned by rulebook: "</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><a href="2-rlb.html#SP9" class="function-link"><span class="function-syntax">Rulebooks::log_name_only</span></a><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="plain-syntax"> </span><span class="reserved-syntax">switch</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="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MIDDLE_PLACEMENT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">place</span><span class="plain-syntax"> = </span><span class="string-syntax">"MIDDLE_PLACEMENT"</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">FIRST_PLACEMENT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">place</span><span class="plain-syntax"> = </span><span class="string-syntax">"FIRST_PLACEMENT"</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">LAST_PLACEMENT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">place</span><span class="plain-syntax"> = </span><span class="string-syntax">"LAST_PLACEMENT"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</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 Placement: %s\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">place</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::log_rule_name</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">Phrases::Usage::log_rule_name</span></span>:<br/>Phrases - <a href="3-phr.html#SP8">§8</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">Wordings::empty</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><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">full_preamble</span><span class="plain-syntax">))</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\"%W\""</span><span class="plain-syntax">, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">full_preamble</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"(nameless)"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"(%W)"</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>
|
|
||||||
</pre>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>In our compiled code, it's useful to label routines with I6 comments:
|
|
||||||
</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::write_I6_comment_describing</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::write_I6_comment_describing</span></span>:<br/>Compile Phrases - <a href="6-cp.html#SP2_1">§2.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="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">)</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">C</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">-></span><span class="element-syntax">full_preamble</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::comment</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">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="SP10" class="paragraph-anchor"></a><b>§10. </b>And similarly:
|
|
||||||
</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::index_preamble</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::Usage::index_preamble</span></span>:<br/>Timed Phrases - <a href="3-tp.html#SP6_1">§6.1</a>, <a href="3-tp.html#SP6_2">§6.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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="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">-></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>§11. 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>
|
|
||||||
|
|
||||||
<p class="commentary">As will be seen, about six-sevenths of the code is given over to choosing good
|
|
||||||
problem messages when the PHUD is malformed — these are some of the most
|
|
||||||
seen problems in Inform. A couple of variables are needed just for that:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">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="SP12" class="paragraph-anchor"></a><b>§12. </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><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">RuleFamily::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">)) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">RuleFamily::not_in_rulebook</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">from</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">else</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP12_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">12.1</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">phrcd</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
</pre>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1" class="paragraph-anchor"></a><b>§12.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">12.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"> = &(</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="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="identifier-syntax">rule_parameter</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP12_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">12.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">-></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>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::first_wn</span><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="constant-syntax">1</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::last_wn</span><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="plain-syntax"> </span><span class="identifier-syntax">phrcd</span><span class="plain-syntax">.</span><span class="element-syntax">activity_where</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
|
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</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">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">-></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#SP12">§12</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1_1" class="paragraph-anchor"></a><b>§12.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">12.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="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-rlb.html#SP2_2" class="function-link"><span class="function-syntax">Rulebooks::action_focus</span></a><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="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">saved</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseActionPatterns::enter_mode</span><span class="plain-syntax">(</span><span class="identifier-syntax">PERMIT_TRYING_OMISSION</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-rls.html#SP10" class="function-link"><span class="function-syntax">Rules::all_action_processing_variables</span></a><span class="plain-syntax">())</span>
|
|
||||||
<span class="plain-syntax"> </span><a href="4-sf.html#SP10" class="function-link"><span class="function-syntax">Frames::set_stvol</span></a><span class="plain-syntax">(</span>
|
|
||||||
<span class="plain-syntax"> </span><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</span></a><span class="plain-syntax">(), </span><a href="2-rls.html#SP10" class="function-link"><span class="function-syntax">Rules::all_action_processing_variables</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="function-syntax"><action-pattern>(phud-></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="function-syntax"><<rp>></span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><a href="4-sf.html#SP5" class="function-link"><span class="function-syntax">Frames::remove_nonphrase_stack_frame</span></a><span class="plain-syntax">();</span>
|
|
||||||
<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#SP12_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">12.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">-></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">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">, </span><span class="identifier-syntax">pk</span><span 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="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">whenwhile</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">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::up_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::last_wn</span><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="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">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">pk</span><span 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="plain-syntax"> </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</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">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>
|
|
||||||
<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#SP12_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">12.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">-></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#SP12_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">12.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#SP12_1">§12.1</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1_1_1" class="paragraph-anchor"></a><b>§12.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 — which covers an enormous
|
|
||||||
range of different faults.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p class="commentary">The "PAP failure reason" is a sort of error code set by the action pattern
|
|
||||||
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">12.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#SP8" 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">-></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">-></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"><action-problem-diagnosis>(phud-></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#SP12_1_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithDisjunction problem</span><span class="named-paragraph-number">12.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#SP12_1_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithNoParticiple problem</span><span class="named-paragraph-number">12.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#SP12_1_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithImmiscible problem</span><span class="named-paragraph-number">12.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#SP12_1_1_1_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APWithBadWhen problem</span><span class="named-paragraph-number">12.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#SP12_1_1_1_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_APUnknown problem</span><span class="named-paragraph-number">12.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#SP12_1_1">§12.1.1</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1_1_1_1" class="paragraph-anchor"></a><b>§12.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">12.1.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><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_APWithDisjunction</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">"You wrote %1, which seems to introduce a rule, but the "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"circumstances ('%2') seem to be too general for me to "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"understand in a single rule. I can understand a choice of "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"of actions, in a list such as 'taking or dropping the ball', "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"but there can only be one set of noun(s) supplied. So 'taking "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"the ball or taking the bat' is disallowed. You can get around "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"this by using named actions ('Taking the ball is being "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"mischievous. Taking the bat is being mischievous. Instead of "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"being mischievous...'), or it may be less bother just to "</span>
|
|
||||||
<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#SP12_1_1_1">§12.1.1.1</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1_1_1_2" class="paragraph-anchor"></a><b>§12.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">12.1.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><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_APWithNoParticiple</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">"You wrote %1, which seems to introduce a rule taking effect "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"only '%2'. But this does not look like an action, since "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"there is no sign of a participle ending '-ing' (as in "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"'taking the brick', say) - which makes me think I have "</span>
|
|
||||||
<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#SP12_1_1_1">§12.1.1.1</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1_1_1_3" class="paragraph-anchor"></a><b>§12.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">12.1.1.1.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::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_APWithImmiscible</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">"You wrote %1, which seems to introduce a rule taking effect "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"only '%2'. But this is a combination of actions which cannot "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"be mixed. The only alternatives where 'or' is allowed are "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"cases where a choice of actions is given but applying to "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"the same objects in each case. (So 'taking or dropping the "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"CD' is allowed, but 'dropping the CD or inserting the CD "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"into the jewel box' is not, because the alternatives there "</span>
|
|
||||||
<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#SP12_1_1_1">§12.1.1.1</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1_1_1_4" class="paragraph-anchor"></a><b>§12.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">12.1.1.1.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::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_APWithBadWhen</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">Q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</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">diagnosis</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="function-syntax"><action-when-diagnosis></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">Q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="function-syntax"><<cw1>></span><span class="plain-syntax">, </span><span class="function-syntax"><<cw2>></span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">diagnosis</span><span class="plain-syntax"> = </span><span class="function-syntax"><<r>></span><span class="plain-syntax">;</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">Q</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(3, </span><span class="string-syntax">"so I am unable to accept this rule."</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">diagnosis</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(3,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"perhaps because 'nothing' tends not to be allowed in Inform conditions? "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"(Whereas 'no thing' is usually allowed.)"</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">diagnosis</span><span class="plain-syntax"> == </span><span class="constant-syntax">3</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(3,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"perhaps because 'nowhere' tends not to be allowed in Inform conditions? "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"(Whereas 'no room' is usually allowed.)"</span><span class="plain-syntax">);</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">"You wrote %1, which seems to introduce a rule taking effect "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"only '%2'. But this condition did not make sense, %3"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">diagnosis</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">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"%PIt might be worth mentioning that a 'when' condition tacked on to "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"an action like this is not allowed to mention or use 'called' values."</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">diagnosis</span><span class="plain-syntax"> == </span><span class="constant-syntax">4</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">"%PThe problem might be that 'and' has been followed by 'when' or "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"'while'. For example, to make a rule with two conditions, this is "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"okay: 'Instead of jumping when Peter is happy and Peter is in the "</span>
|
|
||||||
<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#SP12_1_1_1">§12.1.1.1</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1_1_1_5" class="paragraph-anchor"></a><b>§12.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">12.1.1.1.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">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></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="identifier-syntax">pap_failure_reason</span><span class="plain-syntax"> == </span><span class="identifier-syntax">WHENOKAY_PAPF</span><span class="plain-syntax">)</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(3,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"The part after 'when' (or 'while') was fine, but the earlier words"</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">Problems::quote_text</span><span class="plain-syntax">(3, </span><span class="string-syntax">"But that"</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_APUnknown</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">"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#SP12_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">12.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#SP12_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">12.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#SP12_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">12.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#SP12_1_1_1">§12.1.1.1</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1_1_1_5_1" class="paragraph-anchor"></a><b>§12.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">12.1.1.1.5.1</span></span><span class="comment-syntax"> =</span>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">action_name</span><span class="plain-syntax">)</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">) < </span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">ActionNameNames::tensed</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">))) &&</span>
|
|
||||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::match</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::truncate</span><span class="plain-syntax">(</span><span class="identifier-syntax">ActionNameNames::tensed</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">), </span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">))))) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">ActionNameNames::tensed</span><span class="plain-syntax">(</span><span class="identifier-syntax">an</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">));</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">" I notice that there's an action called '%3', though: perhaps "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"this is what you meant?"</span><span class="plain-syntax">);</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#SP12_1_1_1_5">§12.1.1.1.5</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1_1_1_5_2" class="paragraph-anchor"></a><b>§12.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">12.1.1.1.5.2</span></span><span class="comment-syntax"> =</span>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pap_failure_reason</span><span class="plain-syntax"> == </span><span class="identifier-syntax">WHENOKAY_PAPF</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">time_period</span><span class="plain-syntax"> *</span><span class="identifier-syntax">duration</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Occurrence::parse</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">duration</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">Occurrence::used_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">duration</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 wonder if this might be because '%3', which looks like a "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"condition on the timing, is the wrong side of the 'when...' "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"clause?)"</span><span class="plain-syntax">);</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#SP12_1_1_1_5">§12.1.1.1.5</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1_1_1_5_3" class="paragraph-anchor"></a><b>§12.1.1.1.5.3. </b>If the action pattern contains what looks like a list of action names, as
|
|
||||||
for example
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>Instead of taking or dropping the magnet: ...</p>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<p class="commentary">then the anl-diagnosis grammar will parse this and return N equal to 2, the
|
|
||||||
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">12.1.1.1.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">issuing_ANL_problem</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</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="plain-syntax"> </span><span class="function-syntax"><anl-diagnosis>(phud-></span><span class="element-syntax">rule_parameter</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="function-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">N</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">positive</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">ActionNameLists::parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></span><span class="element-syntax">rule_parameter</span><span class="plain-syntax">, </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">, &</span><span class="identifier-syntax">positive</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">positive</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">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">" This looks like a list of actions to avoid: "</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">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">" Looking at this as a list of alternative actions: "</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">issuing_ANL_problem</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</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="plain-syntax"> </span><span class="function-syntax"><anl-diagnosis>(phud-></span><span class="element-syntax">rule_parameter</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="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#SP12_1_1_1_5">§12.1.1.1.5</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP12_1_1_2" class="paragraph-anchor"></a><b>§12.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">12.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#SP8" 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">-></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"><parametric-problem-diagnosis>(phud-></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#SP12_1_1">§12.1.1</a> (twice).</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. </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="SP14" class="paragraph-anchor"></a><b>§14. </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"><parametric-problem-diagnosis></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">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP14_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_WhenThePlay problem</span><span class="named-paragraph-number">14.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="named-paragraph-container code-font"><a href="3-pu.html#SP14_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BadParameter problem</span><span class="named-paragraph-number">14.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="SP14_1" class="paragraph-anchor"></a><b>§14.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_WhenThePlay problem</span><span class="named-paragraph-number">14.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_WhenThePlay</span><span class="plain-syntax">),</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"there's no scene called 'the play'"</span><span class="plain-syntax">,</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"so I think you need to remove 'the' - Inform has two "</span>
|
|
||||||
<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#SP14">§14</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP14_2" class="paragraph-anchor"></a><b>§14.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BadParameter problem</span><span class="named-paragraph-number">14.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::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_BadParameter</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">"You wrote %1, but the description of the thing(s) to which the rule "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"applies ('%2') did not make sense. This is %3 based rulebook, so "</span>
|
|
||||||
<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#SP14">§14</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. </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"><action-problem-diagnosis></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">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP15_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NonActionInPresenceOf problem</span><span class="named-paragraph-number">15.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">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-pu.html#SP15_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_NonActionIn problem</span><span class="named-paragraph-number">15.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="SP15_1" class="paragraph-anchor"></a><b>§15.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NonActionInPresenceOf problem</span><span class="named-paragraph-number">15.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::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_NonActionInPresenceOf</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">"You wrote %1, but 'in the presence of...' is a clause which can "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"only be used to talk about an action: so, for instance, 'waiting "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"in the presence of...' is needed. "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"This problem arises especially with 'every turn' rules, where "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"'every turn in the presence of...' looks plausible but doesn't "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"work. This could be fixed by writing 'Every turn doing something "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"in the presence of...', but a neater solution talks about the "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"current situation instead: 'Every turn when the player can "</span>
|
|
||||||
<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#SP15">§15</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP15_2" class="paragraph-anchor"></a><b>§15.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_NonActionIn problem</span><span class="named-paragraph-number">15.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::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_NonActionIn</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">"You wrote %1, but 'in...' used in this way should really belong "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"to an action: for instance, 'Before waiting in the Library'. "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"Rules like 'Every turn in the Library' don't work, because "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"'every turn' is not an action; what's wanted is 'Every turn "</span>
|
|
||||||
<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#SP15">§15</a>.</li></ul>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>§16. </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.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
|
||||||
<span class="Preform-function-syntax"><action-when-diagnosis></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-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">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 1, -, <<cw1>> = Wordings::first_wn(WR[3]), <<cw2>> = Wordings::last_wn(WR[3]) }</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-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">nothing</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"> { 2, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }</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-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">nowhere</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"> { 3, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }</span>
|
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">and</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">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 4, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }</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-constant-syntax">...}</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 5, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = 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="SP17" class="paragraph-anchor"></a><b>§17. </b></p>
|
|
||||||
|
|
||||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
|
||||||
<span class="Preform-function-syntax"><anl-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-inner-diagnosis></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><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"> { pass 1 }</span>
|
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-inner-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }</span>
|
|
||||||
|
|
||||||
<span class="Preform-function-syntax"><anl-inner-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-entry-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-tail-diagnosis></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"> { R[1] + R[2], - }</span>
|
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-entry-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }</span>
|
|
||||||
|
|
||||||
<span class="Preform-function-syntax"><anl-tail-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-inner-diagnosis></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"> { pass 1 }</span>
|
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_,/or</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><anl-inner-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }</span>
|
|
||||||
|
|
||||||
<span class="Preform-function-syntax"><anl-entry-diagnosis></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="named-paragraph-container code-font"><a href="3-pu.html#SP17_1" class="named-paragraph-link"><span class="named-paragraph">Diagnose problem with this ANL entry</span><span class="named-paragraph-number">17.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="SP17_1" class="paragraph-anchor"></a><b>§17.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">17.1</span></span><span class="Preform-comment-syntax"> =</span>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">issuing_ANL_problem</span><span class="plain-syntax">) && (!</span><span class="identifier-syntax">preform_lookahead_mode</span><span class="plain-syntax">)) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><action-pattern></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">Problems::issue_problem_segment</span><span class="plain-syntax">(</span><span class="string-syntax">"'%4' did not make sense; "</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="function-syntax"><<rp>></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">form</span><span class="plain-syntax"> = </span><span class="function-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">APClauses::is_request</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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">"'%4' would make sense as an action on its own, but 'or' can't "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"be used in combination with 'asking... to try...' actions; "</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ActionPatterns::refers_to_past</span><span class="plain-syntax">(</span><span class="identifier-syntax">ap</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">"'%4' would make sense as an action on its own, but 'or' can't "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"be used in combination with actions with time periods attached; "</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><named-action-pattern></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</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="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">"'%4' only made sense as a named kind of action, which can "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"be used on its own but not in an action list; "</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">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"'%4' is another named kind of action; "</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NAP_problem_explained</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">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">form</span><span class="plain-syntax"> == </span><span class="identifier-syntax">ACTOR_EXP_PLAYER</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">"'%4' would have been okay except for using the word 'trying', "</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"which isn't allowed in a list like this; "</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span><span class="string-syntax">"'%4' was okay; "</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">1</span><span class="plain-syntax">, - };</span>
|
|
||||||
</pre>
|
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="3-pu.html#SP17">§17</a>.</li></ul>
|
|
||||||
<nav role="progress"><div class="progresscontainer">
|
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-phr.html">❮</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-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">❯</a></li></ul></div>
|
|
||||||
</nav><!--End of weave-->
|
|
||||||
|
|
||||||
</main>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
|
@ -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">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="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">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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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><span class="identifier-syntax">RuleFamily::get_timing_of_event</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span 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">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">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>
|
<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">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="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">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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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><span class="identifier-syntax">RuleFamily::get_timing_of_event</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span 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">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">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>
|
<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,17 +142,13 @@ defined as "At 9:00 AM: ..." But two values are special:
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">§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="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">§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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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><span class="identifier-syntax">RuleFamily::get_timing_of_event</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span 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">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="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">-></span><span class="element-syntax">where_triggered</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">uae</span><span class="plain-syntax">-></span><span class="element-syntax">where_triggered</span><span class="plain-syntax"> = </span><span class="identifier-syntax">at</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">uae</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">uae</span><span class="plain-syntax">-></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">use_as_event</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="identifier-syntax">usage_data</span><span class="plain-syntax">.</span><span class="element-syntax">uses_as_event</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RuleFamily::get_uses_as_event</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prev</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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">uae</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax">) </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">uae</span><span class="plain-syntax">, </span><span class="reserved-syntax">use_as_event</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</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">prev</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">prev</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)) </span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prev</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">prev</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">uae</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -164,8 +160,9 @@ 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="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="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">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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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">RuleFamily::get_timing_of_event</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</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">-></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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RuleFamily::get_uses_as_event</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LinkedLists::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">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>
|
<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>
|
||||||
<span class="plain-syntax"> </span><span class="string-syntax">"this sets up a timed event which is never used"</span><span class="plain-syntax">,</span>
|
<span class="plain-syntax"> </span><span class="string-syntax">"this sets up a timed event which is never used"</span><span class="plain-syntax">,</span>
|
||||||
|
@ -195,7 +192,7 @@ arguably shouldn't block compilation. Then again...
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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="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">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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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><span class="identifier-syntax">RuleFamily::get_timing_of_event</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span 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">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="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>
|
<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,13 +201,14 @@ arguably shouldn't block compilation. Then again...
|
||||||
<span class="plain-syntax"> }</span>
|
<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">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><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#SP10" 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">, &(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ImperativeDefinitions::index_preamble</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span 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="element-syntax">from</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">) &&</span>
|
||||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">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">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">))))</span>
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">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">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">))))</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">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">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">)));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">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">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">)));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (where triggered: "</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">" (where triggered: "</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RuleFamily::get_uses_as_event</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</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="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="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">uae</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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">uae</span><span class="plain-syntax">; </span><span class="identifier-syntax">uae</span><span class="plain-syntax">=</span><span class="identifier-syntax">uae</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">uae</span><span class="plain-syntax">, </span><span class="reserved-syntax">use_as_event</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</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">uae</span><span class="plain-syntax">-></span><span class="element-syntax">where_triggered</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">uae</span><span class="plain-syntax">-></span><span class="element-syntax">where_triggered</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">")"</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">")"</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_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">);</span>
|
||||||
|
@ -224,7 +222,7 @@ arguably shouldn't block compilation. Then again...
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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="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">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#SP7" class="function-link"><span class="function-syntax">Phrases::Usage::get_timing_of_event</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></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><span class="identifier-syntax">RuleFamily::get_timing_of_event</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span 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">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">t</span><span class="plain-syntax"> >= </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="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>
|
<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 +231,7 @@ arguably shouldn't block compilation. Then again...
|
||||||
<span class="plain-syntax"> }</span>
|
<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">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><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#SP10" 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">, &(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ImperativeDefinitions::index_preamble</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span 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="element-syntax">from</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">) &&</span>
|
||||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">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">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">))))</span>
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">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">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">))))</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">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">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">)));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">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">-></span><span class="element-syntax">from</span><span class="plain-syntax">-></span><span class="identifier-syntax">at</span><span class="plain-syntax">)));</span>
|
||||||
|
@ -243,7 +241,7 @@ arguably shouldn't block compilation. Then again...
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="3-tp.html#SP6">§6</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="3-tp.html#SP6">§6</a>.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-tph.html">❮</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-phr.html">phr</a></li><li class="progresssection"><a href="3-pu.html">pu</a></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="progresscurrent">tp</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="4-lv.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-tph.html">❮</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-phr.html">phr</a></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="progresscurrent">tp</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="4-lv.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -403,7 +403,7 @@ is confined to the current Chapter.
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-pav.html">❮</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-phr.html">phr</a></li><li class="progresssection"><a href="3-pu.html">pu</a></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="progresscurrent">tph</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-tp.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-pav.html">❮</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-phr.html">phr</a></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="progresscurrent">tph</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-tp.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -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"> &</span><span class="identifier-syntax">nonphrasal_stack_frame</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">nonphrasal_stack_frame</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">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#SP12_1_1">§12.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><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</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><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>
|
<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">
|
<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="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">§8</a>, <a href="4-sf.html#SP9">§9</a>, <a href="4-sf.html#SP10">§10</a>, <a href="4-sf.html#SP11">§11</a>, <a href="4-sf.html#SP13">§13</a>, <a href="4-sf.html#SP14">§14</a><br/>Phrase Usage - <a href="3-pu.html#SP12_1_1">§12.1.1</a><br/>Local Variables - <a href="4-lv.html#SP9">§9</a>, <a href="4-lv.html#SP10">§10</a>, <a href="4-lv.html#SP19">§19</a>, <a href="4-lv.html#SP20">§20</a>, <a href="4-lv.html#SP21">§21</a>, <a href="4-lv.html#SP22">§22</a>, <a href="4-lv.html#SP25">§25</a>, <a href="4-lv.html#SP26">§26</a>, <a href="4-lv.html#SP29">§29</a>, <a href="4-lv.html#SP30">§30</a>, <a href="4-lv.html#SP32">§32</a>, <a href="4-lv.html#SP32_3">§32.3</a>, <a href="4-lv.html#SP40">§40</a>, <a href="4-lv.html#SP41">§41</a><br/>Phrase Blocks - <a href="4-pb.html#SP7">§7</a>, <a href="4-pb.html#SP17">§17</a>, <a href="4-pb.html#SP18">§18</a><br/>Compile Solutions to Equations - <a href="6-cste.html#SP3_3">§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('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Frames::current_stack_frame</span></span>:<br/><a href="4-sf.html#SP8">§8</a>, <a href="4-sf.html#SP9">§9</a>, <a href="4-sf.html#SP10">§10</a>, <a href="4-sf.html#SP11">§11</a>, <a href="4-sf.html#SP13">§13</a>, <a href="4-sf.html#SP14">§14</a><br/>Local Variables - <a href="4-lv.html#SP9">§9</a>, <a href="4-lv.html#SP10">§10</a>, <a href="4-lv.html#SP19">§19</a>, <a href="4-lv.html#SP20">§20</a>, <a href="4-lv.html#SP21">§21</a>, <a href="4-lv.html#SP22">§22</a>, <a href="4-lv.html#SP25">§25</a>, <a href="4-lv.html#SP26">§26</a>, <a href="4-lv.html#SP29">§29</a>, <a href="4-lv.html#SP30">§30</a>, <a href="4-lv.html#SP32">§32</a>, <a href="4-lv.html#SP32_3">§32.3</a>, <a href="4-lv.html#SP40">§40</a>, <a href="4-lv.html#SP41">§41</a><br/>Phrase Blocks - <a href="4-pb.html#SP7">§7</a>, <a href="4-pb.html#SP17">§17</a>, <a href="4-pb.html#SP18">§18</a><br/>Compile Solutions to Equations - <a href="6-cste.html#SP3_3">§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">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="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">§5</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">§8</a><br/>Compile Phrases - <a href="6-cp.html#SP2_2">§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('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Frames::make_current</span></span>:<br/><a href="4-sf.html#SP5">§5</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">§8</a><br/>Compile Phrases - <a href="6-cp.html#SP2_2">§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="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="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="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">§5</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('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Frames::remove_current</span></span>:<br/><a href="4-sf.html#SP5">§5</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><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>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -204,11 +204,11 @@ if that's active, and otherwise must be set as needed.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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_kind_returned</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">Frames::set_kind_returned</span></span>:<br/>Phrase Type Data - <a href="3-ptd.html#SP19">§19</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="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::set_kind_returned</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::set_kind_returned</span></span>:<br/>Phrase Type Data - <a href="3-ptd.html#SP19">§19</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="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">phsf</span><span class="plain-syntax">-></span><span class="identifier-syntax">kind_returned</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">phsf</span><span class="plain-syntax">-></span><span class="identifier-syntax">kind_returned</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K</span><span class="plain-syntax">;</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">Frames::get_kind_returned</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">Frames::get_kind_returned</span></span>:<br/>Compile Invocations Inline - <a href="6-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a>, <a href="6-cii.html#SP7">§7</a><br/>Compile Phrases - <a href="6-cp.html#SP2_3_1">§2.3.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Frames::get_kind_returned</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">Frames::get_kind_returned</span></span>:<br/>Compile Invocations Inline - <a href="6-cii.html#SP3_1_1_4_7_1">§3.1.1.4.7.1</a>, <a href="6-cii.html#SP7">§7</a><br/>Compile Phrases - <a href="6-cp.html#SP2_3_1">§2.3.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">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</span><span class="plain-syntax"> = </span><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</span></a><span class="plain-syntax">();</span>
|
<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><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</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">phsf</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">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="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">phsf</span><span class="plain-syntax">-></span><span class="element-syntax">kind_returned</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">phsf</span><span class="plain-syntax">-></span><span class="element-syntax">kind_returned</span><span class="plain-syntax">;</span>
|
||||||
|
@ -220,18 +220,18 @@ if that's active, and otherwise must be set as needed.
|
||||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">KIND_VARIABLE_FROM_CONTEXT</span><span class="plain-syntax"> </span><a href="4-sf.html#SP9" class="function-link"><span class="function-syntax">Frames::get_kind_variable</span></a>
|
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">KIND_VARIABLE_FROM_CONTEXT</span><span class="plain-syntax"> </span><a href="4-sf.html#SP9" class="function-link"><span class="function-syntax">Frames::get_kind_variable</span></a>
|
||||||
</pre>
|
</pre>
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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_kind_variables</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">Frames::set_kind_variables</span></span>:<br/>Compile Phrases - <a href="6-cp.html#SP2_2">§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="identifier-syntax">kind</span><span class="plain-syntax"> **</span><span class="identifier-syntax">vars</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::set_kind_variables</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">Frames::set_kind_variables</span></span>:<br/>Compile Phrases - <a href="6-cp.html#SP2_2">§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="identifier-syntax">kind</span><span class="plain-syntax"> **</span><span class="identifier-syntax">vars</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">phsf</span><span class="plain-syntax">-></span><span class="identifier-syntax">local_kind_variables</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vars</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">phsf</span><span class="plain-syntax">-></span><span class="identifier-syntax">local_kind_variables</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vars</span><span class="plain-syntax">;</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">Frames::get_kind_variable</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">Frames::get_kind_variable</span></span>:<br/>Compile Invocations Inline - <a href="6-cii.html#SP3_1_1_1">§3.1.1.1</a></span></button><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="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Frames::get_kind_variable</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">Frames::get_kind_variable</span></span>:<br/>Compile Invocations Inline - <a href="6-cii.html#SP3_1_1_1">§3.1.1.1</a></span></button><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="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><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</span></a><span class="plain-syntax">();</span>
|
<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><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</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">phsf</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">phsf</span><span class="plain-syntax">-></span><span class="element-syntax">local_kind_variables</span><span 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">phsf</span><span class="plain-syntax">-></span><span class="element-syntax">local_kind_variables</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">phsf</span><span class="plain-syntax">-></span><span class="element-syntax">local_kind_variables</span><span class="plain-syntax">[</span><span class="identifier-syntax">N</span><span class="plain-syntax">];</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">phsf</span><span class="plain-syntax">-></span><span class="element-syntax">local_kind_variables</span><span class="plain-syntax">[</span><span class="identifier-syntax">N</span><span class="plain-syntax">];</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">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">NULL</span><span class="plain-syntax">;</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">Frames::temporarily_set_kvs</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">Frames::temporarily_set_kvs</span></span>:<br/>Compile Invocations Inline - <a href="6-cii.html#SP3_1_1">§3.1.1</a>, <a href="6-cii.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> **</span><span class="identifier-syntax">vars</span><span class="plain-syntax">) {</span>
|
<span class="identifier-syntax">kind</span><span class="plain-syntax"> **</span><span class="function-syntax">Frames::temporarily_set_kvs</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">Frames::temporarily_set_kvs</span></span>:<br/>Compile Invocations Inline - <a href="6-cii.html#SP3_1_1">§3.1.1</a>, <a href="6-cii.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> **</span><span class="identifier-syntax">vars</span><span class="plain-syntax">) {</span>
|
||||||
<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><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</span></a><span class="plain-syntax">();</span>
|
<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><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</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">phsf</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">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="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">kind</span><span class="plain-syntax"> **</span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phsf</span><span class="plain-syntax">-></span><span class="element-syntax">local_kind_variables</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">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">phsf</span><span class="plain-syntax">-></span><span class="element-syntax">local_kind_variables</span><span class="plain-syntax">;</span>
|
||||||
|
@ -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>§10. Stacked variables. </b></p>
|
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. Stacked variables. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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#SP12_1_1">§12.1.1</a><br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">§8</a><br/>Compile Phrases - <a href="6-cp.html#SP2_2">§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('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Frames::set_stvol</span></span>:<br/>Phrase Runtime Context Data - <a href="3-prcd.html#SP8">§8</a><br/>Compile Phrases - <a href="6-cp.html#SP2_2">§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">-></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><span class="identifier-syntax">phsf</span><span class="plain-syntax">-></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>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ reference to the past.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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::determines_the_past</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">Frames::determines_the_past</span></span>:<br/>Chronology - <a href="4-chr.html#SP6">§6</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::determines_the_past</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::determines_the_past</span></span>:<br/>Chronology - <a href="4-chr.html#SP6">§6</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_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</span><span class="plain-syntax"> = </span><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</span></a><span class="plain-syntax">();</span>
|
<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><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</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">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="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="plain-syntax"> </span><span class="string-syntax">"tried to determine past where no stack frame exists"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="string-syntax">"tried to determine past where no stack frame exists"</span><span class="plain-syntax">);</span>
|
||||||
|
@ -265,7 +265,7 @@ reference to the past.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">LOCAL_VARIABLES</span><span class="plain-syntax">, </span><span class="string-syntax">"Stack frame determines past\n"</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">LOCAL_VARIABLES</span><span class="plain-syntax">, </span><span class="string-syntax">"Stack frame determines past\n"</span><span class="plain-syntax">);</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">Frames::used_for_past_tense</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Frames::used_for_past_tense</span></span>:<br/>Compile Atoms - <a href="5-ca.html#SP3_1_2">§3.1.2</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">Frames::used_for_past_tense</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">Frames::used_for_past_tense</span></span>:<br/>Compile Atoms - <a href="5-ca.html#SP3_1_2">§3.1.2</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_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</span><span class="plain-syntax"> = </span><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</span></a><span class="plain-syntax">();</span>
|
<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><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</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">phsf</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phsf</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phsf</span><span class="plain-syntax">-></span><span class="element-syntax">determines_past_conditions</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">phsf</span><span class="plain-syntax">-></span><span class="element-syntax">determines_past_conditions</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>
|
||||||
|
@ -299,7 +299,7 @@ invocation ambiguities, and this is how they're requested:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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::need_at_least_this_many_formals</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">Frames::need_at_least_this_many_formals</span></span>:<br/>Compile Invocations - <a href="6-ci.html#SP2_2">§2.2</a></span></button><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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::need_at_least_this_many_formals</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Frames::need_at_least_this_many_formals</span></span>:<br/>Compile Invocations - <a href="6-ci.html#SP2_2">§2.2</a></span></button><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="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><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</span></a><span class="plain-syntax">();</span>
|
<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><a href="4-sf.html#SP7" class="function-link"><span class="function-syntax">Frames::current_stack_frame</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">phsf</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">phsf</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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"requested formal parameters outside all stack frames"</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">"requested formal parameters outside all stack frames"</span><span class="plain-syntax">);</span>
|
||||||
|
@ -341,7 +341,7 @@ The following is the routine called to make this note.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><a href="4-sf.html#SP15" class="function-link"><span class="function-syntax">Frames::pall_get_local_reference</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pall</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">"%S"</span><span class="plain-syntax">, </span><a href="4-sf.html#SP15" class="function-link"><span class="function-syntax">Frames::pall_get_local_reference</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pall</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::emit_allocation</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Frames::emit_allocation</span></span>:<br/>Compiling from Specifications - <a href="5-cfs.html#SP6">§6</a><br/>Deciding to Defer - <a href="5-dtd.html#SP15">§15</a>, <a href="5-dtd.html#SP16">§16</a><br/>Compile Invocations As Calls - <a href="6-ciac.html#SP2_1">§2.1</a><br/>Compile Invocations Inline - <a href="6-cii.html#SP1_2_1">§1.2.1</a>, <a href="6-cii.html#SP3_2_1">§3.2.1</a></span></button><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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Frames::emit_allocation</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">Frames::emit_allocation</span></span>:<br/>Compiling from Specifications - <a href="5-cfs.html#SP6">§6</a><br/>Deciding to Defer - <a href="5-dtd.html#SP15">§15</a>, <a href="5-dtd.html#SP16">§16</a><br/>Compile Invocations As Calls - <a href="6-ciac.html#SP2_1">§2.1</a><br/>Compile Invocations Inline - <a href="6-cii.html#SP1_2_1">§1.2.1</a>, <a href="6-cii.html#SP3_2_1">§3.2.1</a></span></button><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="reserved-syntax">pointer_allocation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pall</span><span class="plain-syntax"> = </span><a href="4-sf.html#SP14" class="function-link"><span class="function-syntax">Frames::add_allocation</span></a><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="plain-syntax"> </span><span class="reserved-syntax">pointer_allocation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pall</span><span class="plain-syntax"> = </span><a href="4-sf.html#SP14" class="function-link"><span class="function-syntax">Frames::add_allocation</span></a><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="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">all_sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pall</span><span class="plain-syntax">-></span><span class="element-syntax">escaped_local_reference_code</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">all_sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pall</span><span class="plain-syntax">-></span><span class="element-syntax">escaped_local_reference_code</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="5-efs.html#SP1" class="function-link"><span class="function-syntax">EmitSchemas::emit_expand_from_terms</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">all_sch</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">FALSE</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="5-efs.html#SP1" class="function-link"><span class="function-syntax">EmitSchemas::emit_expand_from_terms</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">all_sch</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">FALSE</span><span class="plain-syntax">);</span>
|
||||||
|
@ -400,7 +400,7 @@ a subarray of short blocks, indexed by the offset.
|
||||||
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. </b></p>
|
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Frames::pall_get_local_reference</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Frames::pall_get_local_reference</span></span>:<br/><a href="4-sf.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">pointer_allocation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pall</span><span class="plain-syntax">) {</span>
|
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Frames::pall_get_local_reference</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Frames::pall_get_local_reference</span></span>:<br/><a href="4-sf.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">pointer_allocation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pall</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">pall</span><span class="plain-syntax">-></span><span class="element-syntax">local_reference_code</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">pall</span><span class="plain-syntax">-></span><span class="element-syntax">local_reference_code</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
|
|
@ -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="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">stacked_variable_owner_list</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>
|
||||||
</pre>
|
</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/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>
|
||||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
|
|
@ -128,7 +128,7 @@ should always be supplied for "To..." phrases, but left null for rules.
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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-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#SP9" class="function-link"><span class="function-syntax">Phrases::Usage::write_I6_comment_describing</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">usage_data</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ImperativeDefinitions::write_comment_describing</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">-></span><span class="element-syntax">from</span><span class="plain-syntax">);</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="6-cp.html#SP2">§2</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="6-cp.html#SP2">§2</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>§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>
|
<p class="commentary firstcommentary"><a id="SP2_2" class="paragraph-anchor"></a><b>§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>
|
||||||
|
|
|
@ -136,11 +136,6 @@
|
||||||
<spon class="sectiontitle">Phrases</span></a> -
|
<spon class="sectiontitle">Phrases</span></a> -
|
||||||
<span class="sectionpurpose">To create one |phrase| object for each phrase declaration in the source text.</span></p>
|
<span class="sectionpurpose">To create one |phrase| object for each phrase declaration in the source text.</span></p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<p class="sectionentry"><a href="3-pu.html">
|
|
||||||
<spon class="sectiontitle">Phrase Usage</span></a> -
|
|
||||||
<span class="sectionpurpose">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.</span></p>
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<p class="sectionentry"><a href="3-prcd.html">
|
<p class="sectionentry"><a href="3-prcd.html">
|
||||||
<spon class="sectiontitle">Phrase Runtime Context Data</span></a> -
|
<spon class="sectiontitle">Phrase Runtime Context Data</span></a> -
|
||||||
|
|
|
@ -433,7 +433,7 @@ failing; so it doesn't terminate the following of its rulebook.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::comment</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::comment</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
|
||||||
<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><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><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">defn_as_I7_source</span><span 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">defn_as_I7_source</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Phrases::Usage::write_I6_comment_describing</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="identifier-syntax">defn_as_I7_source</span><span class="plain-syntax">-></span><span class="identifier-syntax">defines</span><span class="plain-syntax">-></span><span class="identifier-syntax">usage_data</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ImperativeDefinitions::write_comment_describing</span><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">-></span><span class="identifier-syntax">defn_as_I7_source</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
|
|
@ -78,7 +78,7 @@ function togglePopup(material_id) {
|
||||||
these can't simply be addresses of the data because two uses of columns called
|
these can't simply be addresses of the data because two uses of columns called
|
||||||
"population" in different tables need to have the same ID in each context.
|
"population" in different tables need to have the same ID in each context.
|
||||||
(They need to run from 100 upward because numbers 0 to 99 refer to columns
|
(They need to run from 100 upward because numbers 0 to 99 refer to columns
|
||||||
by index within the current table: see <a href="../assertions-module/5-tbl.html" class="internal">Tables (in assertions)</a>.)
|
by index within the current table: see <a href="../assertions-module/6-tbl.html" class="internal">Tables (in assertions)</a>.)
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,12 +1,12 @@
|
||||||
Total memory consumption was 259997K = 254 MB
|
Total memory consumption was 260797K = 255 MB
|
||||||
|
|
||||||
62.7% was used for 1339941 objects, in 282176 frames in 204 x 800K = 163200K = 159 MB:
|
62.8% was used for 1340344 objects, in 282579 frames in 205 x 800K = 164000K = 160 MB:
|
||||||
|
|
||||||
9.7% inter_tree_node_array 36 x 8192 = 294912 objects, 25953408 bytes
|
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
|
5.4% text_stream_array 2583 x 100 = 258300 objects, 14547456 bytes
|
||||||
3.8% parse_node 129371 objects, 10349680 bytes
|
3.8% parse_node 129371 objects, 10349680 bytes
|
||||||
2.7% verb_conjugation 160 objects, 7425280 bytes
|
2.7% verb_conjugation 160 objects, 7425280 bytes
|
||||||
2.6% linked_list 12665 objects, 7092400 bytes
|
2.7% linked_list 13065 objects, 7316400 bytes
|
||||||
2.5% parse_node_annotation_array 431 x 500 = 215500 objects, 6909792 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
|
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.2% pcalc_prop_array 24 x 1000 = 24000 objects, 3264768 bytes
|
||||||
|
@ -15,12 +15,12 @@ Total memory consumption was 259997K = 254 MB
|
||||||
0.7% inter_schema_token 13492 objects, 1942848 bytes
|
0.7% inter_schema_token 13492 objects, 1942848 bytes
|
||||||
0.6% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes
|
0.6% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes
|
||||||
0.5% match_trie_array 10 x 1000 = 10000 objects, 1360320 bytes
|
0.5% match_trie_array 10 x 1000 = 10000 objects, 1360320 bytes
|
||||||
0.3% phrase 940 objects, 1007680 bytes
|
|
||||||
0.3% adjective_meaning 202 objects, 1000304 bytes
|
0.3% adjective_meaning 202 objects, 1000304 bytes
|
||||||
0.3% excerpt_meaning 3098 objects, 966576 bytes
|
0.3% excerpt_meaning 3098 objects, 966576 bytes
|
||||||
0.3% inter_name_array 20 x 1000 = 20000 objects, 960640 bytes
|
0.3% inter_name_array 20 x 1000 = 20000 objects, 960640 bytes
|
||||||
0.3% inter_package 13227 objects, 952344 bytes
|
0.3% inter_package 13227 objects, 952344 bytes
|
||||||
0.3% production 3887 objects, 901784 bytes
|
0.3% production 3887 objects, 901784 bytes
|
||||||
|
0.3% phrase 940 objects, 894880 bytes
|
||||||
0.3% ptoken 8391 objects, 872664 bytes
|
0.3% ptoken 8391 objects, 872664 bytes
|
||||||
0.3% grammatical_usage 3610 objects, 866400 bytes
|
0.3% grammatical_usage 3610 objects, 866400 bytes
|
||||||
0.3% individual_form 2560 objects, 860160 bytes
|
0.3% individual_form 2560 objects, 860160 bytes
|
||||||
|
@ -29,8 +29,8 @@ Total memory consumption was 259997K = 254 MB
|
||||||
0.2% dictionary 16372 objects, 785856 bytes
|
0.2% dictionary 16372 objects, 785856 bytes
|
||||||
0.2% dict_entry_array 232 x 100 = 23200 objects, 749824 bytes
|
0.2% dict_entry_array 232 x 100 = 23200 objects, 749824 bytes
|
||||||
0.2% package_request 7954 objects, 699952 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% 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% local_variable_array 45 x 100 = 4500 objects, 505440 bytes
|
||||||
0.1% verb_usage 1128 objects, 388032 bytes
|
0.1% verb_usage 1128 objects, 388032 bytes
|
||||||
0.1% rule 469 objects, 363944 bytes
|
0.1% rule 469 objects, 363944 bytes
|
||||||
|
@ -48,9 +48,9 @@ Total memory consumption was 259997K = 254 MB
|
||||||
---- documentation_ref 1275 objects, 112200 bytes
|
---- documentation_ref 1275 objects, 112200 bytes
|
||||||
---- inference 1703 objects, 108992 bytes
|
---- inference 1703 objects, 108992 bytes
|
||||||
---- hierarchy_location 730 objects, 105120 bytes
|
---- hierarchy_location 730 objects, 105120 bytes
|
||||||
|
---- imperative_defn 1376 objects, 99072 bytes
|
||||||
---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes
|
---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes
|
||||||
---- noun_usage 2401 objects, 96040 bytes
|
---- noun_usage 2401 objects, 96040 bytes
|
||||||
---- imperative_defn 1376 objects, 88064 bytes
|
|
||||||
---- preposition 273 objects, 87360 bytes
|
---- preposition 273 objects, 87360 bytes
|
||||||
---- lexical_cluster 2516 objects, 80512 bytes
|
---- lexical_cluster 2516 objects, 80512 bytes
|
||||||
---- pcalc_term_array 2 x 1000 = 2000 objects, 80064 bytes
|
---- pcalc_term_array 2 x 1000 = 2000 objects, 80064 bytes
|
||||||
|
@ -72,9 +72,11 @@ Total memory consumption was 259997K = 254 MB
|
||||||
---- cg_line 230 objects, 47840 bytes
|
---- cg_line 230 objects, 47840 bytes
|
||||||
---- table 7 objects, 45528 bytes
|
---- table 7 objects, 45528 bytes
|
||||||
---- inter_node_list 750 objects, 42000 bytes
|
---- inter_node_list 750 objects, 42000 bytes
|
||||||
|
---- rule_family_data 400 objects, 41600 bytes
|
||||||
---- activity_list_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
|
---- anl_clause_array 1 x 1000 objects, 40032 bytes
|
||||||
---- response_message 407 objects, 35816 bytes
|
---- response_message 407 objects, 35816 bytes
|
||||||
|
---- to_family_data 496 objects, 35712 bytes
|
||||||
---- production_list 619 objects, 34664 bytes
|
---- production_list 619 objects, 34664 bytes
|
||||||
---- regions_data 670 objects, 32160 bytes
|
---- regions_data 670 objects, 32160 bytes
|
||||||
---- HTML_tag_array 1 x 1000 objects, 32032 bytes
|
---- HTML_tag_array 1 x 1000 objects, 32032 bytes
|
||||||
|
@ -84,8 +86,6 @@ Total memory consumption was 259997K = 254 MB
|
||||||
---- heading 198 objects, 28512 bytes
|
---- heading 198 objects, 28512 bytes
|
||||||
---- action_pattern_array 7 x 100 = 700 objects, 28224 bytes
|
---- action_pattern_array 7 x 100 = 700 objects, 28224 bytes
|
||||||
---- counting_data 670 objects, 26800 bytes
|
---- counting_data 670 objects, 26800 bytes
|
||||||
---- to_family_data 496 objects, 23808 bytes
|
|
||||||
---- rule_family_data 400 objects, 22400 bytes
|
|
||||||
---- parsing_data 670 objects, 21440 bytes
|
---- parsing_data 670 objects, 21440 bytes
|
||||||
---- bp_runtime_implementation 321 objects, 20544 bytes
|
---- bp_runtime_implementation 321 objects, 20544 bytes
|
||||||
---- instance 167 objects, 20040 bytes
|
---- instance 167 objects, 20040 bytes
|
||||||
|
@ -95,10 +95,10 @@ Total memory consumption was 259997K = 254 MB
|
||||||
---- action_name 90 objects, 18000 bytes
|
---- action_name 90 objects, 18000 bytes
|
||||||
---- parse_node_tree 20 objects, 17280 bytes
|
---- parse_node_tree 20 objects, 17280 bytes
|
||||||
---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes
|
---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes
|
||||||
---- match_avinue_array 1 x 1000 objects, 16032 bytes
|
|
||||||
---- linked_list_item_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
|
---- action_name_list_array 1 x 1000 objects, 16032 bytes
|
||||||
---- method 329 objects, 15792 bytes
|
---- match_avinue_array 1 x 1000 objects, 16032 bytes
|
||||||
|
---- method 332 objects, 15936 bytes
|
||||||
---- to_phrase_request 59 objects, 15576 bytes
|
---- to_phrase_request 59 objects, 15576 bytes
|
||||||
---- adjective 137 objects, 14248 bytes
|
---- adjective 137 objects, 14248 bytes
|
||||||
---- booking_list 407 objects, 13024 bytes
|
---- booking_list 407 objects, 13024 bytes
|
||||||
|
@ -121,8 +121,8 @@ Total memory consumption was 259997K = 254 MB
|
||||||
---- parsing_pp_data 96 objects, 4608 bytes
|
---- parsing_pp_data 96 objects, 4608 bytes
|
||||||
---- build_vertex 40 objects, 4480 bytes
|
---- build_vertex 40 objects, 4480 bytes
|
||||||
---- hierarchy_attachment_point 48 objects, 4224 bytes
|
---- hierarchy_attachment_point 48 objects, 4224 bytes
|
||||||
---- stacked_variable_list_array 1 x 100 objects, 4032 bytes
|
|
||||||
---- placement_affecting_array 1 x 100 objects, 4032 bytes
|
---- placement_affecting_array 1 x 100 objects, 4032 bytes
|
||||||
|
---- stacked_variable_list_array 1 x 100 objects, 4032 bytes
|
||||||
---- activity 35 objects, 3920 bytes
|
---- activity 35 objects, 3920 bytes
|
||||||
---- inbuild_edition 54 objects, 3888 bytes
|
---- inbuild_edition 54 objects, 3888 bytes
|
||||||
---- parse_node_annotation_type 114 objects, 3648 bytes
|
---- parse_node_annotation_type 114 objects, 3648 bytes
|
||||||
|
@ -132,8 +132,8 @@ Total memory consumption was 259997K = 254 MB
|
||||||
---- method_set 104 objects, 3328 bytes
|
---- method_set 104 objects, 3328 bytes
|
||||||
---- instance_usage_array 1 x 200 objects, 3232 bytes
|
---- instance_usage_array 1 x 200 objects, 3232 bytes
|
||||||
---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes
|
---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes
|
||||||
---- compatibility_specification 66 objects, 3168 bytes
|
|
||||||
---- definition 44 objects, 3168 bytes
|
---- definition 44 objects, 3168 bytes
|
||||||
|
---- compatibility_specification 66 objects, 3168 bytes
|
||||||
---- inform_extension 19 objects, 3040 bytes
|
---- inform_extension 19 objects, 3040 bytes
|
||||||
---- property_of_value_storage 93 objects, 2976 bytes
|
---- property_of_value_storage 93 objects, 2976 bytes
|
||||||
---- either_or_property_data 62 objects, 2976 bytes
|
---- either_or_property_data 62 objects, 2976 bytes
|
||||||
|
@ -141,8 +141,8 @@ Total memory consumption was 259997K = 254 MB
|
||||||
---- inter_construct 32 objects, 2560 bytes
|
---- inter_construct 32 objects, 2560 bytes
|
||||||
---- part_of_inference_data 79 objects, 2528 bytes
|
---- part_of_inference_data 79 objects, 2528 bytes
|
||||||
---- parentage_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
|
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
|
||||||
|
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
|
||||||
---- equation_symbol 30 objects, 2400 bytes
|
---- equation_symbol 30 objects, 2400 bytes
|
||||||
---- semver_range 22 objects, 2288 bytes
|
---- semver_range 22 objects, 2288 bytes
|
||||||
---- scene 1 object, 2096 bytes
|
---- scene 1 object, 2096 bytes
|
||||||
|
@ -164,13 +164,13 @@ Total memory consumption was 259997K = 254 MB
|
||||||
---- quantifier 16 objects, 1024 bytes
|
---- quantifier 16 objects, 1024 bytes
|
||||||
---- table_column 16 objects, 896 bytes
|
---- table_column 16 objects, 896 bytes
|
||||||
---- inbuild_requirement 22 objects, 880 bytes
|
---- inbuild_requirement 22 objects, 880 bytes
|
||||||
---- control_structure_phrase 12 objects, 864 bytes
|
|
||||||
---- code_generation 1 object, 864 bytes
|
---- code_generation 1 object, 864 bytes
|
||||||
|
---- control_structure_phrase 12 objects, 864 bytes
|
||||||
---- cached_understanding 21 objects, 840 bytes
|
---- cached_understanding 21 objects, 840 bytes
|
||||||
---- runtime_kind_structure 13 objects, 832 bytes
|
---- runtime_kind_structure 13 objects, 832 bytes
|
||||||
---- phrase_option_array 1 x 100 objects, 824 bytes
|
---- phrase_option_array 1 x 100 objects, 824 bytes
|
||||||
---- target_vm 6 objects, 816 bytes
|
|
||||||
---- pipeline_stage 17 objects, 816 bytes
|
---- pipeline_stage 17 objects, 816 bytes
|
||||||
|
---- target_vm 6 objects, 816 bytes
|
||||||
---- generated_segment 25 objects, 800 bytes
|
---- generated_segment 25 objects, 800 bytes
|
||||||
---- inter_data_type 14 objects, 784 bytes
|
---- inter_data_type 14 objects, 784 bytes
|
||||||
---- submodule_identity 23 objects, 736 bytes
|
---- submodule_identity 23 objects, 736 bytes
|
||||||
|
@ -235,17 +235,17 @@ Total memory consumption was 259997K = 254 MB
|
||||||
---- kind_template_definition 1 object, 40 bytes
|
---- kind_template_definition 1 object, 40 bytes
|
||||||
---- parse_name_notice 1 object, 40 bytes
|
---- parse_name_notice 1 object, 40 bytes
|
||||||
|
|
||||||
37.2% was used for memory not allocated for objects:
|
37.1% was used for memory not allocated for objects:
|
||||||
|
|
||||||
15.8% text stream storage 42065596 bytes in 264531 claims
|
15.7% text stream storage 42065596 bytes in 264531 claims
|
||||||
3.4% dictionary storage 9278976 bytes in 16372 claims
|
3.4% dictionary storage 9278976 bytes in 16372 claims
|
||||||
---- sorting 992 bytes in 3 claims
|
---- sorting 992 bytes in 3 claims
|
||||||
2.7% source text 7200000 bytes in 3 claims
|
2.6% source text 7200000 bytes in 3 claims
|
||||||
4.0% source text details 10800000 bytes in 2 claims
|
4.0% source text details 10800000 bytes in 2 claims
|
||||||
---- linguistic stock array 81920 bytes in 2 claims
|
---- linguistic stock array 81920 bytes in 2 claims
|
||||||
---- small word set array 105600 bytes in 22 claims
|
---- small word set array 105600 bytes in 22 claims
|
||||||
0.8% inter symbols storage 2280320 bytes in 13937 claims
|
0.8% inter symbols storage 2280320 bytes in 13937 claims
|
||||||
6.3% inter bytecode storage 16802820 bytes in 14 claims
|
6.2% inter bytecode storage 16802820 bytes in 14 claims
|
||||||
3.2% inter links storage 8750208 bytes in 246 claims
|
3.2% inter links storage 8750208 bytes in 246 claims
|
||||||
0.6% instance-of-kind counting 1695204 bytes in 1 claim
|
0.6% instance-of-kind counting 1695204 bytes in 1 claim
|
||||||
---- compilation workspace for objects 21856 bytes in 25 claims
|
---- compilation workspace for objects 21856 bytes in 25 claims
|
||||||
|
@ -253,5 +253,5 @@ Total memory consumption was 259997K = 254 MB
|
||||||
---- emitter array storage 12320 bytes in 8 claims
|
---- emitter array storage 12320 bytes in 8 claims
|
||||||
---- code generation workspace for objects 9200 bytes in 9 claims
|
---- code generation workspace for objects 9200 bytes in 9 claims
|
||||||
|
|
||||||
20.4% was overhead - 54315944 bytes = 53042K = 51 MB
|
20.5% was overhead - 54981688 bytes = 53693K = 52 MB
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
(@1)<cardinal-number>=1
|
(@1)<cardinal-number>=1
|
||||||
(hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]
|
(hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]
|
||||||
(@1)minus (@2)<cardinal-number>=1
|
(@1)minus (@2)<cardinal-number>=1
|
||||||
(hits 0/1911) constraint DS = {12} extremes [2, 2]
|
(hits 0/1908) constraint DS = {12} extremes [2, 2]
|
||||||
(@1)<quoted-text>=1 (@2)( (@3)<response-letter>=2 (@4))
|
(@1)<quoted-text>=1 (@2)( (@3)<response-letter>=2 (@4))
|
||||||
(hits 273/762) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {12} extremes [4, 4]
|
(hits 273/815) (matched: '"[current item from the multiple object list]: [run paragraph on]" ( a )') constraint DS = {12} extremes [4, 4]
|
||||||
(@1)<quoted-text>=1
|
(@1)<quoted-text>=1
|
||||||
(hits 1564/5543) (matched: 'Represents geographical locations, both indoor
|
(hits 1564/5543) (matched: 'Represents geographical locations, both indoor
|
||||||
and outdoor, which are not necessarily areas in a building. A player in one
|
and outdoor, which are not necessarily areas in a building. A player in one
|
||||||
|
@ -14,12 +14,12 @@
|
||||||
<s-literal-real-number>=1
|
<s-literal-real-number>=1
|
||||||
(hits 11/9911) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
|
(hits 11/9911) (matched: 'plus infinity') constraint (none) extremes [1, infinity)
|
||||||
(@1)<s-literal-truth-state>=1
|
(@1)<s-literal-truth-state>=1
|
||||||
(hits 78/254) (matched: 'false') constraint CS = {6} extremes [1, 1]
|
(hits 78/315) (matched: 'false') constraint CS = {6} extremes [1, 1]
|
||||||
<s-literal-list>=1
|
<s-literal-list>=1
|
||||||
(hits 0/1628) constraint DS = {8} extremes [2, infinity)
|
(hits 0/1628) constraint DS = {8} extremes [2, infinity)
|
||||||
(@1)unicode <s-unicode-character>=1
|
(@1)unicode <s-unicode-character>=1
|
||||||
(hits 0/4138) constraint DS = {12} extremes [2, infinity)
|
(hits 0/4223) constraint DS = {12} extremes [2, infinity)
|
||||||
<s-literal-time>=1
|
<s-literal-time>=1
|
||||||
(hits 0/2126) constraint DW = {9, 10, 11} extremes [2, 5]
|
(hits 0/1811) constraint DW = {9, 10, 11} extremes [2, 5]
|
||||||
<s-literal-unit-notation>=1
|
<s-literal-unit-notation>=1
|
||||||
(hits 0/9822) constraint (none) extremes [1, infinity)
|
(hits 0/9822) constraint (none) extremes [1, infinity)
|
||||||
|
|
|
@ -1,33 +1,36 @@
|
||||||
100.0% in inform7 run
|
100.0% in inform7 run
|
||||||
66.9% in compilation to Inter
|
68.0% in compilation to Inter
|
||||||
26.0% in //ImperativeDefinitions::compile_first_block//
|
26.1% in //ImperativeDefinitions::compile_first_block//
|
||||||
8.7% in //ImperativeDefinitions::compile_as_needed//
|
9.1% in //ImperativeDefinitions::compile_as_needed//
|
||||||
6.8% in //Strings::compile_responses//
|
6.7% in //Strings::compile_responses//
|
||||||
6.1% in //InferenceSubjects::emit_all//
|
6.2% in //InferenceSubjects::emit_all//
|
||||||
3.7% in //MajorNodes::pre_pass//
|
4.2% in //MajorNodes::pre_pass//
|
||||||
3.3% in //MajorNodes::pass_1//
|
3.5% in //MajorNodes::pass_1//
|
||||||
2.0% in //RTRules::RulePrintingRule_routine//
|
2.0% in //RTRules::RulePrintingRule_routine//
|
||||||
2.0% in //RTRules::rulebooks_array_array//
|
1.8% in //RTRules::rulebooks_array_array//
|
||||||
1.4% in //ImperativeDefinitions::find_phrases_and_rules//
|
1.6% in //ImperativeDefinitions::find_phrases_and_rules//
|
||||||
0.9% in //RTVerbs::ConjugateVerb//
|
1.0% in //RTVerbs::ConjugateVerb//
|
||||||
|
0.5% in //World::stage_V//
|
||||||
0.3% in //MajorNodes::pass_2//
|
0.3% in //MajorNodes::pass_2//
|
||||||
0.3% in //RTRelations::compile_defined_relations//
|
0.3% in //RTRelations::compile_defined_relations//
|
||||||
0.3% in //RTRules::compile_rulebooks//
|
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 //RTKinds::compile_data_type_support_routines//
|
||||||
0.1% in //Task::make_built_in_kind_constructors//
|
0.1% in //Task::make_built_in_kind_constructors//
|
||||||
3.8% not specifically accounted for
|
0.1% in //World::stages_II_and_III//
|
||||||
30.6% in running Inter pipeline
|
3.0% not specifically accounted for
|
||||||
10.0% in step preparation
|
29.5% in running Inter pipeline
|
||||||
9.8% in inter step 2/12: link
|
9.8% in step preparation
|
||||||
7.0% in inter step 12/12: generate inform6 -> auto.inf
|
9.1% in inter step 2/12: link
|
||||||
|
7.1% in inter step 12/12: generate inform6 -> auto.inf
|
||||||
0.3% in inter step 9/12: make-identifiers-unique
|
0.3% in inter step 9/12: make-identifiers-unique
|
||||||
0.1% in inter step 10/12: reconcile-verbs
|
0.1% in inter step 10/12: reconcile-verbs
|
||||||
0.1% in inter step 11/12: eliminate-redundant-labels
|
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 5/12: resolve-conditional-compilation
|
||||||
0.1% in inter step 6/12: assimilate
|
0.1% in inter step 6/12: assimilate
|
||||||
0.1% in inter step 7/12: resolve-external-symbols
|
0.1% in inter step 7/12: resolve-external-symbols
|
||||||
0.1% in inter step 8/12: inspect-plugs
|
0.1% in inter step 8/12: inspect-plugs
|
||||||
2.2% not specifically accounted for
|
1.9% not specifically accounted for
|
||||||
2.0% in supervisor
|
2.0% in supervisor
|
||||||
0.4% not specifically accounted for
|
0.4% not specifically accounted for
|
||||||
|
|
|
@ -13,6 +13,7 @@ typedef struct imperative_defn {
|
||||||
struct general_pointer family_specific_data;
|
struct general_pointer family_specific_data;
|
||||||
struct parse_node *at;
|
struct parse_node *at;
|
||||||
struct phrase *defines;
|
struct phrase *defines;
|
||||||
|
struct wording log_text;
|
||||||
CLASS_DEFINITION
|
CLASS_DEFINITION
|
||||||
} imperative_defn;
|
} imperative_defn;
|
||||||
|
|
||||||
|
@ -46,8 +47,18 @@ void ImperativeDefinitions::identify(imperative_defn *id) {
|
||||||
VOID_METHOD_CALL(f, CLAIM_IMP_DEFN_MTID, id);
|
VOID_METHOD_CALL(f, CLAIM_IMP_DEFN_MTID, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ |NEW_PHRASE_IMP_DEFN_MTID| is for deciding from the syntax of a preamble whether
|
@ |ASSESS_IMP_DEFN_MTID| is for parsing it in more detail, later on.
|
||||||
this definition should belong to the family or not.
|
|
||||||
|
@e ASSESS_IMP_DEFN_MTID
|
||||||
|
|
||||||
|
=
|
||||||
|
VOID_METHOD_TYPE(ASSESS_IMP_DEFN_MTID, imperative_defn_family *f, imperative_defn *id)
|
||||||
|
|
||||||
|
void ImperativeDefinitions::assess(imperative_defn *id) {
|
||||||
|
VOID_METHOD_CALL(id->family, ASSESS_IMP_DEFN_MTID, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ |NEW_PHRASE_IMP_DEFN_MTID| is for ...
|
||||||
|
|
||||||
@e NEW_PHRASE_IMP_DEFN_MTID
|
@e NEW_PHRASE_IMP_DEFN_MTID
|
||||||
|
|
||||||
|
@ -58,6 +69,18 @@ void ImperativeDefinitions::new_phrase(imperative_defn *id, phrase *new_ph) {
|
||||||
VOID_METHOD_CALL(id->family, NEW_PHRASE_IMP_DEFN_MTID, id, new_ph);
|
VOID_METHOD_CALL(id->family, NEW_PHRASE_IMP_DEFN_MTID, id, new_ph);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ |TO_RCD_IMP_DEFN_MTID| is for deciding from the syntax of a preamble whether
|
||||||
|
this definition should belong to the family or not.
|
||||||
|
|
||||||
|
@e TO_RCD_IMP_DEFN_MTID
|
||||||
|
|
||||||
|
=
|
||||||
|
VOID_METHOD_TYPE(TO_RCD_IMP_DEFN_MTID, imperative_defn_family *f, imperative_defn *id, ph_runtime_context_data *rcd)
|
||||||
|
|
||||||
|
void ImperativeDefinitions::to_rcd(imperative_defn *id, ph_runtime_context_data *rcd) {
|
||||||
|
VOID_METHOD_CALL(id->family, TO_RCD_IMP_DEFN_MTID, id, rcd);
|
||||||
|
}
|
||||||
|
|
||||||
@
|
@
|
||||||
|
|
||||||
=
|
=
|
||||||
|
@ -88,6 +111,7 @@ imperative_defn *ImperativeDefinitions::make_imperative_definition(parse_node *p
|
||||||
id->defines = NULL;
|
id->defines = NULL;
|
||||||
id->family = AS_YET_UNKNOWN_EFF_family;
|
id->family = AS_YET_UNKNOWN_EFF_family;
|
||||||
id->family_specific_data = NULL_GENERAL_POINTER;
|
id->family_specific_data = NULL_GENERAL_POINTER;
|
||||||
|
id->log_text = Node::get_text(p);
|
||||||
current_sentence = p;
|
current_sentence = p;
|
||||||
ImperativeDefinitions::identify(id);
|
ImperativeDefinitions::identify(id);
|
||||||
return id;
|
return id;
|
||||||
|
@ -105,6 +129,7 @@ void ImperativeDefinitions::find_phrases_and_rules(void) {
|
||||||
ProgressBar::update(3,
|
ProgressBar::update(3,
|
||||||
((float) (created))/((float) (total)));
|
((float) (created))/((float) (total)));
|
||||||
current_sentence = id->at;
|
current_sentence = id->at;
|
||||||
|
ImperativeDefinitions::assess(id);
|
||||||
Phrases::create_from_preamble(id);
|
Phrases::create_from_preamble(id);
|
||||||
}
|
}
|
||||||
if (initial_problem_count < problem_count) return;
|
if (initial_problem_count < problem_count) return;
|
||||||
|
@ -117,7 +142,7 @@ void ImperativeDefinitions::find_phrases_and_rules(void) {
|
||||||
current_sentence = ph->from->at;
|
current_sentence = ph->from->at;
|
||||||
Frames::make_current(&(ph->stack_frame));
|
Frames::make_current(&(ph->stack_frame));
|
||||||
ph->runtime_context_data =
|
ph->runtime_context_data =
|
||||||
Phrases::Usage::to_runtime_context_data(&(ph->usage_data));
|
ImperativeDefinitions::to_runtime_context_data(ph->from);
|
||||||
Frames::remove_current();
|
Frames::remove_current();
|
||||||
}
|
}
|
||||||
if (initial_problem_count < problem_count) return;
|
if (initial_problem_count < problem_count) return;
|
||||||
|
@ -253,7 +278,7 @@ points", say). This is where we do it:
|
||||||
phrase *ph;
|
phrase *ph;
|
||||||
LOOP_OVER(ph, phrase)
|
LOOP_OVER(ph, phrase)
|
||||||
if ((Phrases::TypeData::invoked_inline(ph)) &&
|
if ((Phrases::TypeData::invoked_inline(ph)) &&
|
||||||
(Phrases::Usage::has_name_as_constant(&(ph->usage_data)))) {
|
(ToPhraseFamily::has_name_as_constant(ph->from))) {
|
||||||
current_sentence = Phrases::declaration_node(ph);
|
current_sentence = Phrases::declaration_node(ph);
|
||||||
Problems::quote_source(1, current_sentence);
|
Problems::quote_source(1, current_sentence);
|
||||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NamedInline));
|
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NamedInline));
|
||||||
|
@ -321,3 +346,38 @@ void ImperativeDefinitions::compile_as_needed(void) {
|
||||||
repeat = TRUE;
|
repeat = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ In our compiled code, it's useful to label routines with I6 comments:
|
||||||
|
|
||||||
|
=
|
||||||
|
void ImperativeDefinitions::write_comment_describing(imperative_defn *id) {
|
||||||
|
TEMPORARY_TEXT(C)
|
||||||
|
WRITE_TO(C, "%~W:", id->log_text);
|
||||||
|
Produce::comment(Emit::tree(), C);
|
||||||
|
DISCARD_TEXT(C)
|
||||||
|
}
|
||||||
|
|
||||||
|
@ And similarly:
|
||||||
|
|
||||||
|
=
|
||||||
|
void ImperativeDefinitions::index_preamble(OUTPUT_STREAM, imperative_defn *id) {
|
||||||
|
WRITE("%+W", id->log_text);
|
||||||
|
}
|
||||||
|
|
||||||
|
@h How the PHUD translates into a PHRCD.
|
||||||
|
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.
|
||||||
|
|
||||||
|
As will be seen, about six-sevenths of the code is given over to choosing good
|
||||||
|
problem messages when the PHUD is malformed -- these are some of the most
|
||||||
|
seen problems in Inform. A couple of variables are needed just for that:
|
||||||
|
|
||||||
|
=
|
||||||
|
|
||||||
|
@ =
|
||||||
|
ph_runtime_context_data ImperativeDefinitions::to_runtime_context_data(imperative_defn *id) {
|
||||||
|
ph_runtime_context_data phrcd = Phrases::Context::new();
|
||||||
|
ImperativeDefinitions::to_rcd(id, &phrcd);
|
||||||
|
return phrcd;
|
||||||
|
}
|
||||||
|
|
|
@ -8,11 +8,20 @@ Imperative definitions of rules.
|
||||||
imperative_defn_family *RULE_EFF_family = NULL; /* "Before taking a container, ..." */
|
imperative_defn_family *RULE_EFF_family = NULL; /* "Before taking a container, ..." */
|
||||||
|
|
||||||
typedef struct rule_family_data {
|
typedef struct rule_family_data {
|
||||||
|
struct wording reduced_stem;
|
||||||
struct wording constant_name;
|
struct wording constant_name;
|
||||||
struct wording pattern;
|
struct wording pattern;
|
||||||
int not_in_rulebook;
|
int not_in_rulebook;
|
||||||
int event_time;
|
int event_time;
|
||||||
struct wording event_name;
|
struct wording event_name;
|
||||||
|
struct linked_list *uses_as_event; /* of |use_as_event| */
|
||||||
|
struct wording rule_parameter; /* text of object or action parameter */
|
||||||
|
struct wording whenwhile; /* when/while for action/activity rulebooks */
|
||||||
|
#ifdef IF_MODULE
|
||||||
|
struct parse_node *during_scene_spec; /* what scene is currently under way */
|
||||||
|
#endif
|
||||||
|
struct rulebook *owning_rulebook; /* the primary booking for the phrase will be here */
|
||||||
|
int owning_rulebook_placement; /* ...and with this placement value: see Rulebooks */
|
||||||
CLASS_DEFINITION
|
CLASS_DEFINITION
|
||||||
} rule_family_data;
|
} rule_family_data;
|
||||||
|
|
||||||
|
@ -22,7 +31,9 @@ typedef struct rule_family_data {
|
||||||
void RuleFamily::create_family(void) {
|
void RuleFamily::create_family(void) {
|
||||||
RULE_EFF_family = ImperativeDefinitions::new_family(I"RULE_EFF");
|
RULE_EFF_family = ImperativeDefinitions::new_family(I"RULE_EFF");
|
||||||
METHOD_ADD(RULE_EFF_family, CLAIM_IMP_DEFN_MTID, RuleFamily::claim);
|
METHOD_ADD(RULE_EFF_family, CLAIM_IMP_DEFN_MTID, RuleFamily::claim);
|
||||||
|
METHOD_ADD(RULE_EFF_family, ASSESS_IMP_DEFN_MTID, RuleFamily::assess);
|
||||||
METHOD_ADD(RULE_EFF_family, NEW_PHRASE_IMP_DEFN_MTID, RuleFamily::new_phrase);
|
METHOD_ADD(RULE_EFF_family, NEW_PHRASE_IMP_DEFN_MTID, RuleFamily::new_phrase);
|
||||||
|
METHOD_ADD(RULE_EFF_family, TO_RCD_IMP_DEFN_MTID, RuleFamily::to_rcd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ =
|
@ =
|
||||||
|
@ -96,6 +107,15 @@ void RuleFamily::claim(imperative_defn_family *self, imperative_defn *id) {
|
||||||
rfd->pattern = EMPTY_WORDING;
|
rfd->pattern = EMPTY_WORDING;
|
||||||
rfd->event_time = NOT_A_TIMED_EVENT;
|
rfd->event_time = NOT_A_TIMED_EVENT;
|
||||||
rfd->event_name = EMPTY_WORDING;
|
rfd->event_name = EMPTY_WORDING;
|
||||||
|
rfd->uses_as_event = NEW_LINKED_LIST(use_as_event);
|
||||||
|
rfd->rule_parameter = EMPTY_WORDING;
|
||||||
|
rfd->whenwhile = EMPTY_WORDING;
|
||||||
|
rfd->reduced_stem = EMPTY_WORDING;
|
||||||
|
#ifdef IF_MODULE
|
||||||
|
rfd->during_scene_spec = NULL;
|
||||||
|
#endif
|
||||||
|
rfd->owning_rulebook = NULL;
|
||||||
|
rfd->owning_rulebook_placement = MIDDLE_PLACEMENT;
|
||||||
|
|
||||||
if (form == 1) rfd->not_in_rulebook = TRUE;
|
if (form == 1) rfd->not_in_rulebook = TRUE;
|
||||||
id->family_specific_data = STORE_POINTER_rule_family_data(rfd);
|
id->family_specific_data = STORE_POINTER_rule_family_data(rfd);
|
||||||
|
@ -132,22 +152,10 @@ int RuleFamily::is(imperative_defn *id) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int RuleFamily::not_in_rulebook(imperative_defn *id) {
|
void RuleFamily::assess(imperative_defn_family *self, imperative_defn *id) {
|
||||||
if (RuleFamily::is(id)) {
|
|
||||||
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
|
||||||
return rfd->not_in_rulebook;
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RuleFamily::phud(imperative_defn *id, ph_usage_data *phud) {
|
|
||||||
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
||||||
phud->timing_of_event = rfd->event_time;
|
|
||||||
phud->event_name = rfd->event_name;
|
|
||||||
phud->explicit_name = rfd->constant_name;
|
|
||||||
if (rfd->not_in_rulebook == FALSE)
|
if (rfd->not_in_rulebook == FALSE)
|
||||||
@<Parse the rulebook stem in fine mode@>;
|
@<Parse the rulebook stem in fine mode@>;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ Much later on, Inform returns to the definition to look at it in fine detail:
|
@ Much later on, Inform returns to the definition to look at it in fine detail:
|
||||||
|
@ -191,17 +199,17 @@ Here "Instead of" is the stem and "taking a container" the bud.
|
||||||
if (form == NOT_APPLICABLE) {
|
if (form == NOT_APPLICABLE) {
|
||||||
<unrecognised-rule-stem-diagnosis>(W);
|
<unrecognised-rule-stem-diagnosis>(W);
|
||||||
} else {
|
} else {
|
||||||
if (form) phud->whenwhile = GET_RW(<rule-preamble-finer>, 2);
|
if (form) rfd->whenwhile = GET_RW(<rule-preamble-finer>, 2);
|
||||||
#ifdef IF_MODULE
|
#ifdef IF_MODULE
|
||||||
phud->during_scene_spec = during_spec;
|
rfd->during_scene_spec = during_spec;
|
||||||
#endif
|
#endif
|
||||||
phud->owning_rulebook = parsed_rm->matched_rulebook;
|
rfd->owning_rulebook = parsed_rm->matched_rulebook;
|
||||||
if (phud->owning_rulebook == NULL) internal_error("rulebook stem misparsed");
|
if (rfd->owning_rulebook == NULL) internal_error("rulebook stem misparsed");
|
||||||
phud->owning_rulebook_placement = parsed_rm->placement_requested;
|
rfd->owning_rulebook_placement = parsed_rm->placement_requested;
|
||||||
@<Disallow the definite article for anonymous rules@>;
|
@<Disallow the definite article for anonymous rules@>;
|
||||||
@<Cut off the bud from the stem@>;
|
@<Cut off the bud from the stem@>;
|
||||||
}
|
}
|
||||||
phud->rule_preamble = W;
|
rfd->reduced_stem = W;
|
||||||
|
|
||||||
@ The bud is not always present at all, and need not always be at the end
|
@ 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:
|
of the stem, so we have to be very careful:
|
||||||
|
@ -247,17 +255,17 @@ of the stem, so we have to be very careful:
|
||||||
CW = BW;
|
CW = BW;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Wordings::nonempty(CW)) phud->rule_parameter = CW;
|
if (Wordings::nonempty(CW)) rfd->rule_parameter = CW;
|
||||||
|
|
||||||
if ((phud->owning_rulebook) &&
|
if ((rfd->owning_rulebook) &&
|
||||||
(Rulebooks::runs_during_activities(phud->owning_rulebook) == FALSE) &&
|
(Rulebooks::runs_during_activities(rfd->owning_rulebook) == FALSE) &&
|
||||||
(Rulebooks::action_focus(phud->owning_rulebook)) &&
|
(Rulebooks::action_focus(rfd->owning_rulebook)) &&
|
||||||
(Wordings::nonempty(phud->rule_parameter)) &&
|
(Wordings::nonempty(rfd->rule_parameter)) &&
|
||||||
(Wordings::nonempty(phud->whenwhile))) {
|
(Wordings::nonempty(rfd->whenwhile))) {
|
||||||
phud->rule_parameter =
|
rfd->rule_parameter =
|
||||||
Wordings::new(Wordings::first_wn(phud->rule_parameter),
|
Wordings::new(Wordings::first_wn(rfd->rule_parameter),
|
||||||
Wordings::last_wn(phud->whenwhile));
|
Wordings::last_wn(rfd->whenwhile));
|
||||||
phud->whenwhile = EMPTY_WORDING;
|
rfd->whenwhile = EMPTY_WORDING;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ If we can't find a stem, the following chooses which problem to issue:
|
@ If we can't find a stem, the following chooses which problem to issue:
|
||||||
|
@ -315,9 +323,508 @@ of the stem, so we have to be very careful:
|
||||||
void RuleFamily::new_phrase(imperative_defn_family *self, imperative_defn *id, phrase *new_ph) {
|
void RuleFamily::new_phrase(imperative_defn_family *self, imperative_defn *id, phrase *new_ph) {
|
||||||
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
||||||
if (rfd->not_in_rulebook)
|
if (rfd->not_in_rulebook)
|
||||||
Phrases::Usage::to_rule(&(new_ph->usage_data), id);
|
RuleFamily::to_rule(id);
|
||||||
else
|
else
|
||||||
Rules::request_automatic_placement(
|
Rules::request_automatic_placement(RuleFamily::to_rule(id));
|
||||||
Phrases::Usage::to_rule(&(new_ph->usage_data), id));
|
|
||||||
new_ph->compile_with_run_time_debugging = TRUE;
|
new_ph->compile_with_run_time_debugging = 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:
|
||||||
|
|
||||||
|
>> Instead of jumping: say "Don't."
|
||||||
|
|
||||||
|
then we need to call |Rules::obtain| to create a nameless |rule| structure
|
||||||
|
to be connected to it. But if the phrase has an explicit name:
|
||||||
|
|
||||||
|
>> Instead of swimming (this is the avoid water rule): say "Don't."
|
||||||
|
|
||||||
|
then we have a predeclared rule called "avoid water rule" already, so we
|
||||||
|
connect this existing one to the phrase.
|
||||||
|
|
||||||
|
=
|
||||||
|
rule *RuleFamily::to_rule(imperative_defn *id) {
|
||||||
|
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
||||||
|
wording W = EMPTY_WORDING;
|
||||||
|
int explicitly = FALSE;
|
||||||
|
@<Find the name of the phrase, and whether or not it's explicitly given@>;
|
||||||
|
|
||||||
|
rule *R = NULL;
|
||||||
|
if (Wordings::nonempty(W)) R = Rules::by_name(W);
|
||||||
|
if (R) @<Check that this isn't duplicating the name of a rule already made@>
|
||||||
|
else R = Rules::obtain(W, explicitly);
|
||||||
|
if (Wordings::empty(W))
|
||||||
|
Hierarchy::markup_wording(R->compilation_data.rule_package, RULE_NAME_HMD, Node::get_text(id->at));
|
||||||
|
Rules::set_imperative_definition(R, id);
|
||||||
|
phrase *ph = id->defines;
|
||||||
|
package_request *P = RTRules::package(R);
|
||||||
|
ph->ph_iname = Hierarchy::make_localised_iname_in(RULE_FN_HL, P, ph->owning_module);
|
||||||
|
|
||||||
|
@<Do some tedious business for indexing the rule later on@>;
|
||||||
|
|
||||||
|
return R;
|
||||||
|
}
|
||||||
|
|
||||||
|
@<Find the name of the phrase, and whether or not it's explicitly given@> =
|
||||||
|
if (Wordings::nonempty(rfd->event_name)) {
|
||||||
|
W = Articles::remove_the(rfd->event_name);
|
||||||
|
} else if (Wordings::nonempty(rfd->constant_name)) {
|
||||||
|
W = Articles::remove_the(rfd->constant_name);
|
||||||
|
explicitly = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@<Check that this isn't duplicating the name of a rule already made@> =
|
||||||
|
imperative_defn *existing_id = Rules::get_imperative_definition(R);
|
||||||
|
if ((existing_id) && (existing_id != id)) {
|
||||||
|
Problems::quote_source(1, current_sentence);
|
||||||
|
Problems::quote_wording(2, W);
|
||||||
|
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_DuplicateRuleName));
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"You wrote %1, but this would give a name ('%2') to a "
|
||||||
|
"new rule which already belongs to an existing one.");
|
||||||
|
Problems::issue_problem_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
@ This is simply to make the rule's entry in the Index more helpful.
|
||||||
|
|
||||||
|
@<Do some tedious business for indexing the rule later on@> =
|
||||||
|
wording IX = rfd->rule_parameter;
|
||||||
|
if (Wordings::nonempty(rfd->whenwhile)) {
|
||||||
|
if (Wordings::first_wn(rfd->whenwhile) == Wordings::last_wn(rfd->rule_parameter) + 1) {
|
||||||
|
IX = Wordings::new(Wordings::first_wn(rfd->rule_parameter), Wordings::last_wn(rfd->whenwhile));
|
||||||
|
} else {
|
||||||
|
IX = rfd->whenwhile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
IXRules::set_italicised_index_text(R, IX);
|
||||||
|
|
||||||
|
@ =
|
||||||
|
int RuleFamily::get_timing_of_event(imperative_defn *id) {
|
||||||
|
if (id->family != RULE_EFF_family) return NOT_A_TIMED_EVENT;
|
||||||
|
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
||||||
|
return rfd->event_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ For example, for the rule
|
||||||
|
|
||||||
|
>> Instead of taking the box while the skylight is open: ...
|
||||||
|
|
||||||
|
this returns "taking the box".
|
||||||
|
|
||||||
|
=
|
||||||
|
wording RuleFamily::get_prewhile_text(imperative_defn *id) {
|
||||||
|
if (id->family != RULE_EFF_family) return EMPTY_WORDING;
|
||||||
|
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
||||||
|
if (Wordings::nonempty(rfd->rule_parameter)) {
|
||||||
|
wording E = rfd->rule_parameter;
|
||||||
|
if (<when-while-clause>(E)) E = GET_RW(<when-while-clause>, 1);
|
||||||
|
return E;
|
||||||
|
}
|
||||||
|
return EMPTY_WORDING;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ =
|
||||||
|
<when-while-clause> ::=
|
||||||
|
... when/while ...
|
||||||
|
|
||||||
|
@h Miscellaneous.
|
||||||
|
Some access routines.
|
||||||
|
|
||||||
|
=
|
||||||
|
int RuleFamily::get_rulebook_placement(imperative_defn *id) {
|
||||||
|
if (id->family != RULE_EFF_family) return MIDDLE_PLACEMENT;
|
||||||
|
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
||||||
|
return rfd->owning_rulebook_placement;
|
||||||
|
}
|
||||||
|
|
||||||
|
rulebook *RuleFamily::get_rulebook(imperative_defn *id) {
|
||||||
|
if (id->family != RULE_EFF_family) return NULL;
|
||||||
|
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
||||||
|
return rfd->owning_rulebook;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RuleFamily::set_rulebook(imperative_defn *id, rulebook *rb) {
|
||||||
|
if (id->family != RULE_EFF_family) internal_error("cannot set rulebook: not a rule");
|
||||||
|
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
||||||
|
rfd->owning_rulebook = rb;
|
||||||
|
}
|
||||||
|
|
||||||
|
linked_list *RuleFamily::get_uses_as_event(imperative_defn *id) {
|
||||||
|
if (id->family != RULE_EFF_family) return NULL;
|
||||||
|
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
||||||
|
return rfd->uses_as_event;
|
||||||
|
}
|
||||||
|
|
||||||
|
int NAP_problem_explained = FALSE; /* pertains to Named Action Patterns */
|
||||||
|
int issuing_ANL_problem = FALSE; /* pertains to Action Name Lists */
|
||||||
|
|
||||||
|
void RuleFamily::to_rcd(imperative_defn_family *self, imperative_defn *id, ph_runtime_context_data *rcd) {
|
||||||
|
rule_family_data *rfd = RETRIEVE_POINTER_rule_family_data(id->family_specific_data);
|
||||||
|
if (rfd->not_in_rulebook)
|
||||||
|
rcd->permit_all_outcomes = TRUE;
|
||||||
|
else
|
||||||
|
@<Finish work parsing the conditions for the rule to fire@>;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ All of this is just dumb copying...
|
||||||
|
|
||||||
|
@<Finish work parsing the conditions for the rule to fire@> =
|
||||||
|
|
||||||
|
rcd->compile_for_rulebook = &(rfd->owning_rulebook);
|
||||||
|
|
||||||
|
if (Wordings::nonempty(rfd->rule_parameter)) @<Parse what used to be the bud into the PHRCD@>;
|
||||||
|
|
||||||
|
if (Wordings::nonempty(rfd->whenwhile)) {
|
||||||
|
rcd->activity_context =
|
||||||
|
Wordings::new(
|
||||||
|
Wordings::first_wn(rfd->whenwhile) + 1,
|
||||||
|
Wordings::last_wn(rfd->whenwhile));
|
||||||
|
rcd->activity_where = current_sentence;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef IF_MODULE
|
||||||
|
if (rfd->during_scene_spec) rcd->during_scene = rfd->during_scene_spec;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ ...except for this:
|
||||||
|
|
||||||
|
@<Parse what used to be the bud into the PHRCD@> =
|
||||||
|
#ifdef IF_MODULE
|
||||||
|
if (Rulebooks::action_focus(rfd->owning_rulebook)) {
|
||||||
|
int saved = ParseActionPatterns::enter_mode(PERMIT_TRYING_OMISSION);
|
||||||
|
if (Rules::all_action_processing_variables())
|
||||||
|
Frames::set_stvol(
|
||||||
|
Frames::current_stack_frame(), Rules::all_action_processing_variables());
|
||||||
|
if (<action-pattern>(rfd->rule_parameter)) rcd->ap = <<rp>>;
|
||||||
|
Frames::remove_nonphrase_stack_frame();
|
||||||
|
ParseActionPatterns::restore_mode(saved);
|
||||||
|
|
||||||
|
if (rcd->ap == NULL)
|
||||||
|
@<Issue a problem message for a bad action@>;
|
||||||
|
} else {
|
||||||
|
kind *pk = Rulebooks::get_focus_kind(rfd->owning_rulebook);
|
||||||
|
rcd->ap = ActionPatterns::parse_parametric(rfd->rule_parameter, pk);
|
||||||
|
if (rcd->ap == NULL) {
|
||||||
|
if (Wordings::nonempty(rfd->whenwhile)) {
|
||||||
|
wording F = Wordings::up_to(rfd->rule_parameter, Wordings::last_wn(rfd->whenwhile));
|
||||||
|
rcd->ap = ActionPatterns::parse_parametric(F, pk);
|
||||||
|
if (rcd->ap) {
|
||||||
|
rfd->rule_parameter = F;
|
||||||
|
rfd->whenwhile = EMPTY_WORDING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (rcd->ap == NULL) @<Issue a problem message for a bad parameter@>;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifndef IF_MODULE
|
||||||
|
kind *pk = Rulebooks::get_focus_kind(rfd->owning_rulebook);
|
||||||
|
@<Issue a problem message for a bad parameter@>;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ 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 -- which covers an enormous
|
||||||
|
range of different faults.
|
||||||
|
|
||||||
|
The "PAP failure reason" is a sort of error code set by the action pattern
|
||||||
|
parser, recording how it most recently failed.
|
||||||
|
|
||||||
|
@<Issue a problem message for a bad action@> =
|
||||||
|
LOG("Bad action pattern: %W = $A\nPAP failure reason: %d\n",
|
||||||
|
rfd->rule_parameter, rcd->ap, pap_failure_reason);
|
||||||
|
Problems::quote_source(1, current_sentence);
|
||||||
|
Problems::quote_wording(2, rfd->rule_parameter);
|
||||||
|
if (<action-problem-diagnosis>(rfd->rule_parameter) == FALSE)
|
||||||
|
switch(pap_failure_reason) {
|
||||||
|
case MIXEDNOUNS_PAPF: @<Issue PM_APWithDisjunction problem@>; break;
|
||||||
|
case NOPARTICIPLE_PAPF: @<Issue PM_APWithNoParticiple problem@>; break;
|
||||||
|
case IMMISCIBLE_PAPF: @<Issue PM_APWithImmiscible problem@>; break;
|
||||||
|
case WHEN_PAPF: @<Issue PM_APWithBadWhen problem@>; break;
|
||||||
|
default: @<Issue PM_APUnknown problem@>; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
@<Issue PM_APWithDisjunction problem@> =
|
||||||
|
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_APWithDisjunction));
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"You wrote %1, which seems to introduce a rule, but the "
|
||||||
|
"circumstances ('%2') seem to be too general for me to "
|
||||||
|
"understand in a single rule. I can understand a choice of "
|
||||||
|
"of actions, in a list such as 'taking or dropping the ball', "
|
||||||
|
"but there can only be one set of noun(s) supplied. So 'taking "
|
||||||
|
"the ball or taking the bat' is disallowed. You can get around "
|
||||||
|
"this by using named actions ('Taking the ball is being "
|
||||||
|
"mischievous. Taking the bat is being mischievous. Instead of "
|
||||||
|
"being mischievous...'), or it may be less bother just to "
|
||||||
|
"write more than one rule.");
|
||||||
|
Problems::issue_problem_end();
|
||||||
|
|
||||||
|
@<Issue PM_APWithNoParticiple problem@> =
|
||||||
|
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_APWithNoParticiple));
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"You wrote %1, which seems to introduce a rule taking effect "
|
||||||
|
"only '%2'. But this does not look like an action, since "
|
||||||
|
"there is no sign of a participle ending '-ing' (as in "
|
||||||
|
"'taking the brick', say) - which makes me think I have "
|
||||||
|
"badly misunderstood what you intended.");
|
||||||
|
Problems::issue_problem_end();
|
||||||
|
|
||||||
|
@<Issue PM_APWithImmiscible problem@> =
|
||||||
|
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_APWithImmiscible));
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"You wrote %1, which seems to introduce a rule taking effect "
|
||||||
|
"only '%2'. But this is a combination of actions which cannot "
|
||||||
|
"be mixed. The only alternatives where 'or' is allowed are "
|
||||||
|
"cases where a choice of actions is given but applying to "
|
||||||
|
"the same objects in each case. (So 'taking or dropping the "
|
||||||
|
"CD' is allowed, but 'dropping the CD or inserting the CD "
|
||||||
|
"into the jewel box' is not, because the alternatives there "
|
||||||
|
"would make different use of objects from each other.)");
|
||||||
|
Problems::issue_problem_end();
|
||||||
|
|
||||||
|
@<Issue PM_APWithBadWhen problem@> =
|
||||||
|
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_APWithBadWhen));
|
||||||
|
wording Q = rfd->rule_parameter;
|
||||||
|
int diagnosis = 0;
|
||||||
|
if (<action-when-diagnosis>(Q)) {
|
||||||
|
Q = Wordings::new(<<cw1>>, <<cw2>>);
|
||||||
|
diagnosis = <<r>>;
|
||||||
|
}
|
||||||
|
Problems::quote_wording(2, Q);
|
||||||
|
Problems::quote_text(3, "so I am unable to accept this rule.");
|
||||||
|
if (diagnosis == 2) {
|
||||||
|
Problems::quote_text(3,
|
||||||
|
"perhaps because 'nothing' tends not to be allowed in Inform conditions? "
|
||||||
|
"(Whereas 'no thing' is usually allowed.)");
|
||||||
|
}
|
||||||
|
if (diagnosis == 3) {
|
||||||
|
Problems::quote_text(3,
|
||||||
|
"perhaps because 'nowhere' tends not to be allowed in Inform conditions? "
|
||||||
|
"(Whereas 'no room' is usually allowed.)");
|
||||||
|
}
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"You wrote %1, which seems to introduce a rule taking effect "
|
||||||
|
"only '%2'. But this condition did not make sense, %3");
|
||||||
|
if (diagnosis == 1)
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"%PIt might be worth mentioning that a 'when' condition tacked on to "
|
||||||
|
"an action like this is not allowed to mention or use 'called' values.");
|
||||||
|
if (diagnosis == 4)
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"%PThe problem might be that 'and' has been followed by 'when' or "
|
||||||
|
"'while'. For example, to make a rule with two conditions, this is "
|
||||||
|
"okay: 'Instead of jumping when Peter is happy and Peter is in the "
|
||||||
|
"location'; but the same thing with '...and when Peter is...' is not allowed.");
|
||||||
|
Problems::issue_problem_end();
|
||||||
|
|
||||||
|
@<Issue PM_APUnknown problem@> =
|
||||||
|
Problems::quote_wording(2, rfd->rule_parameter);
|
||||||
|
if (pap_failure_reason == WHENOKAY_PAPF)
|
||||||
|
Problems::quote_text(3,
|
||||||
|
"The part after 'when' (or 'while') was fine, but the earlier words");
|
||||||
|
else Problems::quote_text(3, "But that");
|
||||||
|
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_APUnknown));
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"You wrote %1, which seems to introduce a rule taking effect only if the "
|
||||||
|
"action is '%2'. %3 did not make sense as a description of an action.");
|
||||||
|
@<See if it starts with a valid action name, at least@>;
|
||||||
|
@<See if this might be a when-for confusion@>;
|
||||||
|
@<Break down the action list and say which are okay@>;
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
" I am unable to place this rule into any rulebook.");
|
||||||
|
Problems::issue_problem_end();
|
||||||
|
|
||||||
|
@<See if it starts with a valid action name, at least@> =
|
||||||
|
action_name *an;
|
||||||
|
LOOP_OVER(an, action_name)
|
||||||
|
if ((Wordings::length(rfd->rule_parameter) < Wordings::length(ActionNameNames::tensed(an, IS_TENSE))) &&
|
||||||
|
(Wordings::match(rfd->rule_parameter,
|
||||||
|
Wordings::truncate(ActionNameNames::tensed(an, IS_TENSE), Wordings::length(rfd->rule_parameter))))) {
|
||||||
|
Problems::quote_wording(3, ActionNameNames::tensed(an, IS_TENSE));
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
" I notice that there's an action called '%3', though: perhaps "
|
||||||
|
"this is what you meant?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
@<See if this might be a when-for confusion@> =
|
||||||
|
if (pap_failure_reason == WHENOKAY_PAPF) {
|
||||||
|
time_period *duration = Occurrence::parse(rfd->reduced_stem);
|
||||||
|
if (duration) {
|
||||||
|
Problems::quote_wording(3, Occurrence::used_wording(duration));
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
" (I wonder if this might be because '%3', which looks like a "
|
||||||
|
"condition on the timing, is the wrong side of the 'when...' "
|
||||||
|
"clause?)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ If the action pattern contains what looks like a list of action names, as
|
||||||
|
for example
|
||||||
|
|
||||||
|
>> Instead of taking or dropping the magnet: ...
|
||||||
|
|
||||||
|
then the anl-diagnosis grammar will parse this and return N equal to 2, the
|
||||||
|
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.
|
||||||
|
|
||||||
|
@<Break down the action list and say which are okay@> =
|
||||||
|
issuing_ANL_problem = FALSE; NAP_problem_explained = FALSE;
|
||||||
|
<anl-diagnosis>(rfd->rule_parameter);
|
||||||
|
int N = <<r>>;
|
||||||
|
if (N > 1) {
|
||||||
|
int positive = TRUE;
|
||||||
|
ActionNameLists::parse(rfd->rule_parameter, IS_TENSE, &positive);
|
||||||
|
if (positive == FALSE)
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
" This looks like a list of actions to avoid: ");
|
||||||
|
else
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
" Looking at this as a list of alternative actions: ");
|
||||||
|
issuing_ANL_problem = TRUE; NAP_problem_explained = FALSE;
|
||||||
|
<anl-diagnosis>(rfd->rule_parameter);
|
||||||
|
Problems::issue_problem_segment(" so");
|
||||||
|
}
|
||||||
|
|
||||||
|
@ We have a much easier time if the rulebook was value-focused, so that
|
||||||
|
the only possible problem is that the value was wrong.
|
||||||
|
|
||||||
|
@<Issue a problem message for a bad parameter@> =
|
||||||
|
Problems::quote_source(1, current_sentence);
|
||||||
|
Problems::quote_wording(2, rfd->rule_parameter);
|
||||||
|
Problems::quote_kind(3, pk);
|
||||||
|
<parametric-problem-diagnosis>(rfd->reduced_stem);
|
||||||
|
|
||||||
|
@ And that is the end of the code as such, but we still have to define the
|
||||||
|
three diagnosis grammars we needed.
|
||||||
|
|
||||||
|
@ 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.
|
||||||
|
|
||||||
|
=
|
||||||
|
<parametric-problem-diagnosis> ::=
|
||||||
|
when the play begins/ends | ==> @<Issue PM_WhenThePlay problem@>
|
||||||
|
... ==> @<Issue PM_BadParameter problem@>
|
||||||
|
|
||||||
|
@<Issue PM_WhenThePlay problem@> =
|
||||||
|
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_WhenThePlay),
|
||||||
|
"there's no scene called 'the play'",
|
||||||
|
"so I think you need to remove 'the' - Inform has two "
|
||||||
|
"special rulebooks, 'When play begins' and 'When play ends', "
|
||||||
|
"and I think you probably mean to refer to one of those.");
|
||||||
|
|
||||||
|
@<Issue PM_BadParameter problem@> =
|
||||||
|
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_BadParameter));
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"You wrote %1, but the description of the thing(s) to which the rule "
|
||||||
|
"applies ('%2') did not make sense. This is %3 based rulebook, so "
|
||||||
|
"that should have described %3.");
|
||||||
|
Problems::issue_problem_end();
|
||||||
|
|
||||||
|
@ And here we choose a problem message if a rule applying to an action is used,
|
||||||
|
but the action isn't one we recognise.
|
||||||
|
|
||||||
|
=
|
||||||
|
<action-problem-diagnosis> ::=
|
||||||
|
in the presence of ... | ==> @<Issue PM_NonActionInPresenceOf problem@>
|
||||||
|
in ... ==> @<Issue PM_NonActionIn problem@>
|
||||||
|
|
||||||
|
|
||||||
|
@<Issue PM_NonActionInPresenceOf problem@> =
|
||||||
|
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NonActionInPresenceOf));
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"You wrote %1, but 'in the presence of...' is a clause which can "
|
||||||
|
"only be used to talk about an action: so, for instance, 'waiting "
|
||||||
|
"in the presence of...' is needed. "
|
||||||
|
"This problem arises especially with 'every turn' rules, where "
|
||||||
|
"'every turn in the presence of...' looks plausible but doesn't "
|
||||||
|
"work. This could be fixed by writing 'Every turn doing something "
|
||||||
|
"in the presence of...', but a neater solution talks about the "
|
||||||
|
"current situation instead: 'Every turn when the player can "
|
||||||
|
"see...'.");
|
||||||
|
Problems::issue_problem_end();
|
||||||
|
|
||||||
|
@<Issue PM_NonActionIn problem@> =
|
||||||
|
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NonActionIn));
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"You wrote %1, but 'in...' used in this way should really belong "
|
||||||
|
"to an action: for instance, 'Before waiting in the Library'. "
|
||||||
|
"Rules like 'Every turn in the Library' don't work, because "
|
||||||
|
"'every turn' is not an action; what's wanted is 'Every turn "
|
||||||
|
"when in the Library'.");
|
||||||
|
Problems::issue_problem_end();
|
||||||
|
|
||||||
|
@ 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.
|
||||||
|
|
||||||
|
=
|
||||||
|
<action-when-diagnosis> ::=
|
||||||
|
... called ... {when/while ...} | ==> { 1, -, <<cw1>> = Wordings::first_wn(WR[3]), <<cw2>> = Wordings::last_wn(WR[3]) }
|
||||||
|
... {when/while *** nothing ***} | ==> { 2, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }
|
||||||
|
... {when/while *** nowhere ***} | ==> { 3, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }
|
||||||
|
... and {when/while ...} | ==> { 4, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }
|
||||||
|
... {when/while ...} ==> { 5, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }
|
||||||
|
|
||||||
|
@ =
|
||||||
|
<anl-diagnosis> ::=
|
||||||
|
<anl-inner-diagnosis> when/while ... | ==> { pass 1 }
|
||||||
|
<anl-inner-diagnosis> ==> { pass 1 }
|
||||||
|
|
||||||
|
<anl-inner-diagnosis> ::=
|
||||||
|
<anl-entry-diagnosis> <anl-tail-diagnosis> | ==> { R[1] + R[2], - }
|
||||||
|
<anl-entry-diagnosis> ==> { pass 1 }
|
||||||
|
|
||||||
|
<anl-tail-diagnosis> ::=
|
||||||
|
, _or <anl-inner-diagnosis> | ==> { pass 1 }
|
||||||
|
_,/or <anl-inner-diagnosis> ==> { pass 1 }
|
||||||
|
|
||||||
|
<anl-entry-diagnosis> ::=
|
||||||
|
...... ==> @<Diagnose problem with this ANL entry@>
|
||||||
|
|
||||||
|
@<Diagnose problem with this ANL entry@> =
|
||||||
|
if ((issuing_ANL_problem) && (!preform_lookahead_mode)) {
|
||||||
|
Problems::quote_wording(4, W);
|
||||||
|
#ifdef IF_MODULE
|
||||||
|
if (<action-pattern>(W) == FALSE) {
|
||||||
|
Problems::issue_problem_segment("'%4' did not make sense; ");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
action_pattern *ap = <<rp>>;
|
||||||
|
int form = <<r>>;
|
||||||
|
if (APClauses::is_request(ap)) {
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"'%4' would make sense as an action on its own, but 'or' can't "
|
||||||
|
"be used in combination with 'asking... to try...' actions; ");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ActionPatterns::refers_to_past(ap)) {
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"'%4' would make sense as an action on its own, but 'or' can't "
|
||||||
|
"be used in combination with actions with time periods attached; ");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (<named-action-pattern>(W)) {
|
||||||
|
if (NAP_problem_explained == FALSE)
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"'%4' only made sense as a named kind of action, which can "
|
||||||
|
"be used on its own but not in an action list; ");
|
||||||
|
else
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"'%4' is another named kind of action; ");
|
||||||
|
NAP_problem_explained = TRUE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (form == ACTOR_EXP_PLAYER) {
|
||||||
|
Problems::issue_problem_segment(
|
||||||
|
"'%4' would have been okay except for using the word 'trying', "
|
||||||
|
"which isn't allowed in a list like this; ");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
Problems::issue_problem_segment("'%4' was okay; ");
|
||||||
|
}
|
||||||
|
==> { 1, - };
|
||||||
|
|
|
@ -9,9 +9,12 @@ imperative_defn_family *TO_PHRASE_EFF_family = NULL; /* "To award (some - number
|
||||||
|
|
||||||
typedef struct to_family_data {
|
typedef struct to_family_data {
|
||||||
struct wording pattern;
|
struct wording pattern;
|
||||||
|
struct wording prototype_text;
|
||||||
struct wording constant_name;
|
struct wording constant_name;
|
||||||
int explicit_name_used_in_maths;
|
struct constant_phrase *constant_phrase_holder;
|
||||||
struct wording explicit_name_for_inverse;
|
int explicit_name_used_in_maths; /* if so, this flag means it's like |log()| or |sin()| */
|
||||||
|
struct wording explicit_name_for_inverse; /* e.g. |exp| for |log| */
|
||||||
|
int to_begin; /* used in Basic mode only: this is to be the main phrase */
|
||||||
CLASS_DEFINITION
|
CLASS_DEFINITION
|
||||||
} to_family_data;
|
} to_family_data;
|
||||||
|
|
||||||
|
@ -21,6 +24,7 @@ typedef struct to_family_data {
|
||||||
void ToPhraseFamily::create_family(void) {
|
void ToPhraseFamily::create_family(void) {
|
||||||
TO_PHRASE_EFF_family = ImperativeDefinitions::new_family(I"TO_PHRASE_EFF");
|
TO_PHRASE_EFF_family = ImperativeDefinitions::new_family(I"TO_PHRASE_EFF");
|
||||||
METHOD_ADD(TO_PHRASE_EFF_family, CLAIM_IMP_DEFN_MTID, ToPhraseFamily::claim);
|
METHOD_ADD(TO_PHRASE_EFF_family, CLAIM_IMP_DEFN_MTID, ToPhraseFamily::claim);
|
||||||
|
METHOD_ADD(TO_PHRASE_EFF_family, ASSESS_IMP_DEFN_MTID, ToPhraseFamily::assess);
|
||||||
METHOD_ADD(TO_PHRASE_EFF_family, NEW_PHRASE_IMP_DEFN_MTID, ToPhraseFamily::new_phrase);
|
METHOD_ADD(TO_PHRASE_EFF_family, NEW_PHRASE_IMP_DEFN_MTID, ToPhraseFamily::new_phrase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,6 +63,7 @@ void ToPhraseFamily::claim(imperative_defn_family *self, imperative_defn *id) {
|
||||||
tfd->constant_name = EMPTY_WORDING;
|
tfd->constant_name = EMPTY_WORDING;
|
||||||
tfd->explicit_name_used_in_maths = FALSE;
|
tfd->explicit_name_used_in_maths = FALSE;
|
||||||
tfd->explicit_name_for_inverse = EMPTY_WORDING;
|
tfd->explicit_name_for_inverse = EMPTY_WORDING;
|
||||||
|
tfd->constant_phrase_holder = NULL;
|
||||||
id->family_specific_data = STORE_POINTER_to_family_data(tfd);
|
id->family_specific_data = STORE_POINTER_to_family_data(tfd);
|
||||||
int form = <<r>>;
|
int form = <<r>>;
|
||||||
if (form != 4) {
|
if (form != 4) {
|
||||||
|
@ -75,7 +80,7 @@ void ToPhraseFamily::claim(imperative_defn_family *self, imperative_defn *id) {
|
||||||
if ((form == 1) || (form == 2)) tfd->explicit_name_used_in_maths = TRUE;
|
if ((form == 1) || (form == 2)) tfd->explicit_name_used_in_maths = TRUE;
|
||||||
if (form == 1) tfd->explicit_name_for_inverse = Wordings::first_word(GET_RW(<to-phrase-preamble>, 3));
|
if (form == 1) tfd->explicit_name_for_inverse = Wordings::first_word(GET_RW(<to-phrase-preamble>, 3));
|
||||||
}
|
}
|
||||||
tfd->pattern = GET_RW(<to-phrase-preamble>, 1);
|
tfd->prototype_text = GET_RW(<to-phrase-preamble>, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,10 +100,9 @@ preambles match:
|
||||||
to begin
|
to begin
|
||||||
|
|
||||||
@ =
|
@ =
|
||||||
void ToPhraseFamily::phud(imperative_defn *id, ph_usage_data *phud) {
|
void ToPhraseFamily::assess(imperative_defn_family *self, imperative_defn *id) {
|
||||||
to_family_data *tfd = RETRIEVE_POINTER_to_family_data(id->family_specific_data);
|
to_family_data *tfd = RETRIEVE_POINTER_to_family_data(id->family_specific_data);
|
||||||
wording W = tfd->pattern;
|
wording W = tfd->prototype_text;
|
||||||
phud->rule_preamble = W;
|
|
||||||
|
|
||||||
if (Wordings::nonempty(tfd->constant_name)) @<The preamble parses to a named To phrase@>;
|
if (Wordings::nonempty(tfd->constant_name)) @<The preamble parses to a named To phrase@>;
|
||||||
if (<now-phrase-preamble>(W)) {
|
if (<now-phrase-preamble>(W)) {
|
||||||
|
@ -112,7 +116,7 @@ void ToPhraseFamily::phud(imperative_defn *id, ph_usage_data *phud) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (<begin-phrase-preamble>(W)) {
|
if (<begin-phrase-preamble>(W)) {
|
||||||
phud->to_begin = TRUE;
|
tfd->to_begin = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,15 +144,68 @@ mode, we can get that value back again if we look it up by name.
|
||||||
Problems::issue_problem_end();
|
Problems::issue_problem_end();
|
||||||
LOG("CPHR failed at %d, %u\n", cphr->allocation_id, cphr->cphr_kind);
|
LOG("CPHR failed at %d, %u\n", cphr->allocation_id, cphr->cphr_kind);
|
||||||
}
|
}
|
||||||
phud->explicit_name_used_in_maths = tfd->explicit_name_used_in_maths;
|
tfd->constant_phrase_holder = cphr;
|
||||||
phud->explicit_name_for_inverse = tfd->explicit_name_for_inverse;
|
|
||||||
phud->explicit_name_used_in_maths = tfd->explicit_name_used_in_maths;
|
|
||||||
phud->constant_phrase_holder = cphr;
|
|
||||||
|
|
||||||
@
|
@
|
||||||
|
|
||||||
=
|
=
|
||||||
void ToPhraseFamily::new_phrase(imperative_defn_family *self, imperative_defn *id, phrase *new_ph) {
|
void ToPhraseFamily::new_phrase(imperative_defn_family *self, imperative_defn *id, phrase *new_ph) {
|
||||||
if (new_ph->usage_data.to_begin) new_ph->to_begin = TRUE;
|
to_family_data *tfd = RETRIEVE_POINTER_to_family_data(id->family_specific_data);
|
||||||
|
if (tfd->to_begin) new_ph->to_begin = TRUE;
|
||||||
Routines::ToPhrases::new(new_ph);
|
Routines::ToPhrases::new(new_ph);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
phrase *ToPhraseFamily::inverse(imperative_defn *id) {
|
||||||
|
if (id->family != TO_PHRASE_EFF_family) return NULL;
|
||||||
|
to_family_data *tfd = RETRIEVE_POINTER_to_family_data(id->family_specific_data);
|
||||||
|
if (Wordings::nonempty(tfd->explicit_name_for_inverse)) {
|
||||||
|
phrase *ph;
|
||||||
|
LOOP_OVER(ph, phrase) {
|
||||||
|
wording W = ToPhraseFamily::get_equation_form(ph->from);
|
||||||
|
if (Wordings::nonempty(W))
|
||||||
|
if (Wordings::match(W, tfd->explicit_name_for_inverse))
|
||||||
|
return ph;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
constant_phrase *ToPhraseFamily::constant_phrase(imperative_defn *id) {
|
||||||
|
if (id->family != TO_PHRASE_EFF_family) return NULL;
|
||||||
|
to_family_data *tfd = RETRIEVE_POINTER_to_family_data(id->family_specific_data);
|
||||||
|
return tfd->constant_phrase_holder;
|
||||||
|
}
|
||||||
|
|
||||||
|
wording ToPhraseFamily::constant_name(imperative_defn *id) {
|
||||||
|
if (id->family != TO_PHRASE_EFF_family) return EMPTY_WORDING;
|
||||||
|
to_family_data *tfd = RETRIEVE_POINTER_to_family_data(id->family_specific_data);
|
||||||
|
return tfd->constant_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ToPhraseFamily::has_name_as_constant(imperative_defn *id) {
|
||||||
|
if (id->family != TO_PHRASE_EFF_family) return FALSE;
|
||||||
|
to_family_data *tfd = RETRIEVE_POINTER_to_family_data(id->family_specific_data);
|
||||||
|
if ((tfd->constant_phrase_holder) &&
|
||||||
|
(tfd->explicit_name_used_in_maths == FALSE) &&
|
||||||
|
(Wordings::nonempty(Nouns::nominative_singular(tfd->constant_phrase_holder->name)))) return TRUE;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wording ToPhraseFamily::get_equation_form(imperative_defn *id) {
|
||||||
|
if (id->family != TO_PHRASE_EFF_family) return EMPTY_WORDING;
|
||||||
|
to_family_data *tfd = RETRIEVE_POINTER_to_family_data(id->family_specific_data);
|
||||||
|
if (tfd->explicit_name_used_in_maths)
|
||||||
|
return Wordings::first_word(Nouns::nominative_singular(tfd->constant_phrase_holder->name));
|
||||||
|
return EMPTY_WORDING;
|
||||||
|
}
|
||||||
|
|
||||||
|
@h Extracting the stem.
|
||||||
|
A couple of routines to read but not really parse the stem and the bud.
|
||||||
|
|
||||||
|
=
|
||||||
|
wording ToPhraseFamily::get_prototype_text(imperative_defn *id) {
|
||||||
|
if (id->family != TO_PHRASE_EFF_family) return EMPTY_WORDING;
|
||||||
|
to_family_data *tfd = RETRIEVE_POINTER_to_family_data(id->family_specific_data);
|
||||||
|
return tfd->prototype_text;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -571,7 +571,7 @@ void Equations::eqn_declare_standard_symbols(void) {
|
||||||
}
|
}
|
||||||
phrase *ph;
|
phrase *ph;
|
||||||
LOOP_OVER(ph, phrase) {
|
LOOP_OVER(ph, phrase) {
|
||||||
wording W = Phrases::Usage::get_equation_form(&(ph->usage_data));
|
wording W = ToPhraseFamily::get_equation_form(ph->from);
|
||||||
if (Wordings::nonempty(W)) {
|
if (Wordings::nonempty(W)) {
|
||||||
equation_symbol *ev = Equations::eqn_add_symbol(NULL, W, K_real_number, NULL);
|
equation_symbol *ev = Equations::eqn_add_symbol(NULL, W, K_real_number, NULL);
|
||||||
ev->function_notated = ph;
|
ev->function_notated = ph;
|
||||||
|
@ -1767,7 +1767,7 @@ must become
|
||||||
internal_error("not a function being applied");
|
internal_error("not a function being applied");
|
||||||
}
|
}
|
||||||
phrase *f = fnode->leaf_symbol->function_notated;
|
phrase *f = fnode->leaf_symbol->function_notated;
|
||||||
phrase *finv = Phrases::Usage::get_equation_inverse(&(f->usage_data));
|
phrase *finv = ToPhraseFamily::inverse(f->from);
|
||||||
if (finv == NULL) return FALSE; /* no known inverse for this function */
|
if (finv == NULL) return FALSE; /* no known inverse for this function */
|
||||||
|
|
||||||
equation_symbol *ev, *ev_inverse = NULL;
|
equation_symbol *ev, *ev_inverse = NULL;
|
||||||
|
|
|
@ -124,7 +124,7 @@ void StandardProblems::inline_problem(SIGIL_ARGUMENTS, phrase *ph, text_stream *
|
||||||
ACT_ON_SIGIL
|
ACT_ON_SIGIL
|
||||||
Problems::quote_source(1, current_sentence);
|
Problems::quote_source(1, current_sentence);
|
||||||
Problems::quote_stream(2, definition);
|
Problems::quote_stream(2, definition);
|
||||||
wording XW = Phrases::Usage::get_preamble_text(&(ph->usage_data));
|
wording XW = ToPhraseFamily::get_prototype_text(ph->from);
|
||||||
Problems::quote_wording_as_source(3, XW);
|
Problems::quote_wording_as_source(3, XW);
|
||||||
Problems::issue_problem_begin(Task::syntax_tree(), "");
|
Problems::issue_problem_begin(Task::syntax_tree(), "");
|
||||||
Problems::issue_problem_segment(
|
Problems::issue_problem_segment(
|
||||||
|
|
|
@ -109,7 +109,7 @@ int Actions::place_rule(rule *R, rulebook *original_owner, rulebook **new_owner)
|
||||||
if (Rulebooks::requires_specific_action(original_owner)) {
|
if (Rulebooks::requires_specific_action(original_owner)) {
|
||||||
int waiver = FALSE;
|
int waiver = FALSE;
|
||||||
action_name *an = NULL;
|
action_name *an = NULL;
|
||||||
wording PW = Phrases::Usage::get_prewhile_text(&(ph->usage_data));
|
wording PW = RuleFamily::get_prewhile_text(ph->from);
|
||||||
if (Wordings::nonempty(PW)) {
|
if (Wordings::nonempty(PW)) {
|
||||||
LOOP_THROUGH_WORDING(i, PW)
|
LOOP_THROUGH_WORDING(i, PW)
|
||||||
if (NamedActionPatterns::by_name(Wordings::from(PW, i)))
|
if (NamedActionPatterns::by_name(Wordings::from(PW, i)))
|
||||||
|
|
|
@ -25,7 +25,6 @@ COMPILE_WRITER(parse_node *, Invocations::log)
|
||||||
COMPILE_WRITER(ph_type_data *, Phrases::TypeData::Textual::log)
|
COMPILE_WRITER(ph_type_data *, Phrases::TypeData::Textual::log)
|
||||||
COMPILE_WRITER(local_variable *, LocalVariables::log)
|
COMPILE_WRITER(local_variable *, LocalVariables::log)
|
||||||
COMPILE_WRITER(phrase *, Phrases::log)
|
COMPILE_WRITER(phrase *, Phrases::log)
|
||||||
COMPILE_WRITER(ph_usage_data *, Phrases::Usage::log)
|
|
||||||
|
|
||||||
void ImperativeModule::start(void) {
|
void ImperativeModule::start(void) {
|
||||||
Writers::register_writer('L', &LocalVariables::writer);
|
Writers::register_writer('L', &LocalVariables::writer);
|
||||||
|
@ -34,7 +33,6 @@ void ImperativeModule::start(void) {
|
||||||
REGISTER_WRITER('h', Phrases::TypeData::Textual::log);
|
REGISTER_WRITER('h', Phrases::TypeData::Textual::log);
|
||||||
REGISTER_WRITER('k', LocalVariables::log);
|
REGISTER_WRITER('k', LocalVariables::log);
|
||||||
REGISTER_WRITER('R', Phrases::log);
|
REGISTER_WRITER('R', Phrases::log);
|
||||||
REGISTER_WRITER('U', Phrases::Usage::log);
|
|
||||||
Memory::reason_name(INV_LIST_MREASON, "lists for type-checking invocations");
|
Memory::reason_name(INV_LIST_MREASON, "lists for type-checking invocations");
|
||||||
Log::declare_aspect(DESCRIPTION_COMPILATION_DA, L"description compilation", FALSE, FALSE);
|
Log::declare_aspect(DESCRIPTION_COMPILATION_DA, L"description compilation", FALSE, FALSE);
|
||||||
Log::declare_aspect(EXPRESSIONS_DA, L"expressions", FALSE, FALSE);
|
Log::declare_aspect(EXPRESSIONS_DA, L"expressions", FALSE, FALSE);
|
||||||
|
|
|
@ -95,12 +95,12 @@ void RuleBookings::make_automatic_placements(void) {
|
||||||
if (id) {
|
if (id) {
|
||||||
current_sentence = id->at;
|
current_sentence = id->at;
|
||||||
phrase *ph = id->defines;
|
phrase *ph = id->defines;
|
||||||
rulebook *original_owner = Phrases::Usage::get_rulebook(&(ph->usage_data));
|
rulebook *original_owner = RuleFamily::get_rulebook(ph->from);
|
||||||
int placement = Phrases::Usage::get_rulebook_placement(&(ph->usage_data));
|
int placement = RuleFamily::get_rulebook_placement(ph->from);
|
||||||
rulebook *owner = original_owner;
|
rulebook *owner = original_owner;
|
||||||
PluginCalls::place_rule(br->rule_being_booked, original_owner, &owner);
|
PluginCalls::place_rule(br->rule_being_booked, original_owner, &owner);
|
||||||
if (owner != original_owner) {
|
if (owner != original_owner) {
|
||||||
Phrases::Usage::set_rulebook(&(ph->usage_data), owner);
|
RuleFamily::set_rulebook(ph->from, owner);
|
||||||
LOGIF(RULE_ATTACHMENTS, "Rerouting $b: $K --> $K\n",
|
LOGIF(RULE_ATTACHMENTS, "Rerouting $b: $K --> $K\n",
|
||||||
br, original_owner, owner);
|
br, original_owner, owner);
|
||||||
}
|
}
|
||||||
|
|
|
@ -239,7 +239,7 @@ void Phrases::TypeData::Textual::write_index_representation(OUTPUT_STREAM, ph_ty
|
||||||
if (Kinds::Behaviour::definite(phtd->return_kind) == FALSE) WRITE("value");
|
if (Kinds::Behaviour::definite(phtd->return_kind) == FALSE) WRITE("value");
|
||||||
else Kinds::Textual::write(OUT, phtd->return_kind);
|
else Kinds::Textual::write(OUT, phtd->return_kind);
|
||||||
WRITE("</i>");
|
WRITE("</i>");
|
||||||
wording W = Phrases::Usage::get_equation_form(&(ph->usage_data));
|
wording W = ToPhraseFamily::get_equation_form(ph->from);
|
||||||
if (Wordings::nonempty(W)) {
|
if (Wordings::nonempty(W)) {
|
||||||
WRITE(" <i>y</i> = <b>%+W</b>(<i>x</i>)", W);
|
WRITE(" <i>y</i> = <b>%+W</b>(<i>x</i>)", W);
|
||||||
}
|
}
|
||||||
|
@ -286,7 +286,7 @@ of course.
|
||||||
}
|
}
|
||||||
|
|
||||||
@<Present the equation form of the phrase, if it has one@> =
|
@<Present the equation form of the phrase, if it has one@> =
|
||||||
wording W = Phrases::Usage::get_equation_form(&(ph->usage_data));
|
wording W = ToPhraseFamily::get_equation_form(ph->from);
|
||||||
if (Wordings::nonempty(W)) {
|
if (Wordings::nonempty(W)) {
|
||||||
HTML_CLOSE("p");
|
HTML_CLOSE("p");
|
||||||
HTML_OPEN("p");
|
HTML_OPEN("p");
|
||||||
|
@ -296,13 +296,13 @@ of course.
|
||||||
}
|
}
|
||||||
|
|
||||||
@<Present the name of the phrase regarded as a value, if it has one@> =
|
@<Present the name of the phrase regarded as a value, if it has one@> =
|
||||||
if (ph->usage_data.constant_phrase_holder) {
|
wording CW = ToPhraseFamily::constant_name(ph->from);
|
||||||
wording W = Nouns::nominative_singular(ph->usage_data.constant_phrase_holder->name);
|
if (Wordings::nonempty(CW)) {
|
||||||
HTML_CLOSE("p");
|
HTML_CLOSE("p");
|
||||||
HTML_OPEN("p");
|
HTML_OPEN("p");
|
||||||
WRITE("<b>Name:</b> ");
|
WRITE("<b>Name:</b> ");
|
||||||
PasteButtons::paste_W(OUT, W);
|
PasteButtons::paste_W(OUT, CW);
|
||||||
WRITE(" %+W", W);
|
WRITE(" %+W", CW);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ "Say" phrases are never used functionally and don't have interesting kinds,
|
@ "Say" phrases are never used functionally and don't have interesting kinds,
|
||||||
|
|
|
@ -1,661 +0,0 @@
|
||||||
[Phrases::Usage::] Phrase Usage.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
@ And here is the usage data.
|
|
||||||
|
|
||||||
=
|
|
||||||
typedef struct ph_usage_data {
|
|
||||||
struct imperative_defn *from;
|
|
||||||
struct wording full_preamble; /* e.g. to identify nameless rules in the log */
|
|
||||||
struct constant_phrase *constant_phrase_holder; /* for named To... phrases */
|
|
||||||
int to_begin; /* used in Basic mode only: this is to be the main phrase */
|
|
||||||
int timing_of_event; /* one of two values defined below; or a specific time */
|
|
||||||
struct use_as_event *uses_as_event;
|
|
||||||
struct wording explicit_name; /* if a named rule, this is its name */
|
|
||||||
int explicit_name_used_in_maths; /* if so, this flag means it's like |log()| or |sin()| */
|
|
||||||
struct wording explicit_name_for_inverse; /* e.g. |exp| for |log| */
|
|
||||||
struct wording whenwhile; /* when/while for action/activity rulebooks */
|
|
||||||
struct wording rule_preamble;
|
|
||||||
struct wording rule_parameter; /* text of object or action parameter */
|
|
||||||
#ifdef IF_MODULE
|
|
||||||
struct parse_node *during_scene_spec; /* what scene is currently under way */
|
|
||||||
#endif
|
|
||||||
struct wording event_name;
|
|
||||||
struct rulebook *owning_rulebook; /* the primary booking for the phrase will be here */
|
|
||||||
int owning_rulebook_placement; /* ...and with this placement value: see Rulebooks */
|
|
||||||
} ph_usage_data;
|
|
||||||
|
|
||||||
@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:
|
|
||||||
|
|
||||||
>> Instead of jumping: say "Don't."
|
|
||||||
|
|
||||||
then we need to call |Rules::obtain| to create a nameless |rule| structure
|
|
||||||
to be connected to it. But if the phrase has an explicit name:
|
|
||||||
|
|
||||||
>> Instead of swimming (this is the avoid water rule): say "Don't."
|
|
||||||
|
|
||||||
then we have a predeclared rule called "avoid water rule" already, so we
|
|
||||||
connect this existing one to the phrase.
|
|
||||||
|
|
||||||
=
|
|
||||||
rule *Phrases::Usage::to_rule(ph_usage_data *phud, imperative_defn *id) {
|
|
||||||
wording W = EMPTY_WORDING;
|
|
||||||
int explicitly = FALSE;
|
|
||||||
@<Find the name of the phrase, and whether or not it's explicitly given@>;
|
|
||||||
|
|
||||||
rule *R = NULL;
|
|
||||||
if (Wordings::nonempty(W)) R = Rules::by_name(W);
|
|
||||||
if (R) @<Check that this isn't duplicating the name of a rule already made@>
|
|
||||||
else R = Rules::obtain(W, explicitly);
|
|
||||||
if (Wordings::empty(W))
|
|
||||||
Hierarchy::markup_wording(R->compilation_data.rule_package, RULE_NAME_HMD, Node::get_text(id->at));
|
|
||||||
Rules::set_imperative_definition(R, id);
|
|
||||||
phrase *ph = id->defines;
|
|
||||||
package_request *P = RTRules::package(R);
|
|
||||||
ph->ph_iname = Hierarchy::make_localised_iname_in(RULE_FN_HL, P, ph->owning_module);
|
|
||||||
|
|
||||||
@<Do some tedious business for indexing the rule later on@>;
|
|
||||||
|
|
||||||
return R;
|
|
||||||
}
|
|
||||||
|
|
||||||
@<Find the name of the phrase, and whether or not it's explicitly given@> =
|
|
||||||
if (Wordings::nonempty(phud->event_name)) {
|
|
||||||
W = Articles::remove_the(phud->event_name);
|
|
||||||
} else if (Wordings::nonempty(phud->explicit_name)) {
|
|
||||||
W = Articles::remove_the(phud->explicit_name);
|
|
||||||
explicitly = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@<Check that this isn't duplicating the name of a rule already made@> =
|
|
||||||
imperative_defn *existing_id = Rules::get_imperative_definition(R);
|
|
||||||
if ((existing_id) && (existing_id != id)) {
|
|
||||||
Problems::quote_source(1, current_sentence);
|
|
||||||
Problems::quote_wording(2, W);
|
|
||||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_DuplicateRuleName));
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"You wrote %1, but this would give a name ('%2') to a "
|
|
||||||
"new rule which already belongs to an existing one.");
|
|
||||||
Problems::issue_problem_end();
|
|
||||||
}
|
|
||||||
|
|
||||||
@ This is simply to make the rule's entry in the Index more helpful.
|
|
||||||
|
|
||||||
@<Do some tedious business for indexing the rule later on@> =
|
|
||||||
wording IX = phud->rule_parameter;
|
|
||||||
if (Wordings::nonempty(phud->whenwhile)) {
|
|
||||||
if (Wordings::first_wn(phud->whenwhile) == Wordings::last_wn(phud->rule_parameter) + 1) {
|
|
||||||
IX = Wordings::new(Wordings::first_wn(phud->rule_parameter), Wordings::last_wn(phud->whenwhile));
|
|
||||||
} else {
|
|
||||||
IX = phud->whenwhile;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
IXRules::set_italicised_index_text(R, IX);
|
|
||||||
|
|
||||||
@h Parsing.
|
|
||||||
|
|
||||||
=
|
|
||||||
ph_usage_data Phrases::Usage::new(wording W, imperative_defn *id) {
|
|
||||||
ph_usage_data phud;
|
|
||||||
@<Empty the PHUD@>;
|
|
||||||
|
|
||||||
if (id->family == TO_PHRASE_EFF_family) { ToPhraseFamily::phud(id, &phud); return phud; }
|
|
||||||
if (id->family == RULE_EFF_family) { RuleFamily::phud(id, &phud); return phud; }
|
|
||||||
|
|
||||||
return phud;
|
|
||||||
}
|
|
||||||
|
|
||||||
@<Empty the PHUD@> =
|
|
||||||
phud.full_preamble = W;
|
|
||||||
phud.constant_phrase_holder = NULL;
|
|
||||||
phud.from = id;
|
|
||||||
phud.explicit_name = EMPTY_WORDING;
|
|
||||||
phud.explicit_name_used_in_maths = FALSE;
|
|
||||||
phud.rule_preamble = EMPTY_WORDING;
|
|
||||||
phud.rule_parameter = EMPTY_WORDING;
|
|
||||||
phud.whenwhile = EMPTY_WORDING;
|
|
||||||
phud.to_begin = FALSE;
|
|
||||||
#ifdef IF_MODULE
|
|
||||||
phud.during_scene_spec = NULL;
|
|
||||||
#endif
|
|
||||||
phud.event_name = EMPTY_WORDING;
|
|
||||||
phud.timing_of_event = NOT_A_TIMED_EVENT;
|
|
||||||
phud.uses_as_event = NULL;
|
|
||||||
phud.owning_rulebook = NULL;
|
|
||||||
phud.owning_rulebook_placement = MIDDLE_PLACEMENT;
|
|
||||||
phud.explicit_name_for_inverse = EMPTY_WORDING;
|
|
||||||
|
|
||||||
@h Extracting the stem.
|
|
||||||
A couple of routines to read but not really parse the stem and the bud.
|
|
||||||
|
|
||||||
=
|
|
||||||
wording Phrases::Usage::get_preamble_text(ph_usage_data *phud) {
|
|
||||||
if (phud->from->family == TO_PHRASE_EFF_family) return phud->rule_preamble;
|
|
||||||
return phud->full_preamble;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ For example, for the rule
|
|
||||||
|
|
||||||
>> Instead of taking the box while the skylight is open: ...
|
|
||||||
|
|
||||||
this returns "taking the box".
|
|
||||||
|
|
||||||
=
|
|
||||||
wording Phrases::Usage::get_prewhile_text(ph_usage_data *phud) {
|
|
||||||
if (Wordings::nonempty(phud->rule_parameter)) {
|
|
||||||
wording E = phud->rule_parameter;
|
|
||||||
if (<when-while-clause>(E)) E = GET_RW(<when-while-clause>, 1);
|
|
||||||
return E;
|
|
||||||
}
|
|
||||||
return EMPTY_WORDING;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ =
|
|
||||||
<when-while-clause> ::=
|
|
||||||
... when/while ...
|
|
||||||
|
|
||||||
@h Miscellaneous.
|
|
||||||
Some access routines.
|
|
||||||
|
|
||||||
=
|
|
||||||
int Phrases::Usage::get_rulebook_placement(ph_usage_data *phud) {
|
|
||||||
return phud->owning_rulebook_placement;
|
|
||||||
}
|
|
||||||
|
|
||||||
rulebook *Phrases::Usage::get_rulebook(ph_usage_data *phud) {
|
|
||||||
return phud->owning_rulebook;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Phrases::Usage::set_rulebook(ph_usage_data *phud, rulebook *rb) {
|
|
||||||
phud->owning_rulebook = rb;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int Phrases::Usage::get_timing_of_event(ph_usage_data *phud) {
|
|
||||||
return phud->timing_of_event;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Phrases::Usage::has_name_as_constant(ph_usage_data *phud) {
|
|
||||||
if ((phud->constant_phrase_holder) &&
|
|
||||||
(phud->explicit_name_used_in_maths == FALSE) &&
|
|
||||||
(Wordings::nonempty(Nouns::nominative_singular(phud->constant_phrase_holder->name)))) return TRUE;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
wording Phrases::Usage::get_equation_form(ph_usage_data *phud) {
|
|
||||||
if (phud->explicit_name_used_in_maths)
|
|
||||||
return Wordings::first_word(Nouns::nominative_singular(phud->constant_phrase_holder->name));
|
|
||||||
return EMPTY_WORDING;
|
|
||||||
}
|
|
||||||
|
|
||||||
phrase *Phrases::Usage::get_equation_inverse(ph_usage_data *phud) {
|
|
||||||
if (Wordings::nonempty(phud->explicit_name_for_inverse)) {
|
|
||||||
phrase *ph;
|
|
||||||
LOOP_OVER(ph, phrase) {
|
|
||||||
wording W = Phrases::Usage::get_equation_form(&(ph->usage_data));
|
|
||||||
if (Wordings::nonempty(W))
|
|
||||||
if (Wordings::match(W, phud->explicit_name_for_inverse))
|
|
||||||
return ph;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@h Logging and indexing.
|
|
||||||
The length and thoroughness of this may give some hint of how troublesome
|
|
||||||
it was to debug the preamble-parsing code:
|
|
||||||
|
|
||||||
=
|
|
||||||
void Phrases::Usage::log(ph_usage_data *phud) {
|
|
||||||
LOG("PHUD: <%W>: rule attachment mode %S\n", phud->full_preamble, phud->from->family->family_name);
|
|
||||||
if (phud->constant_phrase_holder)
|
|
||||||
LOG(" Constant name: <%W>\n", Nouns::nominative_singular(phud->constant_phrase_holder->name));
|
|
||||||
if (Wordings::nonempty(phud->explicit_name))
|
|
||||||
LOG(" Explicit name: <%W>\n", phud->explicit_name);
|
|
||||||
if (phud->explicit_name_used_in_maths)
|
|
||||||
LOG(" Used functionally in equations\n");
|
|
||||||
if (Wordings::nonempty(phud->rule_preamble))
|
|
||||||
LOG(" Rule preamble: <%W>\n", phud->rule_preamble);
|
|
||||||
if (Wordings::nonempty(phud->rule_parameter))
|
|
||||||
LOG(" Rule parameter: <%W>\n", phud->rule_parameter);
|
|
||||||
if (Wordings::nonempty(phud->whenwhile))
|
|
||||||
LOG(" When/while text: <%W>\n", phud->whenwhile);
|
|
||||||
if (Wordings::nonempty(phud->event_name))
|
|
||||||
LOG(" Event name: <%W>\n", phud->event_name);
|
|
||||||
if (phud->timing_of_event != NOT_A_TIMED_EVENT)
|
|
||||||
LOG(" Timed event: at %d\n", phud->timing_of_event);
|
|
||||||
#ifdef IF_MODULE
|
|
||||||
if (phud->during_scene_spec)
|
|
||||||
LOG(" During scene: <$P>\n", phud->during_scene_spec);
|
|
||||||
#endif
|
|
||||||
if (phud->owning_rulebook) {
|
|
||||||
char *place = "<UNKNOWN_NT>";
|
|
||||||
LOG(" Owned by rulebook: ");
|
|
||||||
Rulebooks::log_name_only(phud->owning_rulebook);
|
|
||||||
switch(phud->owning_rulebook_placement) {
|
|
||||||
case MIDDLE_PLACEMENT: place = "MIDDLE_PLACEMENT"; break;
|
|
||||||
case FIRST_PLACEMENT: place = "FIRST_PLACEMENT"; break;
|
|
||||||
case LAST_PLACEMENT: place = "LAST_PLACEMENT"; break;
|
|
||||||
}
|
|
||||||
LOG("\n Placement: %s\n", place);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Phrases::Usage::log_rule_name(ph_usage_data *phud) {
|
|
||||||
if (Wordings::empty(phud->explicit_name)) {
|
|
||||||
if (Wordings::nonempty(phud->full_preamble))
|
|
||||||
LOG("\"%W\"", phud->full_preamble);
|
|
||||||
else LOG("(nameless)");
|
|
||||||
} else LOG("(%W)", phud->explicit_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ In our compiled code, it's useful to label routines with I6 comments:
|
|
||||||
|
|
||||||
=
|
|
||||||
void Phrases::Usage::write_I6_comment_describing(ph_usage_data *phud) {
|
|
||||||
TEMPORARY_TEXT(C)
|
|
||||||
WRITE_TO(C, "%~W:", phud->full_preamble);
|
|
||||||
Produce::comment(Emit::tree(), C);
|
|
||||||
DISCARD_TEXT(C)
|
|
||||||
}
|
|
||||||
|
|
||||||
@ And similarly:
|
|
||||||
|
|
||||||
=
|
|
||||||
void Phrases::Usage::index_preamble(OUTPUT_STREAM, ph_usage_data *phud) {
|
|
||||||
WRITE("%+W", phud->full_preamble);
|
|
||||||
}
|
|
||||||
|
|
||||||
@h How the PHUD translates into a PHRCD.
|
|
||||||
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.
|
|
||||||
|
|
||||||
As will be seen, about six-sevenths of the code is given over to choosing good
|
|
||||||
problem messages when the PHUD is malformed -- these are some of the most
|
|
||||||
seen problems in Inform. A couple of variables are needed just for that:
|
|
||||||
|
|
||||||
=
|
|
||||||
int NAP_problem_explained = FALSE; /* pertains to Named Action Patterns */
|
|
||||||
int issuing_ANL_problem = FALSE; /* pertains to Action Name Lists */
|
|
||||||
|
|
||||||
@ =
|
|
||||||
ph_runtime_context_data Phrases::Usage::to_runtime_context_data(ph_usage_data *phud) {
|
|
||||||
ph_runtime_context_data phrcd = Phrases::Context::new();
|
|
||||||
|
|
||||||
if (RuleFamily::is(phud->from)) {
|
|
||||||
if (RuleFamily::not_in_rulebook(phud->from))
|
|
||||||
phrcd.permit_all_outcomes = TRUE;
|
|
||||||
else
|
|
||||||
@<Finish work parsing the conditions for the rule to fire@>;
|
|
||||||
}
|
|
||||||
return phrcd;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ All of this is just dumb copying...
|
|
||||||
|
|
||||||
@<Finish work parsing the conditions for the rule to fire@> =
|
|
||||||
phrcd.compile_for_rulebook = &(phud->owning_rulebook);
|
|
||||||
|
|
||||||
if (Wordings::nonempty(phud->rule_parameter)) @<Parse what used to be the bud into the PHRCD@>;
|
|
||||||
|
|
||||||
if (Wordings::nonempty(phud->whenwhile)) {
|
|
||||||
phrcd.activity_context =
|
|
||||||
Wordings::new(
|
|
||||||
Wordings::first_wn(phud->whenwhile) + 1,
|
|
||||||
Wordings::last_wn(phud->whenwhile));
|
|
||||||
phrcd.activity_where = current_sentence;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef IF_MODULE
|
|
||||||
if (phud->during_scene_spec) phrcd.during_scene = phud->during_scene_spec;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@ ...except for this:
|
|
||||||
|
|
||||||
@<Parse what used to be the bud into the PHRCD@> =
|
|
||||||
#ifdef IF_MODULE
|
|
||||||
if (Rulebooks::action_focus(phud->owning_rulebook)) {
|
|
||||||
int saved = ParseActionPatterns::enter_mode(PERMIT_TRYING_OMISSION);
|
|
||||||
if (Rules::all_action_processing_variables())
|
|
||||||
Frames::set_stvol(
|
|
||||||
Frames::current_stack_frame(), Rules::all_action_processing_variables());
|
|
||||||
if (<action-pattern>(phud->rule_parameter)) phrcd.ap = <<rp>>;
|
|
||||||
Frames::remove_nonphrase_stack_frame();
|
|
||||||
ParseActionPatterns::restore_mode(saved);
|
|
||||||
|
|
||||||
if (phrcd.ap == NULL)
|
|
||||||
@<Issue a problem message for a bad action@>;
|
|
||||||
} else {
|
|
||||||
kind *pk = Rulebooks::get_focus_kind(phud->owning_rulebook);
|
|
||||||
phrcd.ap = ActionPatterns::parse_parametric(phud->rule_parameter, pk);
|
|
||||||
if (phrcd.ap == NULL) {
|
|
||||||
if (Wordings::nonempty(phud->whenwhile)) {
|
|
||||||
wording F = Wordings::up_to(phud->rule_parameter, Wordings::last_wn(phud->whenwhile));
|
|
||||||
phrcd.ap = ActionPatterns::parse_parametric(F, pk);
|
|
||||||
if (phrcd.ap) {
|
|
||||||
phud->rule_parameter = F;
|
|
||||||
phud->whenwhile = EMPTY_WORDING;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (phrcd.ap == NULL) @<Issue a problem message for a bad parameter@>;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifndef IF_MODULE
|
|
||||||
kind *pk = Rulebooks::get_focus_kind(phud->owning_rulebook);
|
|
||||||
@<Issue a problem message for a bad parameter@>;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@ 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 -- which covers an enormous
|
|
||||||
range of different faults.
|
|
||||||
|
|
||||||
The "PAP failure reason" is a sort of error code set by the action pattern
|
|
||||||
parser, recording how it most recently failed.
|
|
||||||
|
|
||||||
@<Issue a problem message for a bad action@> =
|
|
||||||
Phrases::Usage::log(phud);
|
|
||||||
LOG("Bad action pattern: %W = $A\nPAP failure reason: %d\n",
|
|
||||||
phud->rule_parameter, phrcd.ap, pap_failure_reason);
|
|
||||||
Problems::quote_source(1, current_sentence);
|
|
||||||
Problems::quote_wording(2, phud->rule_parameter);
|
|
||||||
if (<action-problem-diagnosis>(phud->rule_parameter) == FALSE)
|
|
||||||
switch(pap_failure_reason) {
|
|
||||||
case MIXEDNOUNS_PAPF: @<Issue PM_APWithDisjunction problem@>; break;
|
|
||||||
case NOPARTICIPLE_PAPF: @<Issue PM_APWithNoParticiple problem@>; break;
|
|
||||||
case IMMISCIBLE_PAPF: @<Issue PM_APWithImmiscible problem@>; break;
|
|
||||||
case WHEN_PAPF: @<Issue PM_APWithBadWhen problem@>; break;
|
|
||||||
default: @<Issue PM_APUnknown problem@>; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
@<Issue PM_APWithDisjunction problem@> =
|
|
||||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_APWithDisjunction));
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"You wrote %1, which seems to introduce a rule, but the "
|
|
||||||
"circumstances ('%2') seem to be too general for me to "
|
|
||||||
"understand in a single rule. I can understand a choice of "
|
|
||||||
"of actions, in a list such as 'taking or dropping the ball', "
|
|
||||||
"but there can only be one set of noun(s) supplied. So 'taking "
|
|
||||||
"the ball or taking the bat' is disallowed. You can get around "
|
|
||||||
"this by using named actions ('Taking the ball is being "
|
|
||||||
"mischievous. Taking the bat is being mischievous. Instead of "
|
|
||||||
"being mischievous...'), or it may be less bother just to "
|
|
||||||
"write more than one rule.");
|
|
||||||
Problems::issue_problem_end();
|
|
||||||
|
|
||||||
@<Issue PM_APWithNoParticiple problem@> =
|
|
||||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_APWithNoParticiple));
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"You wrote %1, which seems to introduce a rule taking effect "
|
|
||||||
"only '%2'. But this does not look like an action, since "
|
|
||||||
"there is no sign of a participle ending '-ing' (as in "
|
|
||||||
"'taking the brick', say) - which makes me think I have "
|
|
||||||
"badly misunderstood what you intended.");
|
|
||||||
Problems::issue_problem_end();
|
|
||||||
|
|
||||||
@<Issue PM_APWithImmiscible problem@> =
|
|
||||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_APWithImmiscible));
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"You wrote %1, which seems to introduce a rule taking effect "
|
|
||||||
"only '%2'. But this is a combination of actions which cannot "
|
|
||||||
"be mixed. The only alternatives where 'or' is allowed are "
|
|
||||||
"cases where a choice of actions is given but applying to "
|
|
||||||
"the same objects in each case. (So 'taking or dropping the "
|
|
||||||
"CD' is allowed, but 'dropping the CD or inserting the CD "
|
|
||||||
"into the jewel box' is not, because the alternatives there "
|
|
||||||
"would make different use of objects from each other.)");
|
|
||||||
Problems::issue_problem_end();
|
|
||||||
|
|
||||||
@<Issue PM_APWithBadWhen problem@> =
|
|
||||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_APWithBadWhen));
|
|
||||||
wording Q = phud->rule_parameter;
|
|
||||||
int diagnosis = 0;
|
|
||||||
if (<action-when-diagnosis>(Q)) {
|
|
||||||
Q = Wordings::new(<<cw1>>, <<cw2>>);
|
|
||||||
diagnosis = <<r>>;
|
|
||||||
}
|
|
||||||
Problems::quote_wording(2, Q);
|
|
||||||
Problems::quote_text(3, "so I am unable to accept this rule.");
|
|
||||||
if (diagnosis == 2) {
|
|
||||||
Problems::quote_text(3,
|
|
||||||
"perhaps because 'nothing' tends not to be allowed in Inform conditions? "
|
|
||||||
"(Whereas 'no thing' is usually allowed.)");
|
|
||||||
}
|
|
||||||
if (diagnosis == 3) {
|
|
||||||
Problems::quote_text(3,
|
|
||||||
"perhaps because 'nowhere' tends not to be allowed in Inform conditions? "
|
|
||||||
"(Whereas 'no room' is usually allowed.)");
|
|
||||||
}
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"You wrote %1, which seems to introduce a rule taking effect "
|
|
||||||
"only '%2'. But this condition did not make sense, %3");
|
|
||||||
if (diagnosis == 1)
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"%PIt might be worth mentioning that a 'when' condition tacked on to "
|
|
||||||
"an action like this is not allowed to mention or use 'called' values.");
|
|
||||||
if (diagnosis == 4)
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"%PThe problem might be that 'and' has been followed by 'when' or "
|
|
||||||
"'while'. For example, to make a rule with two conditions, this is "
|
|
||||||
"okay: 'Instead of jumping when Peter is happy and Peter is in the "
|
|
||||||
"location'; but the same thing with '...and when Peter is...' is not allowed.");
|
|
||||||
Problems::issue_problem_end();
|
|
||||||
|
|
||||||
@<Issue PM_APUnknown problem@> =
|
|
||||||
Problems::quote_wording(2, phud->rule_parameter);
|
|
||||||
if (pap_failure_reason == WHENOKAY_PAPF)
|
|
||||||
Problems::quote_text(3,
|
|
||||||
"The part after 'when' (or 'while') was fine, but the earlier words");
|
|
||||||
else Problems::quote_text(3, "But that");
|
|
||||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_APUnknown));
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"You wrote %1, which seems to introduce a rule taking effect only if the "
|
|
||||||
"action is '%2'. %3 did not make sense as a description of an action.");
|
|
||||||
@<See if it starts with a valid action name, at least@>;
|
|
||||||
@<See if this might be a when-for confusion@>;
|
|
||||||
@<Break down the action list and say which are okay@>;
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
" I am unable to place this rule into any rulebook.");
|
|
||||||
Problems::issue_problem_end();
|
|
||||||
|
|
||||||
@<See if it starts with a valid action name, at least@> =
|
|
||||||
action_name *an;
|
|
||||||
LOOP_OVER(an, action_name)
|
|
||||||
if ((Wordings::length(phud->rule_parameter) < Wordings::length(ActionNameNames::tensed(an, IS_TENSE))) &&
|
|
||||||
(Wordings::match(phud->rule_parameter,
|
|
||||||
Wordings::truncate(ActionNameNames::tensed(an, IS_TENSE), Wordings::length(phud->rule_parameter))))) {
|
|
||||||
Problems::quote_wording(3, ActionNameNames::tensed(an, IS_TENSE));
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
" I notice that there's an action called '%3', though: perhaps "
|
|
||||||
"this is what you meant?");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
@<See if this might be a when-for confusion@> =
|
|
||||||
if (pap_failure_reason == WHENOKAY_PAPF) {
|
|
||||||
time_period *duration = Occurrence::parse(phud->rule_preamble);
|
|
||||||
if (duration) {
|
|
||||||
Problems::quote_wording(3, Occurrence::used_wording(duration));
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
" (I wonder if this might be because '%3', which looks like a "
|
|
||||||
"condition on the timing, is the wrong side of the 'when...' "
|
|
||||||
"clause?)");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ If the action pattern contains what looks like a list of action names, as
|
|
||||||
for example
|
|
||||||
|
|
||||||
>> Instead of taking or dropping the magnet: ...
|
|
||||||
|
|
||||||
then the anl-diagnosis grammar will parse this and return N equal to 2, the
|
|
||||||
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.
|
|
||||||
|
|
||||||
@<Break down the action list and say which are okay@> =
|
|
||||||
issuing_ANL_problem = FALSE; NAP_problem_explained = FALSE;
|
|
||||||
<anl-diagnosis>(phud->rule_parameter);
|
|
||||||
int N = <<r>>;
|
|
||||||
if (N > 1) {
|
|
||||||
int positive = TRUE;
|
|
||||||
ActionNameLists::parse(phud->rule_parameter, IS_TENSE, &positive);
|
|
||||||
if (positive == FALSE)
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
" This looks like a list of actions to avoid: ");
|
|
||||||
else
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
" Looking at this as a list of alternative actions: ");
|
|
||||||
issuing_ANL_problem = TRUE; NAP_problem_explained = FALSE;
|
|
||||||
<anl-diagnosis>(phud->rule_parameter);
|
|
||||||
Problems::issue_problem_segment(" so");
|
|
||||||
}
|
|
||||||
|
|
||||||
@ We have a much easier time if the rulebook was value-focused, so that
|
|
||||||
the only possible problem is that the value was wrong.
|
|
||||||
|
|
||||||
@<Issue a problem message for a bad parameter@> =
|
|
||||||
Phrases::Usage::log(phud);
|
|
||||||
Problems::quote_source(1, current_sentence);
|
|
||||||
Problems::quote_wording(2, phud->rule_parameter);
|
|
||||||
Problems::quote_kind(3, pk);
|
|
||||||
<parametric-problem-diagnosis>(phud->rule_preamble);
|
|
||||||
|
|
||||||
@ And that is the end of the code as such, but we still have to define the
|
|
||||||
three diagnosis grammars we needed.
|
|
||||||
|
|
||||||
@ 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.
|
|
||||||
|
|
||||||
=
|
|
||||||
<parametric-problem-diagnosis> ::=
|
|
||||||
when the play begins/ends | ==> @<Issue PM_WhenThePlay problem@>
|
|
||||||
... ==> @<Issue PM_BadParameter problem@>
|
|
||||||
|
|
||||||
@<Issue PM_WhenThePlay problem@> =
|
|
||||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_WhenThePlay),
|
|
||||||
"there's no scene called 'the play'",
|
|
||||||
"so I think you need to remove 'the' - Inform has two "
|
|
||||||
"special rulebooks, 'When play begins' and 'When play ends', "
|
|
||||||
"and I think you probably mean to refer to one of those.");
|
|
||||||
|
|
||||||
@<Issue PM_BadParameter problem@> =
|
|
||||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_BadParameter));
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"You wrote %1, but the description of the thing(s) to which the rule "
|
|
||||||
"applies ('%2') did not make sense. This is %3 based rulebook, so "
|
|
||||||
"that should have described %3.");
|
|
||||||
Problems::issue_problem_end();
|
|
||||||
|
|
||||||
@ And here we choose a problem message if a rule applying to an action is used,
|
|
||||||
but the action isn't one we recognise.
|
|
||||||
|
|
||||||
=
|
|
||||||
<action-problem-diagnosis> ::=
|
|
||||||
in the presence of ... | ==> @<Issue PM_NonActionInPresenceOf problem@>
|
|
||||||
in ... ==> @<Issue PM_NonActionIn problem@>
|
|
||||||
|
|
||||||
|
|
||||||
@<Issue PM_NonActionInPresenceOf problem@> =
|
|
||||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NonActionInPresenceOf));
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"You wrote %1, but 'in the presence of...' is a clause which can "
|
|
||||||
"only be used to talk about an action: so, for instance, 'waiting "
|
|
||||||
"in the presence of...' is needed. "
|
|
||||||
"This problem arises especially with 'every turn' rules, where "
|
|
||||||
"'every turn in the presence of...' looks plausible but doesn't "
|
|
||||||
"work. This could be fixed by writing 'Every turn doing something "
|
|
||||||
"in the presence of...', but a neater solution talks about the "
|
|
||||||
"current situation instead: 'Every turn when the player can "
|
|
||||||
"see...'.");
|
|
||||||
Problems::issue_problem_end();
|
|
||||||
|
|
||||||
@<Issue PM_NonActionIn problem@> =
|
|
||||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NonActionIn));
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"You wrote %1, but 'in...' used in this way should really belong "
|
|
||||||
"to an action: for instance, 'Before waiting in the Library'. "
|
|
||||||
"Rules like 'Every turn in the Library' don't work, because "
|
|
||||||
"'every turn' is not an action; what's wanted is 'Every turn "
|
|
||||||
"when in the Library'.");
|
|
||||||
Problems::issue_problem_end();
|
|
||||||
|
|
||||||
@ 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.
|
|
||||||
|
|
||||||
=
|
|
||||||
<action-when-diagnosis> ::=
|
|
||||||
... called ... {when/while ...} | ==> { 1, -, <<cw1>> = Wordings::first_wn(WR[3]), <<cw2>> = Wordings::last_wn(WR[3]) }
|
|
||||||
... {when/while *** nothing ***} | ==> { 2, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }
|
|
||||||
... {when/while *** nowhere ***} | ==> { 3, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }
|
|
||||||
... and {when/while ...} | ==> { 4, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }
|
|
||||||
... {when/while ...} ==> { 5, -, <<cw1>> = Wordings::first_wn(WR[2]), <<cw2>> = Wordings::last_wn(WR[2]) }
|
|
||||||
|
|
||||||
@ =
|
|
||||||
<anl-diagnosis> ::=
|
|
||||||
<anl-inner-diagnosis> when/while ... | ==> { pass 1 }
|
|
||||||
<anl-inner-diagnosis> ==> { pass 1 }
|
|
||||||
|
|
||||||
<anl-inner-diagnosis> ::=
|
|
||||||
<anl-entry-diagnosis> <anl-tail-diagnosis> | ==> { R[1] + R[2], - }
|
|
||||||
<anl-entry-diagnosis> ==> { pass 1 }
|
|
||||||
|
|
||||||
<anl-tail-diagnosis> ::=
|
|
||||||
, _or <anl-inner-diagnosis> | ==> { pass 1 }
|
|
||||||
_,/or <anl-inner-diagnosis> ==> { pass 1 }
|
|
||||||
|
|
||||||
<anl-entry-diagnosis> ::=
|
|
||||||
...... ==> @<Diagnose problem with this ANL entry@>
|
|
||||||
|
|
||||||
@<Diagnose problem with this ANL entry@> =
|
|
||||||
if ((issuing_ANL_problem) && (!preform_lookahead_mode)) {
|
|
||||||
Problems::quote_wording(4, W);
|
|
||||||
#ifdef IF_MODULE
|
|
||||||
if (<action-pattern>(W) == FALSE) {
|
|
||||||
Problems::issue_problem_segment("'%4' did not make sense; ");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
action_pattern *ap = <<rp>>;
|
|
||||||
int form = <<r>>;
|
|
||||||
if (APClauses::is_request(ap)) {
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"'%4' would make sense as an action on its own, but 'or' can't "
|
|
||||||
"be used in combination with 'asking... to try...' actions; ");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ActionPatterns::refers_to_past(ap)) {
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"'%4' would make sense as an action on its own, but 'or' can't "
|
|
||||||
"be used in combination with actions with time periods attached; ");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
if (<named-action-pattern>(W)) {
|
|
||||||
if (NAP_problem_explained == FALSE)
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"'%4' only made sense as a named kind of action, which can "
|
|
||||||
"be used on its own but not in an action list; ");
|
|
||||||
else
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"'%4' is another named kind of action; ");
|
|
||||||
NAP_problem_explained = TRUE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
if (form == ACTOR_EXP_PLAYER) {
|
|
||||||
Problems::issue_problem_segment(
|
|
||||||
"'%4' would have been okay except for using the word 'trying', "
|
|
||||||
"which isn't allowed in a list like this; ");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
Problems::issue_problem_segment("'%4' was okay; ");
|
|
||||||
}
|
|
||||||
==> { 1, - };
|
|
|
@ -73,10 +73,10 @@ kind *Phrases::Constants::kind(constant_phrase *cphr) {
|
||||||
phrase *Phrases::Constants::as_phrase(constant_phrase *cphr) {
|
phrase *Phrases::Constants::as_phrase(constant_phrase *cphr) {
|
||||||
if (cphr == NULL) internal_error("null cphr");
|
if (cphr == NULL) internal_error("null cphr");
|
||||||
if (cphr->phrase_meant == NULL) {
|
if (cphr->phrase_meant == NULL) {
|
||||||
phrase *ph;
|
imperative_defn *id;
|
||||||
LOOP_OVER(ph, phrase) {
|
LOOP_OVER(id, imperative_defn) {
|
||||||
if (ph->usage_data.constant_phrase_holder == cphr) {
|
if (ToPhraseFamily::constant_phrase(id) == cphr) {
|
||||||
cphr->phrase_meant = ph;
|
cphr->phrase_meant = id->defines;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,6 @@ typedef struct phrase {
|
||||||
struct package_request *requests_package;
|
struct package_request *requests_package;
|
||||||
|
|
||||||
struct ph_type_data type_data;
|
struct ph_type_data type_data;
|
||||||
struct ph_usage_data usage_data;
|
|
||||||
struct ph_runtime_context_data runtime_context_data;
|
struct ph_runtime_context_data runtime_context_data;
|
||||||
struct ph_stack_frame stack_frame;
|
struct ph_stack_frame stack_frame;
|
||||||
struct ph_options_data options_data;
|
struct ph_options_data options_data;
|
||||||
|
@ -83,7 +82,6 @@ void Phrases::create_from_preamble(imperative_defn *id) {
|
||||||
|
|
||||||
ph_options_data phod;
|
ph_options_data phod;
|
||||||
ph_type_data phtd;
|
ph_type_data phtd;
|
||||||
ph_usage_data phud;
|
|
||||||
ph_stack_frame phsf;
|
ph_stack_frame phsf;
|
||||||
ph_runtime_context_data phrcd;
|
ph_runtime_context_data phrcd;
|
||||||
|
|
||||||
|
@ -116,10 +114,10 @@ void Phrases::create_from_preamble(imperative_defn *id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@<Parse for the PHUD in fine mode@> =
|
@<Parse for the PHUD in fine mode@> =
|
||||||
phud = Phrases::Usage::new(Node::get_text(p), id);
|
;
|
||||||
|
|
||||||
@<Construct the PHTD, find the phrase options, find the documentation reference@> =
|
@<Construct the PHTD, find the phrase options, find the documentation reference@> =
|
||||||
wording XW = Phrases::Usage::get_preamble_text(&phud);
|
wording XW = ToPhraseFamily::get_prototype_text(id);
|
||||||
phtd = Phrases::TypeData::new();
|
phtd = Phrases::TypeData::new();
|
||||||
if (inline_wn >= 0) Phrases::TypeData::make_inline(&phtd);
|
if (inline_wn >= 0) Phrases::TypeData::make_inline(&phtd);
|
||||||
if (id->family == TO_PHRASE_EFF_family) {
|
if (id->family == TO_PHRASE_EFF_family) {
|
||||||
|
@ -157,8 +155,7 @@ inline definitions.
|
||||||
ImperativeDefinitions::new_phrase(id, new_ph);
|
ImperativeDefinitions::new_phrase(id, new_ph);
|
||||||
|
|
||||||
@<Create the phrase structure@> =
|
@<Create the phrase structure@> =
|
||||||
wording XW = Phrases::Usage::get_preamble_text(&phud);
|
LOGIF(PHRASE_CREATIONS, "Creating phrase: <%W>\n", id->log_text);
|
||||||
LOGIF(PHRASE_CREATIONS, "Creating phrase: <%W>\n$U", XW, &phud);
|
|
||||||
|
|
||||||
new_ph = CREATE(phrase);
|
new_ph = CREATE(phrase);
|
||||||
new_ph->from = id;
|
new_ph->from = id;
|
||||||
|
@ -167,7 +164,6 @@ inline definitions.
|
||||||
new_ph->runtime_context_data = phrcd;
|
new_ph->runtime_context_data = phrcd;
|
||||||
new_ph->stack_frame = phsf;
|
new_ph->stack_frame = phsf;
|
||||||
new_ph->type_data = phtd;
|
new_ph->type_data = phtd;
|
||||||
new_ph->usage_data = phud;
|
|
||||||
|
|
||||||
new_ph->inline_wn = inline_wn;
|
new_ph->inline_wn = inline_wn;
|
||||||
new_ph->inter_head_defn = NULL;
|
new_ph->inter_head_defn = NULL;
|
||||||
|
@ -251,7 +247,6 @@ That completes the process of creation. Here's how we log them:
|
||||||
void Phrases::log(phrase *ph) {
|
void Phrases::log(phrase *ph) {
|
||||||
if (ph == NULL) { LOG("RULE:NULL"); return; }
|
if (ph == NULL) { LOG("RULE:NULL"); return; }
|
||||||
LOG("%n", Phrases::iname(ph));
|
LOG("%n", Phrases::iname(ph));
|
||||||
Phrases::Usage::log_rule_name(&(ph->usage_data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Phrases::log_briefly(phrase *ph) {
|
void Phrases::log_briefly(phrase *ph) {
|
||||||
|
|
|
@ -31,7 +31,7 @@ void Phrases::Timed::TimedEventsTable(void) {
|
||||||
int when_count = 0;
|
int when_count = 0;
|
||||||
phrase *ph;
|
phrase *ph;
|
||||||
LOOP_OVER(ph, phrase) {
|
LOOP_OVER(ph, phrase) {
|
||||||
int t = Phrases::Usage::get_timing_of_event(&(ph->usage_data));
|
int t = RuleFamily::get_timing_of_event(ph->from);
|
||||||
if (t == NOT_A_TIMED_EVENT) continue;
|
if (t == NOT_A_TIMED_EVENT) continue;
|
||||||
if (t == NO_FIXED_TIME) when_count++;
|
if (t == NO_FIXED_TIME) when_count++;
|
||||||
else Emit::array_iname_entry(Phrases::iname(ph));
|
else Emit::array_iname_entry(Phrases::iname(ph));
|
||||||
|
@ -51,7 +51,7 @@ void Phrases::Timed::TimedEventTimesTable(void) {
|
||||||
int when_count = 0;
|
int when_count = 0;
|
||||||
phrase *ph;
|
phrase *ph;
|
||||||
LOOP_OVER(ph, phrase) {
|
LOOP_OVER(ph, phrase) {
|
||||||
int t = Phrases::Usage::get_timing_of_event(&(ph->usage_data));
|
int t = RuleFamily::get_timing_of_event(ph->from);
|
||||||
if (t == NOT_A_TIMED_EVENT) continue;
|
if (t == NOT_A_TIMED_EVENT) continue;
|
||||||
if (t == NO_FIXED_TIME) when_count++;
|
if (t == NO_FIXED_TIME) when_count++;
|
||||||
else Emit::array_numeric_entry((inter_ti) t);
|
else Emit::array_numeric_entry((inter_ti) t);
|
||||||
|
@ -69,17 +69,13 @@ void Phrases::Timed::TimedEventTimesTable(void) {
|
||||||
|
|
||||||
=
|
=
|
||||||
void Phrases::Timed::note_usage(phrase *ph, parse_node *at) {
|
void Phrases::Timed::note_usage(phrase *ph, parse_node *at) {
|
||||||
int t = Phrases::Usage::get_timing_of_event(&(ph->usage_data));
|
int t = RuleFamily::get_timing_of_event(ph->from);
|
||||||
if (t == NO_FIXED_TIME) {
|
if (t == NO_FIXED_TIME) {
|
||||||
use_as_event *uae = CREATE(use_as_event);
|
use_as_event *uae = CREATE(use_as_event);
|
||||||
uae->where_triggered = at;
|
uae->where_triggered = at;
|
||||||
uae->next = NULL;
|
uae->next = NULL;
|
||||||
use_as_event *prev = ph->usage_data.uses_as_event;
|
linked_list *L = RuleFamily::get_uses_as_event(ph->from);
|
||||||
if (prev == NULL) ph->usage_data.uses_as_event = uae;
|
if (L) ADD_TO_LINKED_LIST(uae, use_as_event, L);
|
||||||
else {
|
|
||||||
while ((prev) && (prev->next)) prev = prev->next;
|
|
||||||
prev->next = uae;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,8 +86,9 @@ arguably shouldn't block compilation. Then again...
|
||||||
void Phrases::Timed::check_for_unused(void) {
|
void Phrases::Timed::check_for_unused(void) {
|
||||||
phrase *ph;
|
phrase *ph;
|
||||||
LOOP_OVER(ph, phrase)
|
LOOP_OVER(ph, phrase)
|
||||||
if (Phrases::Usage::get_timing_of_event(&(ph->usage_data)) == NO_FIXED_TIME) {
|
if (RuleFamily::get_timing_of_event(ph->from) == NO_FIXED_TIME) {
|
||||||
if (ph->usage_data.uses_as_event == NULL) {
|
linked_list *L = RuleFamily::get_uses_as_event(ph->from);
|
||||||
|
if (LinkedLists::len(L) == 0) {
|
||||||
current_sentence = ph->from->at;
|
current_sentence = ph->from->at;
|
||||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_UnusedTimedEvent),
|
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_UnusedTimedEvent),
|
||||||
"this sets up a timed event which is never used",
|
"this sets up a timed event which is never used",
|
||||||
|
@ -117,7 +114,7 @@ void Phrases::Timed::index(OUTPUT_STREAM) {
|
||||||
@<Index events with no specific time@> =
|
@<Index events with no specific time@> =
|
||||||
phrase *ph;
|
phrase *ph;
|
||||||
LOOP_OVER(ph, phrase) {
|
LOOP_OVER(ph, phrase) {
|
||||||
int t = Phrases::Usage::get_timing_of_event(&(ph->usage_data));
|
int t = RuleFamily::get_timing_of_event(ph->from);
|
||||||
if (t == NO_FIXED_TIME) {
|
if (t == NO_FIXED_TIME) {
|
||||||
if (when_count == 0) {
|
if (when_count == 0) {
|
||||||
HTML_OPEN("p");
|
HTML_OPEN("p");
|
||||||
|
@ -126,13 +123,14 @@ void Phrases::Timed::index(OUTPUT_STREAM) {
|
||||||
}
|
}
|
||||||
when_count++;
|
when_count++;
|
||||||
HTML_OPEN_WITH("p", "class=\"tightin2\"");
|
HTML_OPEN_WITH("p", "class=\"tightin2\"");
|
||||||
Phrases::Usage::index_preamble(OUT, &(ph->usage_data));
|
ImperativeDefinitions::index_preamble(OUT, ph->from);
|
||||||
if ((ph->from->at) &&
|
if ((ph->from->at) &&
|
||||||
(Wordings::nonempty(Node::get_text(ph->from->at))))
|
(Wordings::nonempty(Node::get_text(ph->from->at))))
|
||||||
Index::link(OUT, Wordings::first_wn(Node::get_text(ph->from->at)));
|
Index::link(OUT, Wordings::first_wn(Node::get_text(ph->from->at)));
|
||||||
WRITE(" (where triggered: ");
|
WRITE(" (where triggered: ");
|
||||||
|
linked_list *L = RuleFamily::get_uses_as_event(ph->from);
|
||||||
use_as_event *uae;
|
use_as_event *uae;
|
||||||
for (uae = ph->usage_data.uses_as_event; uae; uae=uae->next)
|
LOOP_OVER_LINKED_LIST(uae, use_as_event, L)
|
||||||
Index::link(OUT, Wordings::first_wn(Node::get_text(uae->where_triggered)));
|
Index::link(OUT, Wordings::first_wn(Node::get_text(uae->where_triggered)));
|
||||||
WRITE(")");
|
WRITE(")");
|
||||||
HTML_CLOSE("p");
|
HTML_CLOSE("p");
|
||||||
|
@ -142,7 +140,7 @@ void Phrases::Timed::index(OUTPUT_STREAM) {
|
||||||
@<Index timetabled events@> =
|
@<Index timetabled events@> =
|
||||||
phrase *ph;
|
phrase *ph;
|
||||||
LOOP_OVER(ph, phrase) {
|
LOOP_OVER(ph, phrase) {
|
||||||
int t = Phrases::Usage::get_timing_of_event(&(ph->usage_data));
|
int t = RuleFamily::get_timing_of_event(ph->from);
|
||||||
if (t >= 0) { /* i.e., an actual time of day in minutes since midnight */
|
if (t >= 0) { /* i.e., an actual time of day in minutes since midnight */
|
||||||
if (tt_count == 0) {
|
if (tt_count == 0) {
|
||||||
HTML_OPEN("p");
|
HTML_OPEN("p");
|
||||||
|
@ -151,7 +149,7 @@ void Phrases::Timed::index(OUTPUT_STREAM) {
|
||||||
}
|
}
|
||||||
tt_count++;
|
tt_count++;
|
||||||
HTML_OPEN_WITH("p", "class=\"in2\"");
|
HTML_OPEN_WITH("p", "class=\"in2\"");
|
||||||
Phrases::Usage::index_preamble(OUT, &(ph->usage_data));
|
ImperativeDefinitions::index_preamble(OUT, ph->from);
|
||||||
if ((ph->from->at) &&
|
if ((ph->from->at) &&
|
||||||
(Wordings::nonempty(Node::get_text(ph->from->at))))
|
(Wordings::nonempty(Node::get_text(ph->from->at))))
|
||||||
Index::link(OUT, Wordings::first_wn(Node::get_text(ph->from->at)));
|
Index::link(OUT, Wordings::first_wn(Node::get_text(ph->from->at)));
|
||||||
|
|
|
@ -49,7 +49,7 @@ void Routines::Compile::routine(phrase *ph,
|
||||||
|
|
||||||
@<Compile some commentary about the routine to follow@> =
|
@<Compile some commentary about the routine to follow@> =
|
||||||
Routines::ToPhrases::comment_on_request(req);
|
Routines::ToPhrases::comment_on_request(req);
|
||||||
Phrases::Usage::write_I6_comment_describing(&(ph->usage_data));
|
ImperativeDefinitions::write_comment_describing(ph->from);
|
||||||
|
|
||||||
@<Set up the stack frame for this compilation request@> =
|
@<Set up the stack frame for this compilation request@> =
|
||||||
ph_stack_frame *phsf = &(ph->stack_frame);
|
ph_stack_frame *phsf = &(ph->stack_frame);
|
||||||
|
|
|
@ -27,7 +27,6 @@ premisses worked out, and are then collected together into rulebooks, before
|
||||||
being compiled as a great mass of Inform 6 routines and arrays."
|
being compiled as a great mass of Inform 6 routines and arrays."
|
||||||
Introduction to Phrases
|
Introduction to Phrases
|
||||||
Phrases
|
Phrases
|
||||||
Phrase Usage
|
|
||||||
Phrase Runtime Context Data
|
Phrase Runtime Context Data
|
||||||
Phrase Type Data
|
Phrase Type Data
|
||||||
Describing Phrase Type Data
|
Describing Phrase Type Data
|
||||||
|
|
|
@ -326,7 +326,7 @@ void RTRules::compile_comment(rule *R, int index, int from) {
|
||||||
Produce::comment(Emit::tree(), C);
|
Produce::comment(Emit::tree(), C);
|
||||||
DISCARD_TEXT(C)
|
DISCARD_TEXT(C)
|
||||||
if (R->defn_as_I7_source) {
|
if (R->defn_as_I7_source) {
|
||||||
Phrases::Usage::write_I6_comment_describing(&(R->defn_as_I7_source->defines->usage_data));
|
ImperativeDefinitions::write_comment_describing(R->defn_as_I7_source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue