mirror of
https://github.com/ganelson/inform.git
synced 2024-06-01 07:48:35 +03:00
Refactored noun representation in linguistics module
This commit is contained in:
parent
822b38d314
commit
5c8469dab8
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
v10.1.0-alpha.1+6Q61 'Krypton' (27 June 2020)
|
||||
v10.1.0-alpha.1+6Q62 'Krypton' (29 June 2020)
|
||||
|
||||
## About Inform 7
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: alpha.1
|
||||
Build Date: 27 June 2020
|
||||
Build Number: 6Q61
|
||||
Build Date: 29 June 2020
|
||||
Build Number: 6Q62
|
||||
|
|
|
@ -287,7 +287,7 @@ or other text streams.
|
|||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="identifier-syntax">extension_dictionary_entry</span><span class="plain-syntax"> *, </span><span class="identifier-syntax">ExtensionDictionary::log_entry</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *, </span><a href="25-in.html#SP30" class="function-link"><span class="function-syntax">Invocations::log_list</span></a><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *, </span><a href="25-in.html#SP10" class="function-link"><span class="function-syntax">Invocations::log</span></a><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *, </span><a href="7-hdn.html#SP13" class="function-link"><span class="function-syntax">Sentences::Headings::log</span></a><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *, </span><a href="7-hdn.html#SP14" class="function-link"><span class="function-syntax">Sentences::Headings::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="22-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">inference</span><span class="plain-syntax"> *, </span><a href="16-in.html#SP22" class="function-link"><span class="function-syntax">World::Inferences::log</span></a><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *, </span><a href="12-is.html#SP10" class="function-link"><span class="function-syntax">Calculus::Schemas::log</span></a><span class="plain-syntax">)</span>
|
||||
|
@ -469,7 +469,7 @@ we need to use the equivalent of traditional <span class="extract"><span class="
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'d'</span><span class="plain-syntax">, </span><span class="identifier-syntax">ExtensionDictionary::log_entry</span><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">'E'</span><span class="plain-syntax">, </span><a href="25-in.html#SP30" class="function-link"><span class="function-syntax">Invocations::log_list</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">'e'</span><span class="plain-syntax">, </span><a href="25-in.html#SP10" class="function-link"><span class="function-syntax">Invocations::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="7-hdn.html#SP13" class="function-link"><span class="function-syntax">Sentences::Headings::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="7-hdn.html#SP14" class="function-link"><span class="function-syntax">Sentences::Headings::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="22-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">'I'</span><span class="plain-syntax">, </span><a href="16-in.html#SP22" class="function-link"><span class="function-syntax">World::Inferences::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">'i'</span><span class="plain-syntax">, </span><a href="12-is.html#SP10" class="function-link"><span class="function-syntax">Calculus::Schemas::log</span></a><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -212,7 +212,7 @@ most of these worker functions are in the <span class="extract"><span class="ext
|
|||
<span class="plain-syntax"> </span><a href="1-wtc.html#SP4" class="function-link"><span class="function-syntax">Task::advance_stage_to</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SEMANTIC_II_CSEQ</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Semantic analysis II"</span><span class="plain-syntax">, -1);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="7-ptu.html#SP15" class="function-link"><span class="function-syntax">ParseTreeUsage::verify</span></a><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="7-hdn.html#SP8" class="function-link"><span class="function-syntax">Sentences::Headings::make_the_tree</span></a><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="7-hdn.html#SP16" class="function-link"><span class="function-syntax">Sentences::Headings::write_as_xml</span></a><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="7-hdn.html#SP17" class="function-link"><span class="function-syntax">Sentences::Headings::write_as_xml</span></a><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="27-cm.html#SP2" class="function-link"><span class="function-syntax">Modules::traverse_to_define</span></a><span class="plain-syntax">)</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="1-wtc.html#SP4" class="function-link"><span class="function-syntax">Task::advance_stage_to</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SEMANTIC_III_CSEQ</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Semantic analysis III"</span><span class="plain-syntax">, -1);</span>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -500,10 +500,10 @@ is just a little faster written as an internal like this.
|
|||
<span class="Preform-function-syntax"><s-instance-name></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">parse_node</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lexicon::retrieve</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">NOUN_MC</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">) {</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">noun</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Nouns::disambiguate</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">MAX_NOUN_PRIORITY</span><span class="Preform-plain-syntax">);</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> ((</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax">) && (</span><span class="Preform-identifier-syntax">Nouns::priority</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax">) == </span><span class="Preform-identifier-syntax">LOW_NOUN_PRIORITY</span><span class="Preform-plain-syntax">)) {</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">noun</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Nouns::disambiguate</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">);</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">Nouns::is_proper</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax">)) {</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">instance</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">I</span><span class="Preform-plain-syntax"> = </span><a href="14-rv.html#SP4" class="function-link"><span class="Preform-function-syntax">Rvalues::to_object_instance</span></a><span class="Preform-plain-syntax">(</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">RETRIEVE_POINTER_parse_node</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Nouns::tag_holder</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax">)));</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">RETRIEVE_POINTER_parse_node</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Nouns::meaning</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax">)));</span>
|
||||
<span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">XP</span><span class="Preform-plain-syntax"> = </span><a href="14-rv.html#SP3" class="function-link"><span class="Preform-function-syntax">Rvalues::from_instance</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">I</span><span class="Preform-plain-syntax">); </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
|
||||
<span class="Preform-plain-syntax"> }</span>
|
||||
<span class="Preform-plain-syntax"> }</span>
|
||||
|
|
|
@ -104,8 +104,7 @@ since (alone among binary predicates) it has no distinct reversal.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><relation-name-formal></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">PreformUtilities::wording</span><span class="plain-syntax">(</span><span class="function-syntax"><relation-names></span><span class="plain-syntax">, </span><span class="constant-syntax">EQUALITY_RELATION_NAME</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">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_binary_predicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R_equality</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
||||
|
|
|
@ -115,9 +115,7 @@ kinds being compiled to an I6 <span class="extract"><span class="extract-syntax"
|
|||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::RunTime::I6_classnumber</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">Kinds::RunTime::I6_classnumber</span></span>:<br/><a href="13-rsfk.html#SP23">§23</a><br/>Instance Counting - <a href="16-ic.html#SP6">§6</a>, <a href="16-ic.html#SP10">§10</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="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::Behaviour::get_noun</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</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="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::range_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</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">Kinds::Behaviour::get_range_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. Default values. </b>When we create a new variable (or other storage object) of a given kind, but
|
||||
|
|
|
@ -363,15 +363,13 @@ name in both forms. The following grammar is used to construct this prefix.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">PROPERTY_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><property-name-construction></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">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">PROPERTY_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">));</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="15-pr.html#SP5">§5</a>.</li></ul>
|
||||
|
|
|
@ -574,8 +574,7 @@ number only, that must. Suppose that "Table 2 - Trees" already exists. Then:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><table-names-construction></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">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">table_no_text</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">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">TABLE_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_table</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">table_name_text</span><span class="plain-syntax">)) {</span>
|
||||
|
@ -584,8 +583,7 @@ number only, that must. Suppose that "Table 2 - Trees" already exists. Then:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><table-names-construction></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">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">table_name_text</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">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">TABLE_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_table</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
|
@ -752,11 +750,11 @@ the other table at all. The result will be:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">TABLES</span><span class="plain-syntax">, </span><span class="string-syntax">"Column correspondence table:\n old->new: "</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">j</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">j</span><span class="function-syntax"><old_t-></span><span class="element-syntax">no_columns</span><span class="plain-syntax">; </span><span class="identifier-syntax">j</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">TABLES</span><span class="plain-syntax">, </span><span class="string-syntax">"%d (%W) "</span><span class="plain-syntax">, </span><span class="identifier-syntax">old_to_new</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">],</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">old_t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">old_t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">TABLES</span><span class="plain-syntax">, </span><span class="string-syntax">"\n new->old: "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax"><t-></span><span class="element-syntax">no_columns</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">TABLES</span><span class="plain-syntax">, </span><span class="string-syntax">"%d (%W) "</span><span class="plain-syntax">, </span><span class="identifier-syntax">new_to_old</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">],</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">TABLES</span><span class="plain-syntax">, </span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="19-tb.html#SP20_10">§20.10</a>.</li></ul>
|
||||
|
@ -966,7 +964,7 @@ columns and in the same order.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</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">j</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">j</span><span class="function-syntax"><old_t-></span><span class="element-syntax">no_columns</span><span class="plain-syntax">; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">j</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</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_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">old_t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">TEMP</span><span class="plain-syntax">, </span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">old_t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</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">TEMP</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">Problems::issue_problem_segment_from_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">);</span>
|
||||
|
@ -979,7 +977,7 @@ columns and in the same order.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax"><t-></span><span class="element-syntax">no_columns</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</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_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">TEMP</span><span class="plain-syntax">, </span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</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">TEMP</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">Problems::issue_problem_segment_from_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">);</span>
|
||||
|
@ -1125,7 +1123,7 @@ us issue more contextual problem messages.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax"> = </span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax"> i.e., counting from 1</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(4, &</span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(5,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(6, &</span><span class="identifier-syntax">table_cell_row</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-si.html#SP3" class="function-link"><span class="function-syntax">StandardProblems::table_problem</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_NonconstantActionInTable</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">table_cell_node</span><span class="plain-syntax">,</span>
|
||||
|
@ -1154,7 +1152,7 @@ people — it needs to be "yourself" instead, since "player" is a variable.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax"> = </span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax"> i.e., counting from 1</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(4, &</span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(5,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(6, &</span><span class="identifier-syntax">table_cell_row</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-sq.html#SP2" class="function-link"><span class="function-syntax">Problems::quote_subject</span></a><span class="plain-syntax">(7, </span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-si.html#SP3" class="function-link"><span class="function-syntax">StandardProblems::table_problem</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TablePlayerEntry</span><span class="plain-syntax">),</span>
|
||||
|
@ -1167,7 +1165,7 @@ people — it needs to be "yourself" instead, since "player" is a variable.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax"> = </span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax"> i.e., counting from 1</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(4, &</span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(5,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(6, &</span><span class="identifier-syntax">table_cell_row</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-si.html#SP3" class="function-link"><span class="function-syntax">StandardProblems::table_problem</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TableVariableEntry</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">table_cell_node</span><span class="plain-syntax">,</span>
|
||||
|
@ -1194,7 +1192,7 @@ people — it needs to be "yourself" instead, since "player" is a variable.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax"> = </span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax"> i.e., counting from 1</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(4, &</span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(5,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(6, &</span><span class="identifier-syntax">table_cell_row</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-si.html#SP3" class="function-link"><span class="function-syntax">StandardProblems::table_problem</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TableUnknownEntry</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">table_cell_node</span><span class="plain-syntax">,</span>
|
||||
|
@ -1273,7 +1271,7 @@ people — it needs to be "yourself" instead, since "player" is a variable.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax"> = </span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax"> i.e., counting from 1</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(4, &</span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(5,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">table_being_examined</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">table_cell_col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(6, &</span><span class="identifier-syntax">table_cell_row</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-si.html#SP3" class="function-link"><span class="function-syntax">StandardProblems::table_problem</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TableDescriptionEntry</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">cell</span><span class="plain-syntax">,</span>
|
||||
|
@ -1548,7 +1546,7 @@ time to find a clear wording for:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(1, &</span><span class="identifier-syntax">amend_row</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(2, &</span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">amend_cell</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">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">main_table</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">main_table</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-sq.html#SP2" class="function-link"><span class="function-syntax">Problems::quote_table</span></a><span class="plain-syntax">(5, </span><span class="identifier-syntax">main_table</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(6, &</span><span class="identifier-syntax">matches_in_last_round</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">matches_in_last_round</span><span class="plain-syntax"> > </span><span class="constant-syntax">2</span><span class="plain-syntax">) </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(7, </span><span class="string-syntax">"any"</span><span class="plain-syntax">);</span>
|
||||
|
@ -1695,7 +1693,7 @@ Helvetica-style lower case "x", but life is full of compromises.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">col</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">col</span><span class="plain-syntax"> < </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">no_columns</span><span class="plain-syntax">; </span><span class="identifier-syntax">col</span><span class="plain-syntax">++) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::first_html_column</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&nbsp;&nbsp;col %d:&nbsp;&nbsp;"</span><span class="plain-syntax">, </span><span class="identifier-syntax">col</span><span class="plain-syntax">+1);</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">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">col</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">first_column_by_definition</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">col</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PN</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">where_used_to_define</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">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">PN</span><span class="plain-syntax">));</span>
|
||||
|
|
|
@ -138,15 +138,13 @@ of any existing column.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">tc</span><span class="plain-syntax">-></span><span class="element-syntax">table_from_which_kind_inferred</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">tc</span><span class="plain-syntax">-></span><span class="element-syntax">listed_in_predicate</span><span class="plain-syntax"> = </span><a href="19-lr.html#SP2" class="function-link"><span class="function-syntax">Tables::Relations::make_listed_in_predicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tc</span><span 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="comment-syntax"> as always happens except when recovering from a problem</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tc</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tc</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">TABLE_COLUMN_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_table_column</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tc</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><table-column-name-construction></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">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">TABLE_COLUMN_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_table_column</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tc</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">tc</span><span class="plain-syntax">;</span>
|
||||
|
@ -156,7 +154,7 @@ of any existing column.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Tables::Columns::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">Tables::Columns::log</span></span>:<br/>Core Module - <a href="1-cm.html#SP5">§5</a>, <a href="1-cm.html#SP6_6">§6.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">table_column</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tc</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"'%W'/"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">tc</span><span class="plain-syntax">-></span><span class="element-syntax">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">"'%W'/"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">tc</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">tc</span><span class="plain-syntax">-></span><span class="element-syntax">kind_stored_in_column</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">"unknown"</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">"$u"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tc</span><span class="plain-syntax">-></span><span class="element-syntax">kind_stored_in_column</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -615,7 +613,7 @@ their kind is ostensibly <span class="extract"><span class="extract-syntax">K_un
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax"> = </span><span class="identifier-syntax">i</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax"> i.e., counting from 1</span>
|
||||
<span class="plain-syntax"> </span><a href="2-sq.html#SP2" class="function-link"><span class="function-syntax">Problems::quote_table</span></a><span class="plain-syntax">(6, </span><span class="identifier-syntax">tcu</span><span class="plain-syntax">-></span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">table_from_which_kind_inferred</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(7, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">tcu</span><span class="plain-syntax">-></span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(7, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">tcu</span><span class="plain-syntax">-></span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(8, &</span><span class="identifier-syntax">quoted_col</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(9, &</span><span class="identifier-syntax">table_cell_row</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-si.html#SP3" class="function-link"><span class="function-syntax">StandardProblems::table_problem</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TableIncompatibleEntry2</span><span class="plain-syntax">),</span>
|
||||
|
@ -637,7 +635,7 @@ happens:
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><a href="2-sq.html#SP2" class="function-link"><span class="function-syntax">Problems::quote_table</span></a><span class="plain-syntax">(6, </span><span class="identifier-syntax">tcu</span><span class="plain-syntax">-></span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">table_from_which_kind_inferred</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(7, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">tcu</span><span class="plain-syntax">-></span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(7, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">tcu</span><span class="plain-syntax">-></span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-sq.html#SP3" class="function-link"><span class="function-syntax">Problems::quote_kind</span></a><span class="plain-syntax">(4, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-sq.html#SP3" class="function-link"><span class="function-syntax">Problems::quote_kind</span></a><span class="plain-syntax">(5, </span><span class="identifier-syntax">CK</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-si.html#SP3" class="function-link"><span class="function-syntax">StandardProblems::table_problem</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TableColumnIncompatible</span><span class="plain-syntax">),</span>
|
||||
|
@ -656,7 +654,7 @@ happens:
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Tables::Columns::approve_kind</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">Tables::Columns::approve_kind</span></span>:<br/>Tables - <a href="19-tb.html#SP22">§22</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">table</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="reserved-syntax">table_column_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tcu</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">K</span><span class="plain-syntax"> = </span><a href="19-tc.html#SP6" class="function-link"><span class="function-syntax">Tables::Columns::get_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tcu</span><span class="plain-syntax">-></span><span class="element-syntax">column_identity</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">TABLES</span><span class="plain-syntax">, </span><span class="string-syntax">"Column %d '%W' has kind $u with data:\n$T"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">tcu</span><span class="plain-syntax">-></span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">), </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">tcu</span><span class="plain-syntax">-></span><span class="element-syntax">entries</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">tcu</span><span class="plain-syntax">-></span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">), </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">tcu</span><span class="plain-syntax">-></span><span class="element-syntax">entries</span><span 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::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_list_of</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Compare::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">Kinds::unary_construction_material</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-si.html#SP3" class="function-link"><span class="function-syntax">StandardProblems::table_problem</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TableColumnEmptyLists</span><span class="plain-syntax">),</span>
|
||||
|
|
|
@ -520,8 +520,8 @@ table-stocking the column will have a kind for its entries.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><unfortunate-table-column-property>(Nouns::nominative(t->columns[i].column_identity-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="15-vp.html#SP1" class="function-link"><span class="function-syntax">Properties::Valued::obtain</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><unfortunate-table-column-property>(Nouns::nominative_singular(t->columns[i].column_identity-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="15-vp.html#SP1" class="function-link"><span class="function-syntax">Properties::Valued::obtain</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</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><a href="15-vp.html#SP5" class="function-link"><span class="function-syntax">Properties::Valued::kind</span></a><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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CK</span><span class="plain-syntax"> = </span><a href="19-tc.html#SP6" class="function-link"><span class="function-syntax">Tables::Columns::get_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">columns</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">column_identity</span><span 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::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">CK</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_rule</span><span class="plain-syntax">) ||</span>
|
||||
|
|
|
@ -139,7 +139,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">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">headline_fragment</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="2-sq.html#SP2" class="function-link"><span class="function-syntax">Problems::quote_table</span></a><span class="plain-syntax">(1, </span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tc</span><span class="plain-syntax">) </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">tc</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">tc</span><span class="plain-syntax">) </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">tc</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">data</span><span class="plain-syntax">) </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">data</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#SP5" 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="identifier-syntax">message</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -349,8 +349,7 @@ We know that this begins with the word "equation", or we wouldn't be here
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><equation-names-construction></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">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">NO</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">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">EQUATION_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_equation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">eqn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
|
@ -365,15 +364,13 @@ We know that this begins with the word "equation", or we wouldn't be here
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"because Inform would read '2 + 2' as arithmetic, not a name."</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="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">NA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">NA</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">EQUATION_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_equation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">eqn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><equation-names-construction></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">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">NA</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">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">EQUATION_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_equation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">eqn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -279,15 +279,13 @@ noun for it; for example, the "announcing activity".
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"this already has a meaning"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"and so cannot be the name of a newly created activity."</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">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">ACTIVITY_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_activity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><activity-name-construction></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">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">ACTIVITY_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_activity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">av</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
|
|
|
@ -339,8 +339,7 @@ can be used in a void context as a sort of return-from-rule phrase.
|
|||
<span class="plain-syntax"> </span><a href="27-hr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::markup_wording</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="constant-syntax">OUTCOME_NAME_HMD</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">named_rulebook_outcome</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rbno</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</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="identifier-syntax">rbno</span><span class="plain-syntax">-></span><span class="identifier-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rbno</span><span class="plain-syntax">-></span><span class="identifier-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_named_rulebook_outcome</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rbno</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rbno</span><span class="plain-syntax">-></span><span class="identifier-syntax">nro_iname</span><span class="plain-syntax"> = </span><a href="27-hr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::make_iname_with_memo</span></a><span class="plain-syntax">(</span><span class="constant-syntax">OUTCOME_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</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"><notable-rulebook-outcomes></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) {</span>
|
||||
|
@ -504,7 +503,7 @@ can be used in a void context as a sort of return-from-rule phrase.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::open_indented_p</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="string-syntax">"hanging"</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>outcome</i>&nbsp;&nbsp;"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">outs</span><span class="plain-syntax">-></span><span class="element-syntax">default_named_outcome</span><span class="plain-syntax"> == </span><span class="identifier-syntax">ro</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"<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">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">rbno</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">rbno</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">outs</span><span class="plain-syntax">-></span><span class="element-syntax">default_named_outcome</span><span class="plain-syntax"> == </span><span class="identifier-syntax">ro</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"</b> (default)"</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="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">ro</span><span class="plain-syntax">-></span><span class="element-syntax">kind_of_outcome</span><span class="plain-syntax">) {</span>
|
||||
|
@ -533,7 +532,7 @@ can be used in a void context as a sort of return-from-rule phrase.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">named_rulebook_outcome</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rbno</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">rbno</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="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">RV</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">RV</span><span class="plain-syntax">, </span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">rbno</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">RV</span><span class="plain-syntax">, </span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">rbno</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="27-em.html#SP3" class="function-link"><span class="function-syntax">Emit::named_string_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rbno</span><span class="plain-syntax">-></span><span class="element-syntax">nro_iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">RV</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">RV</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
|
|
@ -243,8 +243,7 @@ slightly differently. (Not all rule names do: those for timed events do not.)
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<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="constant-syntax">RULE_MC</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"><rule-name-formal></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">mc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">mc</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_rule</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R</span><span class="plain-syntax">));</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="21-rl.html#SP5">§5</a>.</li></ul>
|
||||
|
|
|
@ -349,21 +349,18 @@ built (for instance, scene endings).
|
|||
<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="identifier-syntax">built_in_rulebooks</span><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="identifier-syntax">all_action_processing_vars</span><span class="plain-syntax"> = </span><a href="21-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">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">rb</span><span class="plain-syntax">-></span><span class="element-syntax">owned_by_rb</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">rb</span><span class="plain-syntax">-></span><span class="element-syntax">primary_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">rb</span><span class="plain-syntax">-></span><span class="element-syntax">primary_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">RULEBOOK_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_rulebook</span></a><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">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><rulebook-name-construction></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">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">rb</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">RULEBOOK_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_rulebook</span></a><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">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><rulebook-name-construction></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">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">rb</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">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">RULEBOOK_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_rulebook</span></a><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">rb</span><span class="plain-syntax">;</span>
|
||||
|
@ -399,8 +396,7 @@ built (for instance, scene endings).
|
|||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Rulebooks::set_alt_name</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="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">rb</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AW</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">RULEBOOK_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_rulebook</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rb</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
|
|
@ -406,7 +406,7 @@ of course.
|
|||
|
||||
<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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::nominative</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="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="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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"<b>Name:</b> "</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -101,8 +101,7 @@ own right, a functional-programming sort of device. For example:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="identifier-syntax">phrase_meant</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> we won't know until later</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="identifier-syntax">cphr_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> nor this</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="identifier-syntax">associated_preamble_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RW</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="identifier-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="identifier-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">PHRASE_CONSTANT_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_constant_phrase</span></a><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="identifier-syntax">cphr_iname</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">cphr</span><span class="plain-syntax">;</span>
|
||||
|
@ -222,7 +221,7 @@ case the phrase occurs as a constant but is never explicitly invoked.
|
|||
<span class="plain-syntax"> </span><a href="27-em.html#SP3" class="function-link"><span class="function-syntax">Emit::array_iname_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">RS</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">name</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">name</span><span class="plain-syntax">, </span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">name</span><span class="plain-syntax">, </span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="27-em.html#SP3" class="function-link"><span class="function-syntax">Emit::array_text_entry</span></a><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">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">)</span>
|
||||
|
||||
|
|
|
@ -452,8 +452,8 @@ mode, we can get that value back again if we look it up by name.
|
|||
<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">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">cphr_kind</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">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax"> = </span><a href="22-pav.html#SP6" class="function-link"><span class="function-syntax">Phrases::Constants::as_phrase</span></a><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">ph</span><span class="plain-syntax">) </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><a href="22-ph.html#SP11" class="function-link"><span class="function-syntax">Phrases::declaration_node</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">NounPhrases::new_raw</span><span class="plain-syntax">(</span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">NounPhrases::new_raw</span><span class="plain-syntax">(</span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">cphr</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_NamedGeneric</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 can't allow %1, because the phrase it gives a name to "</span>
|
||||
|
@ -724,13 +724,13 @@ of the stem, so we have to be very careful:
|
|||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Usage::has_name_as_constant</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Phrases::Usage::has_name_as_constant</span></span>:<br/>Construction Sequence - <a href="22-cs.html#SP10_7">§10.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ph_usage_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phud</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">phud</span><span class="plain-syntax">-></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</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="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('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Phrases::Usage::get_equation_form</span></span>:<br/>Equations - <a href="20-eq.html#SP21">§21</a><br/>Describing Phrase Type Data - <a href="22-dptd.html#SP5">§5</a>, <a href="22-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</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">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>
|
||||
|
||||
|
@ -763,7 +763,7 @@ it was to debug the preamble-parsing code:
|
|||
<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">ram</span><span 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</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="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>
|
||||
|
|
|
@ -176,8 +176,7 @@ by hand with a sentence in the source text.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">uo</span><span class="plain-syntax">-></span><span class="element-syntax">source_file_scoped</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="function-syntax"><notable-use-option-name></span><span class="plain-syntax">(</span><span class="identifier-syntax">OW</span><span class="plain-syntax">)) && (</span><span class="function-syntax"><<r>></span><span class="plain-syntax"> == </span><span class="constant-syntax">AUTHORIAL_MODESTY_UO</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">uo</span><span class="plain-syntax">-></span><span class="element-syntax">source_file_scoped</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">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">OW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">OW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_use_option</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">uo</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -238,19 +238,17 @@ full, whereas a "tuna fish" (an object) can be called just "tuna".
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">any_parsing</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">exact_parsing</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">ATTACH_TO_SEARCH_LIST_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">NAMED_CONSTANT_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP3" class="function-link"><span class="function-syntax">Rvalues::from_instance</span></a><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">else</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">ATTACH_TO_SEARCH_LIST_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP3" class="function-link"><span class="function-syntax">Rvalues::from_instance</span></a><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">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">tag</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">ATTACH_TO_SEARCH_LIST_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_HAS_NO_MC</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">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">tag</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">NAMED_CONSTANT_MC</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><a href="7-hdn.html#SP3" class="function-link"><span class="function-syntax">Sentences::Headings::initialise_noun_resolution</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ins.html#SP6">§6</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6_4"></a><b>§6.4. </b>The values in an enumerated kind such as our perpetual "colour" example
|
||||
|
@ -382,17 +380,17 @@ turns up subsequently, e.g., in response to
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Instances::get_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">Instances::get_name</span></span>:<br/><a href="5-ins.html#SP15_1">§15.1</a>, <a href="5-ins.html#SP15_2">§15.2</a>, <a href="5-ins.html#SP27">§27</a>, <a href="5-ins.html#SP37">§37</a>, <a href="5-ins.html#SP38_2">§38.2</a><br/>Supplementary Quotes - <a href="2-sq.html#SP2">§2</a><br/>Index Physical World - <a href="5-ipw.html#SP2_2_1">§2.2.1</a><br/>Extension Files - <a href="8-ef.html#SP9_2">§9.2</a>, <a href="8-ef.html#SP9_4">§9.4</a><br/>Refine Parse Tree - <a href="9-rpt.html#SP9_5_1">§9.5.1</a><br/>The Creator - <a href="9-tc.html#SP5_4_1">§5.4.1</a><br/>RValues - <a href="14-rv.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</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="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</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">EMPTY_WORDING</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">Nouns::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural</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">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural</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">Instances::get_name_in_play</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">Instances::get_name_in_play</span></span>:<br/><a href="5-ins.html#SP25">§25</a><br/>Runtime Support for Kinds - <a href="13-rsfk.html#SP24_3">§24.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</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="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</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">EMPTY_WORDING</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">Nouns::get_name_in_play</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural</span><span class="plain-syntax">, </span><span class="identifier-syntax">Projects::get_language_of_play</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::project</span></a><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">Nouns::nominative_in_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural</span><span class="plain-syntax">, </span><span class="identifier-syntax">Projects::get_language_of_play</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::project</span></a><span class="plain-syntax">()));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Instances::full_name_includes</span><span class="plain-syntax">(</span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wd</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</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="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">Nouns::full_name_includes</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">wd</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">Nouns::nominative_singular_includes</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">wd</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="function-syntax">Instances::get_noun</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">Instances::get_noun</span></span>:<br/>Using Nametags - <a href="5-un.html#SP5">§5</a><br/>Index Physical World - <a href="5-ipw.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">) {</span>
|
||||
|
@ -410,7 +408,7 @@ turns up subsequently, e.g., in response to
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">instance_package</span><span class="plain-syntax"> = </span><a href="27-hr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::local_package</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INSTANCES_HAP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-un.html#SP1" class="function-link"><span class="function-syntax">UseNouns::noun_compose_identifier</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">instance_package</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="identifier-syntax">instance_iname</span><span class="plain-syntax"> = </span><a href="5-un.html#SP1" class="function-link"><span class="function-syntax">UseNouns::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="27-hr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::markup_wording</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">instance_package</span><span class="plain-syntax">, </span><span class="constant-syntax">INSTANCE_NAME_HMD</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="27-hr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::markup_wording</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">instance_package</span><span class="plain-syntax">, </span><span class="constant-syntax">INSTANCE_NAME_HMD</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">instance_iname</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -427,7 +425,7 @@ turns up subsequently, e.g., in response to
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'-'</span><span class="plain-syntax">: </span><span class="named-paragraph-container code-font"><a href="5-ins.html#SP15_2" class="named-paragraph-link"><span class="named-paragraph">Write the instance with normalised casing</span><span class="named-paragraph-number">15.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="character-syntax">'~'</span><span class="plain-syntax">: {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="5-ins.html#SP14" class="function-link"><span class="function-syntax">Instances::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_I6_identifier</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</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><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_I6_identifier</span><span 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::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</span><span class="plain-syntax">) > </span><span class="constant-syntax">0</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><span class="identifier-syntax">I</span><span class="plain-syntax">-></span><span class="element-syntax">tag</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%n"</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">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -477,14 +475,14 @@ instances have excerpts registered under <span class="extract"><span class="extr
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><s-literal></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">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lexicon::retrieve</span><span class="plain-syntax">(</span><span class="identifier-syntax">NOUN_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> == </span><span class="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">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::disambiguate</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">MAX_NOUN_PRIORITY</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</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">Nouns::priority</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) != </span><span class="identifier-syntax">LOW_NOUN_PRIORITY</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_parse_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">Nouns::tag_holder</span><span class="plain-syntax">(</span><span class="identifier-syntax">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::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">CONSTANT_NT</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">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span 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::Compare::le</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_constant_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::disambiguate</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Nouns::is_proper</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_parse_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">Nouns::meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">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::is</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">CONSTANT_NT</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">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span 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::Compare::le</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_constant_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</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>
|
||||
|
|
|
@ -319,7 +319,7 @@ table of Kinds.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::get_name_in_play</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Projects::get_language_of_play</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::project</span></a><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_in_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Projects::get_language_of_play</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::project</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">Wordings::empty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">I</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IK</span><span class="plain-syntax"> = </span><a href="5-ins.html#SP18" class="function-link"><span class="function-syntax">Instances::to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::Behaviour::get_name_in_play</span><span class="plain-syntax">(</span><span class="identifier-syntax">IK</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Projects::get_language_of_play</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::project</span></a><span class="plain-syntax">()));</span>
|
||||
|
@ -351,7 +351,7 @@ table of Kinds.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</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">Nouns::get_name_in_play</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Projects::get_language_of_play</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::project</span></a><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">Nouns::nominative_in_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">Projects::get_language_of_play</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::project</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (<i>plural</i> %+W)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">PW</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-ipw.html#SP3_3_1">§3.3.1</a>.</li></ul>
|
||||
|
|
|
@ -244,8 +244,7 @@ to have the "initial value" property.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">nlv</span><span class="plain-syntax">-></span><span class="element-syntax">scope</span><span class="plain-syntax"> = </span><span class="identifier-syntax">scope</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nlv</span><span class="plain-syntax">-></span><span class="element-syntax">substitution_marker</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="comment-syntax"> that is, if it's a global</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">VARIABLE_MC</span><span class="plain-syntax">, </span><a href="14-lv.html#SP2" class="function-link"><span class="function-syntax">Lvalues::new_actual_NONLOCAL_VARIABLE</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nlv</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nlv</span><span class="plain-syntax">-></span><span class="element-syntax">nlv_knowledge</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><a href="16-is.html#SP9" class="function-link"><span class="function-syntax">InferenceSubjects::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nonlocal_variables</span><span class="plain-syntax">,</span>
|
||||
|
|
|
@ -74,48 +74,66 @@ the things they represent — a typical example would be <span class="extrac
|
|||
it's convenient to associate them with nametags.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NOUN_COMPILATION_LINGUISTICS_CALLBACK</span><span class="plain-syntax"> </span><a href="5-un.html#SP1" class="function-link"><span class="function-syntax">UseNouns::initialise_noun_compilation</span></a>
|
||||
</pre>
|
||||
<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">name_compilation_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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt_identifier</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">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt_iname</span><span class="plain-syntax">; </span><span class="comment-syntax"> (which will have that identifier)</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">name_compilation_data</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UseNouns::initialise_noun_compilation</span><span class="plain-syntax">(</span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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">"no noun"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</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">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">UseNouns::identifier</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">UseNouns::identifier</span></span>:<br/>Instances - <a href="5-ins.html#SP14">§14</a><br/>Index Physical World - <a href="5-ipw.html#SP3_1">§3.1</a>, <a href="5-ipw.html#SP3_5">§3.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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">I</span><span class="string-syntax">"nothing"</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">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_I6_identifier</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">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">UseNouns::iname</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">UseNouns::iname</span></span>:<br/>Instances - <a href="5-ins.html#SP14">§14</a><br/>Runtime Support for Kinds - <a href="13-rsfk.html#SP23">§23</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_iname</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">"So %W / %S is stuck\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">), </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_I6_identifier</span><span class="plain-syntax">); </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"stuck"</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">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_iname</span><span 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="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"So %W / %S is stuck\n"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">), </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</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">"noun compilation failed"</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">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</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">UseNouns::iname_set</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">UseNouns::iname_set</span></span>:<br/>Runtime Support for Kinds - <a href="13-rsfk.html#SP23">§23</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_iname</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">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UseNouns::noun_compose_identifier</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">UseNouns::noun_compose_identifier</span></span>:<br/>Instances - <a href="5-ins.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</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="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="identifier-syntax">nt_iname</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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</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">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_iname</span><span class="plain-syntax"> = </span><a href="27-hr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::make_iname_with_memo</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INSTANCE_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</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">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</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">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</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">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</span><span class="plain-syntax"> = </span><a href="27-hr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::make_iname_with_memo</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INSTANCE_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UseNouns::noun_impose_identifier</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">UseNouns::noun_impose_identifier</span></span>:<br/>Runtime Support for Kinds - <a href="13-rsfk.html#SP23">§23</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span 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="identifier-syntax">nt_iname</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">iname</span><span 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="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">iname</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">UseNouns::noun_set_I6_representation</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">UseNouns::noun_set_I6_representation</span></span>:<br/><a href="5-un.html#SP2_1">§2.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new</span><span 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="identifier-syntax">nt_iname</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">"no instance iname yet"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_I6_identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_I6_identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">new</span><span 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::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_I6_identifier</span><span class="plain-syntax">) == </span><span class="character-syntax">'"'</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_I6_identifier</span><span 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::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_I6_identifier</span><span class="plain-syntax">) == </span><span class="character-syntax">'"'</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_last_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_I6_identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::change_translation</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_I6_identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::clear_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">MAKE_NAME_UNIQUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="27-hr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::make_available</span></a><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_iname</span><span 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="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</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">"no instance iname yet"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::clear</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">new</span><span 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::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</span><span class="plain-syntax">) == </span><span class="character-syntax">'"'</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_first_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</span><span 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::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</span><span class="plain-syntax">) == </span><span class="character-syntax">'"'</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::delete_last_character</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::change_translation</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_identifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::clear_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">MAKE_NAME_UNIQUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="27-hr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::make_available</span></a><span class="plain-syntax">(</span><a href="27-em.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">.</span><span class="element-syntax">nt_iname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure name_compilation_data is accessed in 5/ins and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>The identifiers are created all at once, but the process is complicated by
|
||||
the fact that the source text is allowed to override our choices. For
|
||||
instance, the Standard Rules want the player-character object to be called
|
||||
|
@ -143,7 +161,7 @@ instance, the Standard Rules want the player-character object to be called
|
|||
<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">Wordings::trim_last_word</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="element-syntax">down</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">res</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lexicon::retrieve</span><span class="plain-syntax">(</span><span class="identifier-syntax">NOUN_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">res</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::disambiguate</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</span><span class="plain-syntax">, </span><span class="identifier-syntax">MAX_NOUN_PRIORITY</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::disambiguate</span><span class="plain-syntax">(</span><span class="identifier-syntax">res</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">nt</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">i6r</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">i6r</span><span class="plain-syntax">, </span><span class="string-syntax">"%N"</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">p</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)));</span>
|
||||
|
@ -204,8 +222,8 @@ and is a somewhat provisional feature for now.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><a href="5-ins.html#SP14" class="function-link"><span class="function-syntax">Instances::get_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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">"stuck on instance name"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::add_to_noun_and_reg</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">), </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="identifier-syntax">g</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::supply_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">), </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="identifier-syntax">g</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</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="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRANS_KIND:</span><span class="plain-syntax"> {</span>
|
||||
|
@ -214,8 +232,8 @@ and is a somewhat provisional feature for now.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">KC</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">"stuck on kind name"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::Constructors::get_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">KC</span><span 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="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">"further stuck on kind name"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::add_to_noun_and_reg</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">), </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="identifier-syntax">g</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">REGISTER_PLURAL_NTOPT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::supply_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">), </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="identifier-syntax">g</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">WITH_PLURAL_FORMS_NTOPT</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="identifier-syntax">default:</span>
|
||||
|
|
|
@ -86,10 +86,8 @@ a new name and its meaning to be.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">), </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NounPhrases::new_raw</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</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">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">), </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">NounPhrases::new_raw</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>The following parses the subject noun phrase of sentences like
|
||||
|
|
|
@ -673,8 +673,7 @@ how to compile the BP for the one which is the right way round.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><relation-name-formal></span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">source_name</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">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">, </span><a href="14-rv.html#SP1" class="function-link"><span class="function-syntax">Rvalues::from_binary_predicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ MathJax = {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7 Modules</a></li><li><a href="index.html">core</a></li><li><a href="index.html#7">Chapter 7: Sentences</a></li><li><b>Headings</b></li></ul></div>
|
||||
<p class="purpose">To keep track of the hierarchy of headings and subheadings found in the source text.</p>
|
||||
|
||||
<ul class="toc"><li><a href="7-hdn.html#SP1">§1. World objects under each heading</a></li><li><a href="7-hdn.html#SP5">§5. The noun search list</a></li><li><a href="7-hdn.html#SP12">§12. Handling headings during the main traverses</a></li><li><a href="7-hdn.html#SP13">§13. Describing the heading structure, 1: to the debugging log</a></li><li><a href="7-hdn.html#SP15">§15. Describing the heading structure, 2: to the index</a></li><li><a href="7-hdn.html#SP16">§16. Describing the heading structure, 3: to a freestanding XML file</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="7-hdn.html#SP1">§1. World objects under each heading</a></li><li><a href="7-hdn.html#SP5">§5. The noun search list</a></li><li><a href="7-hdn.html#SP13">§13. Handling headings during the main traverses</a></li><li><a href="7-hdn.html#SP14">§14. Describing the heading structure, 1: to the debugging log</a></li><li><a href="7-hdn.html#SP16">§16. Describing the heading structure, 2: to the index</a></li><li><a href="7-hdn.html#SP17">§17. Describing the heading structure, 3: to a freestanding XML file</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. World objects under each heading. </b>Every heading must carry with it a linked list of the nametags created in
|
||||
sentences which belong to it. So when any noun is created, the following
|
||||
|
@ -110,6 +110,13 @@ friend.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> &(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">name_resolution</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">Sentences::Headings::initialise_noun_resolution</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">Sentences::Headings::initialise_noun_resolution</span></span>:<br/>Instances - <a href="5-ins.html#SP6_3">§6.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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">"tried to initialise resolution data for null tag"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP7" class="function-link"><span class="function-syntax">Sentences::Headings::disturb</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP3" class="function-link"><span class="function-syntax">Sentences::Headings::attach_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP4" class="function-link"><span class="function-syntax">Sentences::Headings::verify_divisions</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_tags_attached</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">Sentences::Headings::attach_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_tag</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_sentence</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>
|
||||
|
@ -133,7 +140,7 @@ through a crack.
|
|||
</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">Sentences::Headings::verify_divisions</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">Sentences::Headings::verify_divisions</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">Sentences::Headings::verify_divisions</span></span>:<br/><a href="7-hdn.html#SP3">§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="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">; </span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">h</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">total</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">disaster</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">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">noun</span><span class="plain-syntax">)</span>
|
||||
|
@ -239,7 +246,7 @@ calls the following routine to let us know.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">noun_search_list_valid_for_this_heading</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> initially it's unbuilt</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Headings::disturb</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">Sentences::Headings::disturb</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">Sentences::Headings::disturb</span></span>:<br/><a href="7-hdn.html#SP3">§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="identifier-syntax">noun_search_list_valid_for_this_heading</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -250,11 +257,11 @@ and has no "level" or "indentation" as such.
|
|||
</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">Sentences::Headings::make_the_tree</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">Sentences::Headings::make_the_tree</span></span>:<br/><a href="7-hdn.html#SP9_3">§9.3</a><br/>How To Compile - <a href="1-htc.html#SP2_3">§2.3</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">Sentences::Headings::make_the_tree</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">Sentences::Headings::make_the_tree</span></span>:<br/><a href="7-hdn.html#SP9_3">§9.3</a><br/>How To Compile - <a href="1-htc.html#SP2_3">§2.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="identifier-syntax">Headings::assemble_tree</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="function-syntax">Sentences::Headings::pseudo_heading</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">Sentences::Headings::pseudo_heading</span></span>:<br/><a href="7-hdn.html#SP9_2">§9.2</a>, <a href="7-hdn.html#SP13">§13</a>, <a href="7-hdn.html#SP14">§14</a>, <a href="7-hdn.html#SP15">§15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="function-syntax">Sentences::Headings::pseudo_heading</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">Sentences::Headings::pseudo_heading</span></span>:<br/><a href="7-hdn.html#SP9_2">§9.2</a>, <a href="7-hdn.html#SP14">§14</a>, <a href="7-hdn.html#SP15">§15</a>, <a href="7-hdn.html#SP16">§16</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">Headings::root_of_tree</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">()-></span><span class="identifier-syntax">headings</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -264,7 +271,7 @@ nametags of priority 2, and so on.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Headings::construct_noun_search_list</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">Sentences::Headings::construct_noun_search_list</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">Sentences::Headings::construct_noun_search_list</span></span>:<br/><a href="7-hdn.html#SP12">§12</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">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">h</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="7-hdn.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Work out the heading from which we wish to search</span><span class="named-paragraph-number">9.1</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -275,9 +282,8 @@ nametags of priority 2, and so on.
|
|||
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-hdn.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">Start the search list empty</span><span class="named-paragraph-number">9.2</span></a></span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><=</span><span class="identifier-syntax">MAX_NOUN_PRIORITY</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP10" class="function-link"><span class="function-syntax">Sentences::Headings::build_search_list_from</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">h</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP10" class="function-link"><span class="function-syntax">Sentences::Headings::build_search_list_from</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">h</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">COMMON_NOUN</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP10" class="function-link"><span class="function-syntax">Sentences::Headings::build_search_list_from</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">h</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PROPER_NOUN</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-hdn.html#SP9_3" class="named-paragraph-link"><span class="named-paragraph">Verify that the search list indeed contains every noun just once</span><span class="named-paragraph-number">9.3</span></a></span><span class="plain-syntax">;</span>
|
||||
|
||||
|
@ -327,10 +333,10 @@ and produce an internal error if not.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> != </span><span class="identifier-syntax">no_tags_attached</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">"Reordering failed from $H\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%d tags created, %d in ordering\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">no_tags_attached</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP14" class="function-link"><span class="function-syntax">Sentences::Headings::log_all_headings</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP15" class="function-link"><span class="function-syntax">Sentences::Headings::log_all_headings</span></a><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">"Making fresh tree:\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP8" class="function-link"><span class="function-syntax">Sentences::Headings::make_the_tree</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP14" class="function-link"><span class="function-syntax">Sentences::Headings::log_all_headings</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP15" class="function-link"><span class="function-syntax">Sentences::Headings::log_all_headings</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error_tree_unsafe</span><span class="plain-syntax">(</span><span class="string-syntax">"reordering of nametags failed"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
|
@ -368,13 +374,13 @@ number of nametags in the source text.
|
|||
</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">Sentences::Headings::build_search_list_from</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">Sentences::Headings::build_search_list_from</span></span>:<br/><a href="7-hdn.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">within</span><span class="plain-syntax">, </span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">way_we_came</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</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">Sentences::Headings::build_search_list_from</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">Sentences::Headings::build_search_list_from</span></span>:<br/><a href="7-hdn.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">within</span><span class="plain-syntax">, </span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">way_we_came</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</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">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">; </span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subhead</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">within</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_NOUNS_UNDER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">within</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Nouns::priority</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</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">Nouns::subclass</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) == </span><span class="identifier-syntax">p</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-hdn.html#SP10_1" class="named-paragraph-link"><span class="named-paragraph">Add tag to the end of the search list</span><span class="named-paragraph-number">10.1</span></a></span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> recurse downwards through subordinate headings, other than the way we came up</span>
|
||||
|
@ -408,11 +414,11 @@ in the search list has a positive score.
|
|||
</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">Sentences::Headings::set_noun_search_score</span><span class="plain-syntax">(</span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">v</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Headings::set_noun_search_score</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">Sentences::Headings::set_noun_search_score</span></span>:<br/><a href="7-hdn.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">v</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP3" class="function-link"><span class="function-syntax">Sentences::Headings::name_resolution_data</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">)-></span><span class="element-syntax">search_score</span><span class="plain-syntax"> = </span><span class="identifier-syntax">v</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="function-syntax">Sentences::Headings::highest_scoring_noun_searched</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="function-syntax">Sentences::Headings::highest_scoring_noun_searched</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">Sentences::Headings::highest_scoring_noun_searched</span></span>:<br/><a href="7-hdn.html#SP12">§12</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">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, *</span><span class="identifier-syntax">best_nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">best_score</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_NT_SEARCH_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
||||
|
@ -422,7 +428,36 @@ in the search list has a positive score.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">best_nt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. Handling headings during the main traverses. </b>Here's what we do when we run into a heading, as we look through the
|
||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. </b>It's a tricky task to choose from a list of possible nouns which might have
|
||||
been intended by text such as "chair". If the list is empty or contains only
|
||||
one choice, no problem. Otherwise we will probably have to reorder the noun
|
||||
search list, and then run through it. The code below looks as if it picks out
|
||||
the match with highest score, so that the ordering is unimportant, but in fact
|
||||
the score assigned to a match is based purely on the number of words missed
|
||||
out (see later): that means that ambiguities often arise between two lexically
|
||||
similar objects, e.g., a "blue chair" or a "red chair" when the text simply
|
||||
specifies "chair". Since the code below accepts the first noun with the
|
||||
highest score, the outcome is thus determined by which of the blue and red
|
||||
chairs ranks highest in the search list: and that is why the search list is so
|
||||
important.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NOUN_DISAMBIGUATION_LINGUISTICS_CALLBACK</span><span class="plain-syntax"> </span><a href="7-hdn.html#SP12" class="function-link"><span class="function-syntax">Sentences::Headings::choose_highest_scoring_noun</span></a>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="function-syntax">Sentences::Headings::choose_highest_scoring_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">common_only</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP9" class="function-link"><span class="function-syntax">Sentences::Headings::construct_noun_search_list</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</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">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">noun</span><span class="plain-syntax">) </span><a href="7-hdn.html#SP11" class="function-link"><span class="function-syntax">Sentences::Headings::set_noun_search_score</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">; </span><span class="identifier-syntax">p2</span><span class="plain-syntax">; </span><span class="identifier-syntax">p2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p2</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_alternative</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lexicon::get_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">p2</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Nouns::is_eligible_match</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">common_only</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP11" class="function-link"><span class="function-syntax">Sentences::Headings::set_noun_search_score</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_score</span><span class="plain-syntax">(</span><span class="identifier-syntax">p2</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><a href="7-hdn.html#SP11" class="function-link"><span class="function-syntax">Sentences::Headings::highest_scoring_noun_searched</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. Handling headings during the main traverses. </b>Here's what we do when we run into a heading, as we look through the
|
||||
assertions in the source text: nothing, except to wipe out any meanings of
|
||||
words like "it" left over from previous sentences. Headings are for
|
||||
organisation, and are not directly functional in themselves.
|
||||
|
@ -430,18 +465,18 @@ organisation, and are not directly functional in themselves.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">sentence_handler</span><span class="plain-syntax"> </span><span class="identifier-syntax">HEADING_SH_handler</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> { </span><span class="identifier-syntax">HEADING_NT</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><a href="7-hdn.html#SP12" class="function-link"><span class="function-syntax">Sentences::Headings::handle_heading</span></a><span class="plain-syntax"> };</span>
|
||||
<span class="plain-syntax"> { </span><span class="identifier-syntax">HEADING_NT</span><span class="plain-syntax">, -1, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><a href="7-hdn.html#SP13" class="function-link"><span class="function-syntax">Sentences::Headings::handle_heading</span></a><span class="plain-syntax"> };</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Headings::handle_heading</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PN</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="9-tfa.html#SP13" class="function-link"><span class="function-syntax">Assertions::Traverse::new_discussion</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. Describing the heading structure, 1: to the debugging log. </b>Finally, three ways to describe the run of headings: to the debugging log,
|
||||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. Describing the heading structure, 1: to the debugging log. </b>Finally, three ways to describe the run of headings: to the debugging log,
|
||||
to the index of the project, and to a freestanding XML file.
|
||||
</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">Sentences::Headings::log</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Sentences::Headings::log</span></span>:<br/>Core Module - <a href="1-cm.html#SP5">§5</a>, <a href="1-cm.html#SP6_6">§6.6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">h</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Headings::log</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">Sentences::Headings::log</span></span>:<br/>Core Module - <a href="1-cm.html#SP5">§5</a>, <a href="1-cm.html#SP6_6">§6.6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">h</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">h</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 heading>\n"</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">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pseud</span><span class="plain-syntax"> = </span><a href="7-hdn.html#SP8" class="function-link"><span class="function-syntax">Sentences::Headings::pseudo_heading</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">h</span><span class="plain-syntax"> == </span><span class="identifier-syntax">pseud</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"<pseudo_heading>\n"</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
|
||||
|
@ -454,17 +489,17 @@ to the index of the project, and to a freestanding XML file.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" level:%d indentation:%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">level</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">indentation</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. </b>And here we log the whole heading tree by recursing through it, and
|
||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. </b>And here we log the whole heading tree by recursing through it, and
|
||||
surreptitiously check that it is correctly formed at the same time.
|
||||
</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">Sentences::Headings::log_all_headings</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">Sentences::Headings::log_all_headings</span></span>:<br/><a href="7-hdn.html#SP9_3">§9.3</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">Sentences::Headings::log_all_headings</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">Sentences::Headings::log_all_headings</span></span>:<br/><a href="7-hdn.html#SP9_3">§9.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="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">h</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><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">h</span><span class="plain-syntax">, </span><span class="identifier-syntax">heading</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">-></span><span class="identifier-syntax">headings</span><span class="plain-syntax">-></span><span class="identifier-syntax">subordinates</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"$H\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</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>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP14" class="function-link"><span class="function-syntax">Sentences::Headings::log_headings_recursively</span></a><span class="plain-syntax">(</span><a href="7-hdn.html#SP8" class="function-link"><span class="function-syntax">Sentences::Headings::pseudo_heading</span></a><span class="plain-syntax">(), </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP15" class="function-link"><span class="function-syntax">Sentences::Headings::log_headings_recursively</span></a><span class="plain-syntax">(</span><a href="7-hdn.html#SP8" class="function-link"><span class="function-syntax">Sentences::Headings::pseudo_heading</span></a><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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Headings::log_headings_recursively</span><span class="plain-syntax">(</span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">h</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">depth</span><span class="plain-syntax">) {</span>
|
||||
|
@ -473,11 +508,11 @@ surreptitiously check that it is correctly formed at the same time.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">depth</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</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="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"$H\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">depth</span><span class="plain-syntax">-1 != </span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">indentation</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"*** indentation should be %d ***\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</span><span class="plain-syntax">-1);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP14" class="function-link"><span class="function-syntax">Sentences::Headings::log_headings_recursively</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">child_heading</span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</span><span class="plain-syntax">+1);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP14" class="function-link"><span class="function-syntax">Sentences::Headings::log_headings_recursively</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_heading</span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP15" class="function-link"><span class="function-syntax">Sentences::Headings::log_headings_recursively</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">child_heading</span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</span><span class="plain-syntax">+1);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP15" class="function-link"><span class="function-syntax">Sentences::Headings::log_headings_recursively</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_heading</span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. Describing the heading structure, 2: to the index. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. Describing the heading structure, 2: to the index. </b></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">contents_entry</span><span class="plain-syntax"> {</span>
|
||||
|
@ -496,7 +531,7 @@ surreptitiously check that it is correctly formed at the same time.
|
|||
<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">"CONTENTS"</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><a href="7-hdn.html#SP15_1_1" class="function-link"><span class="function-syntax">Sentences::Headings::index_heading_recursively</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP16_1_1" class="function-link"><span class="function-syntax">Sentences::Headings::index_heading_recursively</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP8" class="function-link"><span class="function-syntax">Sentences::Headings::pseudo_heading</span></a><span class="plain-syntax">()-></span><span class="identifier-syntax">child_heading</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">contents_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ce</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">min_positive_level</span><span class="plain-syntax"> = </span><span class="constant-syntax">10</span><span class="plain-syntax">;</span>
|
||||
|
@ -505,7 +540,7 @@ surreptitiously check that it is correctly formed at the same time.
|
|||
<span class="plain-syntax"> (</span><span class="identifier-syntax">ce</span><span class="plain-syntax">-></span><span class="element-syntax">heading_entered</span><span class="plain-syntax">-></span><span class="identifier-syntax">level</span><span class="plain-syntax"> < </span><span class="identifier-syntax">min_positive_level</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">min_positive_level</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ce</span><span class="plain-syntax">-></span><span class="element-syntax">heading_entered</span><span class="plain-syntax">-></span><span class="identifier-syntax">level</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">ce</span><span class="plain-syntax">, </span><span class="reserved-syntax">contents_entry</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-hdn.html#SP15_1" class="named-paragraph-link"><span class="named-paragraph">Index this entry in the contents</span><span class="named-paragraph-number">15.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-hdn.html#SP16_1" class="named-paragraph-link"><span class="named-paragraph">Index this entry in the contents</span><span class="named-paragraph-number">16.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">NUMBER_CREATED</span><span class="plain-syntax">(</span><span class="reserved-syntax">contents_entry</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">HTML_OPEN</span><span class="plain-syntax">(</span><span class="string-syntax">"p"</span><span class="plain-syntax">); </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"(This would look more like a contents page if the source text "</span>
|
||||
|
@ -518,7 +553,7 @@ surreptitiously check that it is correctly formed at the same time.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure contents_entry is accessed in 3/pd, 5/lp, 5/ut, 5/un, 5/ins, 6/rlt, 6/nv, 7/ns, 7/oaf, 7/rs, 9/tfa, 9/tbath, 9/rpt, 9/tc, 9/ma, 9/rk, 9/ass, 9/imp, 9/pd, 10/teav, 10/cap, 11/ap, 11/pr, 11/bas, 11/tc, 11/sm, 12/dtd, 12/cdp, 14/rv, 14/lv, 14/cn, 14/ds, 14/ds2, 15/cp, 16/is, 16/in, 19/tb, 19/rsft, 19/tod, 20/eq, 21/rl, 21/rl2, 21/fao, 21/rps, 21/sv, 21/ac, 22/ph, 22/tp, 22/tp2, 23/ad, 24/lv, 24/sf, 25/in, 25/pi, 25/cii, 25/cp, 26/uo, 26/tti, 26/pc, 26/ts, 27/cm and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15_1"></a><b>§15.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Index this entry in the contents</span><span class="named-paragraph-number">15.1</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP16_1"></a><b>§16.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Index this entry in the contents</span><span class="named-paragraph-number">16.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -560,16 +595,16 @@ surreptitiously check that it is correctly formed at the same time.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_CLOSE</span><span class="plain-syntax">(</span><span class="string-syntax">"li"</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">"ul"</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">"\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-hdn.html#SP15_1_2" class="named-paragraph-link"><span class="named-paragraph">List all the objects and kinds created under the given heading, one tap stop deeper</span><span class="named-paragraph-number">15.1.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-hdn.html#SP16_1_2" class="named-paragraph-link"><span class="named-paragraph">List all the objects and kinds created under the given heading, one tap stop deeper</span><span class="named-paragraph-number">16.1.2</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="7-hdn.html#SP15">§15</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15_1_1"></a><b>§15.1.1. </b>We index only headings of level 1 and up — so, not the pseudo-heading or the
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="7-hdn.html#SP16">§16</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP16_1_1"></a><b>§16.1.1. </b>We index only headings of level 1 and up — so, not the pseudo-heading or the
|
||||
File (0) ones — and which are not within any extensions — so, are in the
|
||||
primary source text written by the user.
|
||||
</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">Sentences::Headings::index_heading_recursively</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">Sentences::Headings::index_heading_recursively</span></span>:<br/><a href="7-hdn.html#SP15">§15</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">h</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Headings::index_heading_recursively</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">Sentences::Headings::index_heading_recursively</span></span>:<br/><a href="7-hdn.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">h</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">h</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">show_heading</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">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">child_heading</span><span class="plain-syntax">;</span>
|
||||
|
@ -593,23 +628,23 @@ primary source text written by the user.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">headings_indexed</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP15_1_1" class="function-link"><span class="function-syntax">Sentences::Headings::index_heading_recursively</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">child_heading</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP15_1_1" class="function-link"><span class="function-syntax">Sentences::Headings::index_heading_recursively</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_heading</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP16_1_1" class="function-link"><span class="function-syntax">Sentences::Headings::index_heading_recursively</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">child_heading</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP16_1_1" class="function-link"><span class="function-syntax">Sentences::Headings::index_heading_recursively</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_heading</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP15_1_2"></a><b>§15.1.2. </b>We skip any objects or kinds without names (i.e., whose <span class="extract"><span class="extract-syntax">creator</span></span> is null).
|
||||
<p class="commentary firstcommentary"><a id="SP16_1_2"></a><b>§16.1.2. </b>We skip any objects or kinds without names (i.e., whose <span class="extract"><span class="extract-syntax">creator</span></span> is null).
|
||||
The rest appear in italic type, and without links to source text since this
|
||||
in practice strews distractingly many orange berries across the page.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">List all the objects and kinds created under the given heading, one tap stop deeper</span><span class="named-paragraph-number">15.1.2</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">List all the objects and kinds created under the given heading, one tap stop deeper</span><span class="named-paragraph-number">16.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">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_NOUNS_UNDER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</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::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</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="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</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">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">c</span><span class="plain-syntax">++ == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML::open_indented_p</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ind_used</span><span class="plain-syntax">+1, </span><span class="string-syntax">"hanging"</span><span class="plain-syntax">);</span>
|
||||
|
@ -620,8 +655,8 @@ in practice strews distractingly many orange berries across the page.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">HTML::end_colour</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</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>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="7-hdn.html#SP15_1">§15.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. Describing the heading structure, 3: to a freestanding XML file. </b>This is provided as a convenience to the application using Inform, which may want
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="7-hdn.html#SP16_1">§16.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. Describing the heading structure, 3: to a freestanding XML file. </b>This is provided as a convenience to the application using Inform, which may want
|
||||
to have a pull-down menu or similar gadget allowing the user to jump to a given
|
||||
heading. This tells the interface where every heading is, thus saving it from
|
||||
having to parse the source.
|
||||
|
@ -634,18 +669,18 @@ Version", contains the Inform build number in its usual form: "4Q34", for instan
|
|||
</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">Sentences::Headings::write_as_xml</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">Sentences::Headings::write_as_xml</span></span>:<br/>How To Compile - <a href="1-htc.html#SP2_3">§2.3</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">Sentences::Headings::write_as_xml</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">Sentences::Headings::write_as_xml</span></span>:<br/>How To Compile - <a href="1-htc.html#SP2_3">§2.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="identifier-syntax">text_stream</span><span class="plain-syntax"> </span><span class="identifier-syntax">xf_struct</span><span class="plain-syntax">; </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">xf</span><span class="plain-syntax"> = &</span><span class="identifier-syntax">xf_struct</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><a href="1-wtc.html#SP13" class="function-link"><span class="function-syntax">Task::xml_headings_file</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">STREAM_OPEN_TO_FILE</span><span class="plain-syntax">(</span><span class="identifier-syntax">xf</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">UTF8_ENC</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::fatal_on_file</span><span class="plain-syntax">(</span><span class="string-syntax">"Can't open headings file"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP16" class="function-link"><span class="function-syntax">Sentences::Headings::write_headings_as_xml_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">xf</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="7-hdn.html#SP17" class="function-link"><span class="function-syntax">Sentences::Headings::write_headings_as_xml_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">xf</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">STREAM_CLOSE</span><span class="plain-syntax">(</span><span class="identifier-syntax">xf</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">Sentences::Headings::write_headings_as_xml_inner</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">heading</span><span class="plain-syntax"> *</span><span class="identifier-syntax">h</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-hdn.html#SP16_1" class="named-paragraph-link"><span class="named-paragraph">Write DTD indication for XML headings file</span><span class="named-paragraph-number">16.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-hdn.html#SP17_1" class="named-paragraph-link"><span class="named-paragraph">Write DTD indication for XML headings file</span><span class="named-paragraph-number">17.1</span></a></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">"<plist version=\"1.0\"><dict>\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">INDENT</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">"<key>Application Version</key><string>%B (build %B)</string>\n"</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>
|
||||
|
@ -653,7 +688,7 @@ Version", contains the Inform build number in its usual form: "4Q34", for instan
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">h</span><span class="plain-syntax">, </span><span class="identifier-syntax">heading</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">-></span><span class="identifier-syntax">headings</span><span class="plain-syntax">-></span><span class="identifier-syntax">subordinates</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">"<key>%d</key><dict>\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">INDENT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-hdn.html#SP16_2" class="named-paragraph-link"><span class="named-paragraph">Write the dictionary of properties for a single heading</span><span class="named-paragraph-number">16.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-hdn.html#SP17_2" class="named-paragraph-link"><span class="named-paragraph">Write the dictionary of properties for a single heading</span><span class="named-paragraph-number">17.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">OUTDENT</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">"</dict>\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -661,10 +696,10 @@ Version", contains the Inform build number in its usual form: "4Q34", for instan
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"</dict></plist>\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP16_1"></a><b>§16.1. </b>We use a convenient Apple DTD:
|
||||
<p class="commentary firstcommentary"><a id="SP17_1"></a><b>§17.1. </b>We use a convenient Apple DTD:
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Write DTD indication for XML headings file</span><span class="named-paragraph-number">16.1</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Write DTD indication for XML headings file</span><span class="named-paragraph-number">17.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -672,8 +707,8 @@ Version", contains the Inform build number in its usual form: "4Q34", for instan
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"<!DOCTYPE plist PUBLIC \"-</span><span class="comment-syntax">Apple Computer//DTD PLIST 1.0//EN\" "</span>
|
||||
<span class="string-syntax"> "</span><span class="plain-syntax">\</span><span class="string-syntax">"http:</span><span class="comment-syntax">www.apple.com/DTDs/PropertyList-1.0.dtd\">\n");</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="7-hdn.html#SP16">§16</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP16_2"></a><b>§16.2. </b>Note that a level of 0, and a title of <span class="extract"><span class="extract-syntax">--</span></span>, signifies a File (0) level
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="7-hdn.html#SP17">§17</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP17_2"></a><b>§17.2. </b>Note that a level of 0, and a title of <span class="extract"><span class="extract-syntax">--</span></span>, signifies a File (0) level
|
||||
heading: external tools can probably ignore such records. Similarly, it is
|
||||
unlikely that they will ever see a record without a "Filename" key —
|
||||
this would mean a heading arising from text created internally within Inform,
|
||||
|
@ -681,7 +716,7 @@ which will only happen if someone has done something funny with <span class="ext
|
|||
but should this arise then the best recourse is to ignore the heading.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Write the dictionary of properties for a single heading</span><span class="named-paragraph-number">16.2</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Write the dictionary of properties for a single heading</span><span class="named-paragraph-number">17.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -696,7 +731,7 @@ but should this arise then the best recourse is to ignore the heading.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"<key>Level</key><integer>%d</integer>\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">level</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">"<key>Indentation</key><integer>%d</integer>\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">h</span><span class="plain-syntax">-></span><span class="identifier-syntax">indentation</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="7-hdn.html#SP16">§16</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="7-hdn.html#SP17">§17</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="7-ptu.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-nl.html">3</a></li><li class="progresschapter"><a href="4-its.html">4</a></li><li class="progresschapter"><a href="5-lp.html">5</a></li><li class="progresschapter"><a href="6-bp.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-ptu.html">ptu</a></li><li class="progresscurrent">hdn</li><li class="progresssection"><a href="7-ns.html">ns</a></li><li class="progresssection"><a href="7-oaf.html">oaf</a></li><li class="progresssection"><a href="7-rs.html">rs</a></li><li class="progresschapter"><a href="8-ef.html">8</a></li><li class="progresschapter"><a href="9-ita.html">9</a></li><li class="progresschapter"><a href="10-aots.html">10</a></li><li class="progresschapter"><a href="11-itpc.html">11</a></li><li class="progresschapter"><a href="12-ter.html">12</a></li><li class="progresschapter"><a href="13-kak.html">13</a></li><li class="progresschapter"><a href="14-sp.html">14</a></li><li class="progresschapter"><a href="15-pr.html">15</a></li><li class="progresschapter"><a href="16-is.html">16</a></li><li class="progresschapter"><a href="17-tl.html">17</a></li><li class="progresschapter"><a href="18-lc.html">18</a></li><li class="progresschapter"><a href="19-tc.html">19</a></li><li class="progresschapter"><a href="20-eq.html">20</a></li><li class="progresschapter"><a href="21-rl.html">21</a></li><li class="progresschapter"><a href="22-itp.html">22</a></li><li class="progresschapter"><a href="23-ad.html">23</a></li><li class="progresschapter"><a href="24-lv.html">24</a></li><li class="progresschapter"><a href="25-in.html">25</a></li><li class="progresschapter"><a href="26-fc.html">26</a></li><li class="progresschapter"><a href="27-hr.html">27</a></li><li class="progressnext"><a href="7-ns.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
|
|
@ -665,7 +665,7 @@ subject carried over from previous sentences.
|
|||
</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">Assertions::Traverse::new_discussion</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">Assertions::Traverse::new_discussion</span></span>:<br/><a href="9-tfa.html#SP7">§7</a><br/>Headings - <a href="7-hdn.html#SP12">§12</a><br/>Extension Files - <a href="8-ef.html#SP11">§11</a><br/>To Be and To Have - <a href="9-tbath.html#SP5_1">§5.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">Assertions::Traverse::new_discussion</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">Assertions::Traverse::new_discussion</span></span>:<br/><a href="9-tfa.html#SP7">§7</a><br/>Headings - <a href="7-hdn.html#SP13">§13</a><br/>Extension Files - <a href="8-ef.html#SP11">§11</a><br/>To Be and To Have - <a href="9-tbath.html#SP5_1">§5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">subject_of_sentences</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">PRONOUNS</span><span class="plain-syntax">, </span><span class="string-syntax">"[Forgotten subject of sentences: $j]\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">subject_of_sentences</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">subject_of_sentences</span><span class="plain-syntax">)</span>
|
||||
|
|
|
@ -349,8 +349,7 @@ make that explicit: for instance, "taking" becomes "the taking action".
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><action-name-construction></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">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::to_wording</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">an</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">Rvalues::from_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">Vocabulary::set_flags</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)), </span><span class="identifier-syntax">ACTION_PARTICIPLE_MC</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -134,7 +134,7 @@ text (e.g. "taking, dropping or examining a door").
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-></span><span class="element-syntax">action_listed</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-></span><span class="element-syntax">action_listed</span><span class="plain-syntax">-></span><span class="element-syntax">present_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-></span><span class="element-syntax">nap_listed</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-></span><span class="element-syntax">nap_listed</span><span class="plain-syntax">-></span><span class="element-syntax">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">"%W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">anl</span><span class="plain-syntax">-></span><span class="element-syntax">nap_listed</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">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"NULL"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax"><anl-></span><span class="element-syntax">parc</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" [%d: %W]"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">anl</span><span class="plain-syntax">-></span><span class="element-syntax">parameter</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">]);</span>
|
||||
|
@ -150,7 +150,7 @@ text (e.g. "taking, dropping or examining a door").
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">a</span><span class="plain-syntax"> = </span><span class="identifier-syntax">anl</span><span class="plain-syntax">; </span><span class="identifier-syntax">a</span><span class="plain-syntax">; </span><span class="identifier-syntax">a</span><span class="plain-syntax"> = </span><span class="identifier-syntax">a</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">a</span><span class="plain-syntax">-></span><span class="element-syntax">nap_listed</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">a</span><span class="plain-syntax">-></span><span class="element-syntax">parity</span><span class="plain-syntax"> == -1) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"not-"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%W / "</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">-></span><span class="element-syntax">nap_listed</span><span class="plain-syntax">-></span><span class="element-syntax">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">"%W / "</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">a</span><span class="plain-syntax">-></span><span class="element-syntax">nap_listed</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">a</span><span class="plain-syntax">-></span><span class="element-syntax">action_listed</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"ANY / "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
|
|
|
@ -87,8 +87,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">named_action_pattern</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nap</span><span class="plain-syntax">-></span><span class="element-syntax">first</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">nap</span><span class="plain-syntax">-></span><span class="element-syntax">text_of_declaration</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">nap</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nap</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NAMED_AP_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">Rvalues::from_named_action_pattern</span><span class="plain-syntax">(</span><span class="identifier-syntax">nap</span><span class="plain-syntax">));</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PR</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::local_package</span><span class="plain-syntax">(</span><span class="identifier-syntax">NAMED_ACTION_PATTERNS_HAP</span><span class="plain-syntax">);</span>
|
||||
|
@ -141,7 +140,7 @@ function togglePopup(material_id) {
|
|||
<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">nap</span><span class="plain-syntax">, </span><span class="reserved-syntax">named_action_pattern</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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"<b>%+W</b>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">nap</span><span class="plain-syntax">-></span><span class="element-syntax">name</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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"<b>%+W</b>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Nouns::nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">nap</span><span class="plain-syntax">-></span><span class="element-syntax">name</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">nap</span><span class="plain-syntax">-></span><span class="element-syntax">text_of_declaration</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"br"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nap</span><span class="plain-syntax">-></span><span class="element-syntax">first</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -66,7 +66,7 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Services</a></li><li><a href="index.html">inflections</a></li><li><a href="index.html#3">Chapter 3: Declension and Conjugation</a></li><li><b>Name Clusters</b></li></ul></div>
|
||||
<p class="purpose">Name clusters are sets of noun or adjective forms, perhaps multiple or in multiple languages, which have in common that they share a meaning.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-nc.html#SP1">§1. Cluster</a></li><li><a href="3-nc.html#SP5">§5. Plural fixing</a></li><li><a href="3-nc.html#SP6">§6. Searching declensions</a></li><li><a href="3-nc.html#SP9">§9. Meanings</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="3-nc.html#SP1">§1. Cluster</a></li><li><a href="3-nc.html#SP5">§5. Plural fixing</a></li><li><a href="3-nc.html#SP6">§6. Searching declensions</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Cluster. </b>A cluster is a linked list of wordings, in effect, but they are annotated
|
||||
with lingistic roles. For example, the cluster of names for the common noun
|
||||
|
@ -78,9 +78,9 @@ with lingistic roles. For example, the cluster of names for the common noun
|
|||
</blockquote>
|
||||
|
||||
<p class="commentary">While this perhaps looks a little unstructured, that means that it doesn't
|
||||
impose many assumptions about the language. Compare the XML frameworks used
|
||||
in the Lexical Markup Framework standard ISO 24613, which it would be fairly
|
||||
easy to convert our <a href="3-nc.html#SP1" class="internal">name_cluster</a> objects to.
|
||||
impose many assumptions about the language. A similarly pragmatic view is taken
|
||||
by the XML frameworks used in the Lexical Markup Framework standard ISO 24613,
|
||||
which it would be fairly easy to convert our <a href="3-nc.html#SP1" class="internal">name_cluster</a> objects to.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -90,7 +90,6 @@ easy to convert our <a href="3-nc.html#SP1" class="internal">name_cluster</a> ob
|
|||
<span class="plain-syntax">} </span><span class="reserved-syntax">name_cluster</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">individual_name</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">principal_meaning</span><span class="plain-syntax">; </span><span class="comment-syntax"> for the client to attach some meaning</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">declension</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">name_number</span><span class="plain-syntax">; </span><span class="comment-syntax"> 1 for singular, 2 for plural</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">name_gender</span><span class="plain-syntax">; </span><span class="comment-syntax"> 1 is neuter, 2 is masculine, 3 is feminine</span>
|
||||
|
@ -117,7 +116,6 @@ easy to convert our <a href="3-nc.html#SP1" class="internal">name_cluster</a> ob
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gender</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">individual_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">principal_meaning</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">in</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP5" class="function-link"><span class="function-syntax">Declensions::of_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="identifier-syntax">gender</span><span class="plain-syntax">, </span><span class="identifier-syntax">number</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">name_language</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">name_number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">number</span><span class="plain-syntax">;</span>
|
||||
|
@ -241,7 +239,7 @@ and wouldn't pass through the pluralising tries intact.
|
|||
</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">Clusters::set_plural_name</span><span class="plain-syntax">(</span><span class="reserved-syntax">name_cluster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cl</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Clusters::set_plural_in_language</span><span class="plain-syntax">(</span><span class="reserved-syntax">name_cluster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cl</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</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">in</span><span class="plain-syntax">, </span><span class="reserved-syntax">individual_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">cl</span><span class="plain-syntax">-></span><span class="element-syntax">listed</span><span class="plain-syntax">)</span>
|
||||
|
@ -276,7 +274,7 @@ falling back on English if there's none registered:
|
|||
</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">Clusters::get_name_in_play</span><span class="plain-syntax">(</span><span class="reserved-syntax">name_cluster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cl</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural_flag</span><span class="plain-syntax">,</span>
|
||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Clusters::get_name_in_language</span><span class="plain-syntax">(</span><span class="reserved-syntax">name_cluster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cl</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural_flag</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nl</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">number_sought</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">plural_flag</span><span class="plain-syntax">) </span><span class="identifier-syntax">number_sought</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
||||
|
@ -303,24 +301,6 @@ falling back on English if there's none registered:
|
|||
<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"></a><b>§9. Meanings. </b>We will come to how excerpts of text are given meanings later on. For now, it's
|
||||
enough to say that each individual name can have one, and that the pointer
|
||||
to an <span class="extract"><span class="extract-syntax">excerpt_meaning</span></span> records it.
|
||||
</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">Clusters::set_principal_meaning</span><span class="plain-syntax">(</span><span class="reserved-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</span><span class="plain-syntax">, </span><span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">meaning</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">in</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">"no individual name"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">principal_meaning</span><span class="plain-syntax"> = </span><span class="identifier-syntax">meaning</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="function-syntax">Clusters::get_principal_meaning</span><span class="plain-syntax">(</span><span class="reserved-syntax">name_cluster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</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">in</span><span class="plain-syntax">, </span><span class="reserved-syntax">individual_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">cl</span><span class="plain-syntax">-></span><span class="element-syntax">listed</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">principal_meaning</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_GENERAL_POINTER</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-lc.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-tai.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-lc.html">lc</a></li><li class="progresscurrent">nc</li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="3-dcl.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
|
|
@ -209,9 +209,9 @@ make two further checks:
|
|||
<span class="Preform-plain-syntax"> } </span><span class="Preform-reserved-syntax">else</span><span class="Preform-plain-syntax"> {</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lexicon::retrieve</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">NOUN_MC</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">) {</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">noun</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Nouns::disambiguate</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">HIGH_NOUN_PRIORITY</span><span class="Preform-plain-syntax">);</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">noun</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Nouns::disambiguate</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">p</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">);</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax">) </span><span class="Preform-identifier-syntax">K</span><span class="Preform-plain-syntax"> = </span><a href="2-knd.html#SP18" class="function-link"><span class="Preform-function-syntax">Kinds::base_construction</span></a><span class="Preform-plain-syntax">(</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">RETRIEVE_POINTER_kind_constructor</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Nouns::tag_holder</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax">)));</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">RETRIEVE_POINTER_kind_constructor</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Nouns::meaning</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">nt</span><span class="Preform-plain-syntax">)));</span>
|
||||
<span class="Preform-plain-syntax"> }</span>
|
||||
<span class="Preform-plain-syntax"> }</span>
|
||||
<span class="Preform-plain-syntax"> }</span>
|
||||
|
|
|
@ -141,6 +141,7 @@ forge new kind constructors.
|
|||
<span class="plain-syntax"> </span><span class="comment-syntax"> H: representing this kind at run-time</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">weak_kind_ID</span><span class="plain-syntax">; </span><span class="comment-syntax"> as used at run-time by the I6 template</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name_in_template_code</span><span class="plain-syntax">; </span><span class="comment-syntax"> an I6 identifier</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">class_number</span><span class="plain-syntax">; </span><span class="comment-syntax"> for classes of object</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con_iname</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">kc_package</span><span class="plain-syntax">;</span>
|
||||
|
@ -339,6 +340,7 @@ I6 template files.
|
|||
<span class="plain-syntax"> </span><span class="comment-syntax"> H: representing this kind at run-time</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">weak_kind_ID</span><span class="plain-syntax"> = </span><span class="identifier-syntax">next_free_data_type_ID</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">name_in_template_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">class_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> I: storing values at run-time</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">multiple_block</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -435,7 +437,7 @@ of the constructor:
|
|||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Constructors::get_name</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">Kinds::Constructors::get_name</span></span>:<br/><a href="2-kc2.html#SP9">§9</a><br/>Kind Interpreter - <a href="2-ki.html#SP21">§21</a><br/>Using Kinds - <a href="2-uk.html#SP1">§1</a><br/>Describing Kinds - <a href="2-dk.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind_constructor</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural_form</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">dt_tag</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">dt_tag</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural_form</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural_form</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>
|
||||
|
@ -444,7 +446,7 @@ of the constructor:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">dt_tag</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">dt_tag</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::get_name_in_play</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural_form</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::nominative_in_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural_form</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</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>
|
||||
|
|
|
@ -1087,13 +1087,17 @@ concatenated with newlines dividing them, in a text stream.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">LW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::end</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">tcc</span><span class="plain-syntax"> == </span><span class="constant-syntax">singular_KCC</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">ro</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">con</span><span class="plain-syntax">-></span><span class="element-syntax">group</span><span class="plain-syntax"> != </span><span class="constant-syntax">PROPER_CONSTRUCTOR_GRP</span><span class="plain-syntax">) </span><span class="identifier-syntax">ro</span><span class="plain-syntax"> = </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">REGISTER_PLURAL_NTOPT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">group</span><span class="plain-syntax"> != </span><span class="constant-syntax">PROPER_CONSTRUCTOR_GRP</span><span class="plain-syntax">) </span><span class="identifier-syntax">ro</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">WITH_PLURAL_FORMS_NTOPT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_common_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">LW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">ro</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::new_common_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">LW</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="identifier-syntax">ro</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">KIND_SLOW_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_kind_constructor</span><span class="plain-syntax">(</span><span class="identifier-syntax">con</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">dt_tag</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</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">Nouns::set_plural_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">dt_tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">LW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</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">endif</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::set_nominative_plural_in_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">con</span><span class="plain-syntax">-></span><span class="element-syntax">dt_tag</span><span class="plain-syntax">, </span><span class="identifier-syntax">LW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</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="plain-syntax"> }</span>
|
||||
|
|
|
@ -858,12 +858,12 @@ matched up with the inference subject already existing.
|
|||
<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="constant-syntax">KIND_SLOW_MC</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-kc.html#SP9" class="function-link"><span class="function-syntax">Kinds::Compare::le</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">super</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">)) </span><span class="identifier-syntax">mc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOUN_MC</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Nouns::new_common_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NEUTER_GENDER</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> +</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_PLURAL_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">ATTACH_TO_SEARCH_LIST_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax"> + </span><span class="identifier-syntax">WITH_PLURAL_FORMS_NTOPT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">KIND_SLOW_MC</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_kind_constructor</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</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-kc.html#SP9" class="function-link"><span class="function-syntax">Kinds::Compare::le</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">super</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Nouns::set_range_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">no_kinds_of_object</span><span class="plain-syntax">++);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::Headings::initialise_noun_resolution</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-kc2.html#SP8" class="function-link"><span class="function-syntax">Kinds::Constructors::attach_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</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-kc.html#SP9" class="function-link"><span class="function-syntax">Kinds::Compare::le</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">super</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="2-uk.html#SP1" class="function-link"><span class="function-syntax">Kinds::Behaviour::set_range_number</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">no_kinds_of_object</span><span class="plain-syntax">++);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-knd.html#SP33">§33</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP34"></a><b>§34. Kind names in the I6 template. </b>We defined some "constant" kinds and constructors above, to provide
|
||||
|
|
|
@ -99,13 +99,23 @@ MathJax = {
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </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">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">dt_tag</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">Kinds::Behaviour::get_range_number</span><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">class_number</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">Kinds::Behaviour::set_range_number</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">Kinds::Behaviour::set_range_number</span></span>:<br/>Kinds - <a href="2-knd.html#SP33_2">§33.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">class_number</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"></a><b>§2. Definiteness. </b>A kind like "number" is definite. One way to be indefinite is to be a
|
||||
kind of kind, like "arithmetic value":
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::is_kind_of_kind</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">Kinds::Behaviour::is_kind_of_kind</span></span>:<br/>Describing Kinds - <a href="2-dk.html#SP15">§15</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::is_kind_of_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">Kinds::Behaviour::is_kind_of_kind</span></span>:<br/>Describing Kinds - <a href="2-dk.html#SP15">§15</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="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">K</span><span class="plain-syntax">-></span><span class="identifier-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">group</span><span class="plain-syntax"> == </span><span class="constant-syntax">KIND_OF_KIND_GRP</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>
|
||||
|
@ -117,7 +127,7 @@ checks that we aren't doing that:
|
|||
</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">Kinds::Behaviour::definite</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">Kinds::Behaviour::definite</span></span>:<br/><a href="2-uk.html#SP26">§26</a><br/>Kind Checking - <a href="2-kc.html#SP13">§13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::definite</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">Kinds::Behaviour::definite</span></span>:<br/><a href="2-uk.html#SP26">§26</a><br/>Kind Checking - <a href="2-kc.html#SP13">§13</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="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><a href="2-kc2.html#SP15" class="function-link"><span class="function-syntax">Kinds::Constructors::is_definite</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">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">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">arity</span><span class="plain-syntax"> = </span><a href="2-kc2.html#SP14" class="function-link"><span class="function-syntax">Kinds::Constructors::arity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
|
||||
|
@ -189,7 +199,7 @@ has been used, the matter is settled and there is no going back.
|
|||
</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">Kinds::Behaviour::is_an_enumeration</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">Kinds::Behaviour::is_an_enumeration</span></span>:<br/><a href="2-uk.html#SP17">§17</a>, <a href="2-uk.html#SP29">§29</a>, <a href="2-uk.html#SP30">§30</a>, <a href="2-uk.html#SP32">§32</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::is_an_enumeration</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">Kinds::Behaviour::is_an_enumeration</span></span>:<br/><a href="2-uk.html#SP17">§17</a>, <a href="2-uk.html#SP29">§29</a>, <a href="2-uk.html#SP30">§30</a>, <a href="2-uk.html#SP32">§32</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-kc2.html#SP15" class="function-link"><span class="function-syntax">Kinds::Constructors::is_enumeration</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -209,7 +219,7 @@ if the kind was already a unit or was successfully converted into one,
|
|||
</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">Kinds::Behaviour::convert_to_enumeration</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">Kinds::Behaviour::convert_to_enumeration</span></span>:<br/><a href="2-uk.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-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">Kinds::Behaviour::convert_to_enumeration</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">Kinds::Behaviour::convert_to_enumeration</span></span>:<br/><a href="2-uk.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) </span><a href="2-kc2.html#SP11" class="function-link"><span class="function-syntax">Kinds::Constructors::convert_to_enumeration</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -245,12 +255,12 @@ by the next instance to be created.
|
|||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. (C) Compatibility with other kinds. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::set_superkind_set_at</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">Kinds::Behaviour::set_superkind_set_at</span></span>:<br/>Kind Checking - <a href="2-kc.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::set_superkind_set_at</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">Kinds::Behaviour::set_superkind_set_at</span></span>:<br/>Kind Checking - <a href="2-kc.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </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">"set_superkind_set_at for null kind"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">superkind_set_at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">S</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_superkind_set_at</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">Kinds::Behaviour::get_superkind_set_at</span></span>:<br/>Kind Checking - <a href="2-kc.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_superkind_set_at</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">Kinds::Behaviour::get_superkind_set_at</span></span>:<br/>Kind Checking - <a href="2-kc.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="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">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">superkind_set_at</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -345,29 +355,29 @@ track of dimensions, and the following routines connect the code in the
|
|||
</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">Kinds::Behaviour::is_quasinumerical</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">Kinds::Behaviour::is_quasinumerical</span></span>:<br/><a href="2-uk.html#SP32">§32</a><br/>Dimensions - <a href="2-dmn.html#SP18">§18</a>, <a href="2-dmn.html#SP30_3">§30.3</a>, <a href="2-dmn.html#SP31">§31</a>, <a href="2-dmn.html#SP32_2">§32.2</a>, <a href="2-dmn.html#SP33">§33</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::is_quasinumerical</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">Kinds::Behaviour::is_quasinumerical</span></span>:<br/><a href="2-uk.html#SP32">§32</a><br/>Dimensions - <a href="2-dmn.html#SP18">§18</a>, <a href="2-dmn.html#SP30_3">§30.3</a>, <a href="2-dmn.html#SP31">§31</a>, <a href="2-dmn.html#SP32_2">§32.2</a>, <a href="2-dmn.html#SP33">§33</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-kc2.html#SP15" class="function-link"><span class="function-syntax">Kinds::Constructors::is_arithmetic</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">unit_sequence</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_dimensional_form</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">Kinds::Behaviour::get_dimensional_form</span></span>:<br/>Describing Kinds - <a href="2-dk.html#SP24_1">§24.1</a><br/>Dimensions - <a href="2-dmn.html#SP30_2">§30.2</a>, <a href="2-dmn.html#SP30_3">§30.3</a>, <a href="2-dmn.html#SP30_4">§30.4</a>, <a href="2-dmn.html#SP31">§31</a>, <a href="2-dmn.html#SP32_2">§32.2</a>, <a href="2-dmn.html#SP33">§33</a>, <a href="2-dmn.html#SP40">§40</a>, <a href="2-dmn.html#SP40_3">§40.3</a>, <a href="2-dmn.html#SP41">§41</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">unit_sequence</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_dimensional_form</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">Kinds::Behaviour::get_dimensional_form</span></span>:<br/>Describing Kinds - <a href="2-dk.html#SP24_1">§24.1</a><br/>Dimensions - <a href="2-dmn.html#SP30_2">§30.2</a>, <a href="2-dmn.html#SP30_3">§30.3</a>, <a href="2-dmn.html#SP30_4">§30.4</a>, <a href="2-dmn.html#SP31">§31</a>, <a href="2-dmn.html#SP32_2">§32.2</a>, <a href="2-dmn.html#SP33">§33</a>, <a href="2-dmn.html#SP40">§40</a>, <a href="2-dmn.html#SP40_3">§40.3</a>, <a href="2-dmn.html#SP41">§41</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="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><a href="2-uk.html#SP19" class="function-link"><span class="function-syntax">Kinds::Behaviour::is_quasinumerical</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="identifier-syntax">construct</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CON_INTERMEDIATE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">intermediate_result</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> &(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">dimensional_form</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">Kinds::Behaviour::test_if_derived</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">Kinds::Behaviour::test_if_derived</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP30_1">§30.1</a>, <a href="2-dmn.html#SP33">§33</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::test_if_derived</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">Kinds::Behaviour::test_if_derived</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP30_1">§30.1</a>, <a href="2-dmn.html#SP33">§33</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="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">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">dimensional_form_fixed</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">Kinds::Behaviour::now_derived</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">Kinds::Behaviour::now_derived</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP30_2">§30.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">Kinds::Behaviour::now_derived</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">Kinds::Behaviour::now_derived</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP30_2">§30.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"can't derive null kind"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">dimensional_form_fixed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::scale_factor</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">Kinds::Behaviour::scale_factor</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP35">§35</a>, <a href="2-dmn.html#SP36">§36</a>, <a href="2-dmn.html#SP37">§37</a>, <a href="2-dmn.html#SP38">§38</a>, <a href="2-dmn.html#SP39">§39</a>, <a href="2-dmn.html#SP40_4">§40.4</a><br/>Floating-Point Values - <a href="2-fv.html#SP4">§4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::scale_factor</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">Kinds::Behaviour::scale_factor</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP35">§35</a>, <a href="2-dmn.html#SP36">§36</a>, <a href="2-dmn.html#SP37">§37</a>, <a href="2-dmn.html#SP38">§38</a>, <a href="2-dmn.html#SP39">§39</a>, <a href="2-dmn.html#SP40_4">§40.4</a><br/>Floating-Point Values - <a href="2-fv.html#SP4">§4</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="identifier-syntax">intermediate_result</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-dmn.html#SP27" class="function-link"><span class="function-syntax">Kinds::Dimensions::us_get_scaling_factor</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">intermediate_result</span><span class="plain-syntax">);</span>
|
||||
|
@ -383,7 +393,7 @@ operations can be applied, and if so, what kind the result has.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">dimensional_rules</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_dim_rules</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">Kinds::Behaviour::get_dim_rules</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP16">§16</a>, <a href="2-dmn.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">dimensional_rules</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_dim_rules</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">Kinds::Behaviour::get_dim_rules</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP16">§16</a>, <a href="2-dmn.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="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">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">dim_rules</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -391,7 +401,7 @@ operations can be applied, and if so, what kind the result has.
|
|||
<p class="commentary firstcommentary"><a id="SP21"></a><b>§21. (H) Representing this kind at run-time. </b></p>
|
||||
|
||||
<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">Kinds::Behaviour::get_name_in_template_code</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">Kinds::Behaviour::get_name_in_template_code</span></span>:<br/>Kinds - <a href="2-knd.html#SP33">§33</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_name_in_template_code</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">Kinds::Behaviour::get_name_in_template_code</span></span>:<br/>Kinds - <a href="2-knd.html#SP33">§33</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"UNKNOWN_NT"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">name_in_template_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -451,7 +461,7 @@ for a pointer-value kind, in bytes.
|
|||
<p class="commentary firstcommentary"><a id="SP26"></a><b>§26. </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">Kinds::Behaviour::cast_possible</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">Kinds::Behaviour::cast_possible</span></span>:<br/><a href="2-uk.html#SP27">§27</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Behaviour::cast_possible</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">Kinds::Behaviour::cast_possible</span></span>:<br/><a href="2-uk.html#SP27">§27</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><a href="2-knd.html#SP30" class="function-link"><span class="function-syntax">Kinds::weaken</span></a><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">to</span><span class="plain-syntax"> = </span><a href="2-knd.html#SP30" class="function-link"><span class="function-syntax">Kinds::weaken</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">to</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">to</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">from</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">to</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax"> != </span><span class="identifier-syntax">from</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">) &&</span>
|
||||
|
@ -753,12 +763,12 @@ values for each kind:
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">index_default_value</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_index_minimum_value</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">Kinds::Behaviour::get_index_minimum_value</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP32_2_1">§32.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_index_minimum_value</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_index_minimum_value</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP32_2_1">§32.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="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">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">index_minimum_value</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_index_maximum_value</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_index_maximum_value</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP32_2_2">§32.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::Behaviour::get_index_maximum_value</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Kinds::Behaviour::get_index_maximum_value</span></span>:<br/>Dimensions - <a href="2-dmn.html#SP32_2_2">§32.2.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="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">K</span><span class="plain-syntax">-></span><span class="element-syntax">construct</span><span class="plain-syntax">-></span><span class="element-syntax">index_maximum_value</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -83,9 +83,9 @@ which use this module:
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">LexiconModule::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="named-paragraph-container code-font"><a href="1-lm.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Register this module's debugging log aspects</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-lm.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Register this module's debugging log writers</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Cardinals::enable_in_word_form</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Articles::mark_for_preform</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Prepositions::mark_for_preform</span><span class="plain-syntax">();</span>
|
||||
<span class="comment-syntax"> Cardinals::enable_in_word_form();</span>
|
||||
<span class="comment-syntax"> Articles::mark_for_preform();</span>
|
||||
<span class="comment-syntax"> Prepositions::mark_for_preform();</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">LexiconModule::end</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -74,11 +74,11 @@ certainly doesn't use settings as minimal as these — see
|
|||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">ONE_WEIRD_TRICK_DISCOVERED_BY_A_MOM_MC</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000004</span><span class="plain-syntax"> </span><span class="comment-syntax"> meaningless, so do not use</span>
|
||||
<span class="plain-syntax">@</span><span class="reserved-syntax">default</span><span class="plain-syntax"> </span><span class="constant-syntax">EXACT_PARSING_BITMAP</span>
|
||||
<span class="definition-keyword">default</span> <span class="constant-syntax">EXACT_PARSING_BITMAP</span>
|
||||
<span class="plain-syntax"> (</span><span class="constant-syntax">MISCELLANEOUS_MC</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax">@</span><span class="reserved-syntax">default</span><span class="plain-syntax"> </span><span class="constant-syntax">SUBSET_PARSING_BITMAP</span>
|
||||
<span class="definition-keyword">default</span> <span class="constant-syntax">SUBSET_PARSING_BITMAP</span>
|
||||
<span class="plain-syntax"> (</span><span class="constant-syntax">NOUN_MC</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax">@</span><span class="reserved-syntax">default</span><span class="plain-syntax"> </span><span class="constant-syntax">PARAMETRISED_PARSING_BITMAP</span>
|
||||
<span class="definition-keyword">default</span> <span class="constant-syntax">PARAMETRISED_PARSING_BITMAP</span>
|
||||
<span class="plain-syntax"> (</span><span class="constant-syntax">ONE_WEIRD_TRICK_DISCOVERED_BY_A_MOM_MC</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. Parsing methods. </b>The excerpt parser tests a given wording to see if it matches something
|
||||
|
|
|
@ -138,20 +138,20 @@ which use this module:
|
|||
syntax tree.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">verbal_certainty_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: certainty level if known</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">verbal_certainty_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: certainty level if known</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">sentence_is_existential_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: such as "there is a man"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">linguistic_error_here_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: one of the errors occurred here</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">inverted_verb_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: an inversion of subject and object has occurred</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">possessive_verb_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: this is a non-relative use of "to have"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">verb_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">verb_usage</span></span><span class="comment-syntax">: what's being done here</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">preposition_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">preposition_identity</span></span><span class="comment-syntax">: which preposition, if any, qualifies it</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">second_preposition_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">preposition_identity</span></span><span class="comment-syntax">: which further preposition, if any, qualifies it</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">verb_meaning_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">verb_meaning</span></span><span class="comment-syntax">: what it means</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">nounphrase_article_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: definite or indefinite article: see below</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">plural_reference_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: used by PROPER NOUN nodes for evident plurals</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">gender_reference_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: used by PROPER NOUN nodes for evident genders</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">inverted_verb_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: an inversion of subject and object has occurred</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">possessive_verb_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: this is a non-relative use of "to have"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">verb_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">verb_usage</span></span><span class="comment-syntax">: what's being done here</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">preposition_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">preposition_identity</span></span><span class="comment-syntax">: which preposition, if any, qualifies it</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">second_preposition_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">preposition_identity</span></span><span class="comment-syntax">: which further preposition, if any, qualifies it</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">verb_meaning_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">verb_meaning</span></span><span class="comment-syntax">: what it means</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">nounphrase_article_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: definite or indefinite article: see below</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">plural_reference_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: used by PROPER NOUN nodes for evident plurals</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">gender_reference_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: used by PROPER NOUN nodes for evident genders</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">relationship_node_type_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: what kind of inference this assertion makes</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">implicitly_refers_to_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: this will implicitly refer to something</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">implicitly_refers_to_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: this will implicitly refer to something</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">verb</span><span class="plain-syntax">, </span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax">)</span>
|
||||
|
@ -178,7 +178,7 @@ initialises, it calls the following routine to improve its performance.
|
|||
<span class="plain-syntax"> </span><a href="3-prp.html#SP11" class="function-link"><span class="function-syntax">Prepositions::preform_optimiser</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">first_round_of_nt_optimisation_made</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">first_round_of_nt_optimisation_made</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP18" class="function-link"><span class="function-syntax">Quantifiers::make_built_in</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP17" class="function-link"><span class="function-syntax">Quantifiers::make_built_in</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -76,16 +76,16 @@ adjectives, verbs and nouns, it can't make new pronouns.
|
|||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><pronoun></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nominative-pronoun></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]</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><accusative-pronoun></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nominative-pronoun></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]</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><accusative-pronoun></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
||||
|
||||
<span class="Preform-function-syntax"><nominative-pronoun></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">it/he/she</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 </span><span class="Preform-comment-syntax"> singular</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">they</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">it/he/she</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 </span><span class="Preform-comment-syntax"> singular</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">they</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
||||
|
||||
<span class="Preform-function-syntax"><accusative-pronoun></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">it/him/her</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 </span><span class="Preform-comment-syntax"> singular</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">them</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">it/him/her</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 </span><span class="Preform-comment-syntax"> singular</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">them</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</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="SP2"></a><b>§2. Possessives. </b>Inform uses these not only for parsing but also to inflect text. For example,
|
||||
|
@ -97,16 +97,16 @@ person to second person).
|
|||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><possessive-first-person></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">my</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 </span><span class="Preform-comment-syntax"> singular</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">our</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">my</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 </span><span class="Preform-comment-syntax"> singular</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">our</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
||||
|
||||
<span class="Preform-function-syntax"><possessive-second-person></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</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 </span><span class="Preform-comment-syntax"> singular</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</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 </span><span class="Preform-comment-syntax"> singular</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
||||
|
||||
<span class="Preform-function-syntax"><possessive-third-person></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">its/his/her</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 </span><span class="Preform-comment-syntax"> singular</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">their</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">its/his/her</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 </span><span class="Preform-comment-syntax"> singular</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">their</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. Articles. </b></p>
|
||||
|
@ -118,20 +118,22 @@ person to second person).
|
|||
</pre>
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><indefinite-article></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]</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><definite-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><indefinite-article></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]</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><definite-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>The articles need to be single words, and the following two productions
|
||||
have an unusual convention: they are required to have production numbers
|
||||
which encode both the implied grammatical number and gender.
|
||||
which encode both the implied grammatical number and gender. These numbers
|
||||
mean:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>(a) singular, neuter; (b) masculine; (c) feminine
|
||||
</li><li>(d) plural, neuter; (e) masculine; (f) feminine
|
||||
</li></ul>
|
||||
<p class="commentary">In English gender doesn't appear in articles, and "the" is ambiguous as to
|
||||
number in any case, so we end up with something quite dull:
|
||||
<p class="commentary"><span class="extract"><span class="Preform-extract-syntax">/a/</span></span> singular, neuter; <span class="extract"><span class="Preform-extract-syntax">/b/</span></span> singular, masculine; <span class="extract"><span class="Preform-extract-syntax">/c/</span></span> singular, feminine;
|
||||
<span class="extract"><span class="Preform-extract-syntax">/d/</span></span> plural, neuter; <span class="extract"><span class="Preform-extract-syntax">/e/</span></span> plural, masculine; <span class="extract"><span class="Preform-extract-syntax">/f/</span></span> plural, feminine.
|
||||
</p>
|
||||
|
||||
<p class="commentary">But since in English gender doesn't appear in articles, and "the" is ambiguous
|
||||
as to number in any case, we end up with something quite dull as the default:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -162,9 +164,9 @@ number in any case, so we end up with something quite dull:
|
|||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b></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">Articles::remove_the</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">Articles::remove_the</span></span>:<br/>Determiners and Quantifiers - <a href="2-daq.html#SP17">§17</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::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">) > </span><span class="constant-syntax">1</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="function-syntax"><optional-definite-article></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">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><optional-definite-article></span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Articles::remove_the</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">Articles::remove_the</span></span>:<br/>Determiners and Quantifiers - <a href="2-daq.html#SP16">§16</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::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">) > </span><span class="constant-syntax">1</span><span class="plain-syntax">) && (</span><span class="function-syntax"><optional-definite-article></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><optional-definite-article></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">W</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
|
@ -202,6 +204,8 @@ is never treated as a participle.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</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="SP9"></a><b>§9. Marking for Preform efficiency. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Articles::mark_for_preform</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">Articles::mark_for_preform</span></span>:<br/>Linguistics Module - <a href="1-lm.html#SP3">§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="identifier-syntax">NTI::give_nt_reserved_incidence_bit</span><span class="plain-syntax">(</span><span class="function-syntax"><article></span><span class="plain-syntax">, </span><span class="identifier-syntax">ARTICLE_RES_NT_BIT</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -102,7 +102,7 @@ ever brings up.)
|
|||
distinct from its meaning, and this is it.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="plain-syntax">@</span><span class="reserved-syntax">default</span><span class="plain-syntax"> </span><span class="constant-syntax">ADJECTIVE_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">default</span> <span class="constant-syntax">ADJECTIVE_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span>
|
||||
</pre>
|
||||
<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">adjectival_phrase</span><span class="plain-syntax"> {</span>
|
||||
|
@ -123,7 +123,7 @@ distinct from its meaning, and this is it.
|
|||
<span class="reserved-syntax">adjectival_phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">Adjectives::declare</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">Adjectives::declare</span></span>:<br/><a href="2-adj.html#SP8">§8</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">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">adjectival_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</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">aph</span><span class="plain-syntax">, </span><span class="reserved-syntax">adjectival_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">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Clusters::get_name_in_play</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">-></span><span class="element-syntax">adjective_names</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</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">C</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Clusters::get_name_in_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">-></span><span class="element-syntax">adjective_names</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span 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">C</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">aph</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><a href="2-adj.html#SP4" class="function-link"><span class="function-syntax">Adjectives::from_word_range</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
|
@ -166,7 +166,7 @@ distinct from its meaning, and this is it.
|
|||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b></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">Adjectives::get_text</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">Adjectives::get_text</span></span>:<br/><a href="2-adj.html#SP9">§9</a><br/>Adjective Usages - <a href="2-au.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">adjectival_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Adjectives::get_text</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">Adjectives::get_text</span></span>:<br/><a href="2-adj.html#SP9">§9</a><br/>Adjective Usages - <a href="2-au.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">adjectival_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural</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">Clusters::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">-></span><span class="element-syntax">adjective_names</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -198,7 +198,8 @@ the following is unambiguous:
|
|||
<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"></a><b>§8. Testing agreement. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. Testing agreement. </b>This is used in unit testing.
|
||||
</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">Adjectives::test_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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>
|
||||
|
|
|
@ -12,6 +12,14 @@
|
|||
<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">
|
||||
|
||||
</head>
|
||||
|
@ -58,9 +66,7 @@
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Services</a></li><li><a href="index.html">linguistics</a></li><li><a href="index.html#2">Chapter 2: Grammatical Categories I</a></li><li><b>Adjective Usages</b></li></ul></div>
|
||||
<p class="purpose">A lightweight structure to record uses of an adjective, either positively or negatively.</p>
|
||||
|
||||
<ul class="toc"><li><a href="2-au.html#SP1">§1. Adjective usages</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Adjective usages. </b>This really is just an ordered pair of an adjective and a boolean:
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. </b>This really is just an ordered pair of an adjective and a boolean:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -80,18 +86,26 @@
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">au</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">adjective_usage</span><span class="plain-syntax"> *</span><span class="function-syntax">AdjectiveUsages::copy</span><span class="plain-syntax">(</span><span class="reserved-syntax">adjective_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">au_from</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-au.html#SP2" class="function-link"><span class="function-syntax">AdjectiveUsages::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">au_from</span><span class="plain-syntax">-></span><span class="element-syntax">ref_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">au_from</span><span class="plain-syntax">-></span><span class="element-syntax">ref_positive</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>Logging:
|
||||
</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">AdjectiveUsages::log</span><span class="plain-syntax">(</span><span class="reserved-syntax">adjective_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">au</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">adjectival_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> = </span><a href="2-au.html#SP2" class="function-link"><span class="function-syntax">AdjectiveUsages::get_aph</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">au</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">adjectival_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> = </span><a href="2-au.html#SP4" class="function-link"><span class="function-syntax">AdjectiveUsages::get_aph</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">au</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">au</span><span class="plain-syntax">-></span><span class="element-syntax">ref_positive</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</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="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><a href="2-adj.html#SP5" class="function-link"><span class="function-syntax">Adjectives::get_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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</span><span class="plain-syntax">(</span><span class="string-syntax">"<adj:%W>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>Access:
|
||||
</p>
|
||||
|
||||
<span class="reserved-syntax">adjective_usage</span><span class="plain-syntax"> *</span><span class="function-syntax">AdjectiveUsages::copy</span><span class="plain-syntax">(</span><span class="reserved-syntax">adjective_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">au_from</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-au.html#SP2" class="function-link"><span class="function-syntax">AdjectiveUsages::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">au_from</span><span class="plain-syntax">-></span><span class="element-syntax">ref_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">au_from</span><span class="plain-syntax">-></span><span class="element-syntax">ref_positive</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">adjectival_phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">AdjectiveUsages::get_aph</span><span class="plain-syntax">(</span><span class="reserved-syntax">adjective_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">au</span><span class="plain-syntax">) {</span>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">adjectival_phrase</span><span class="plain-syntax"> *</span><span class="function-syntax">AdjectiveUsages::get_aph</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">AdjectiveUsages::get_aph</span></span>:<br/><a href="2-au.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">adjective_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">au</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">au</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">au</span><span class="plain-syntax">-></span><span class="element-syntax">ref_to</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -100,7 +114,12 @@
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">au</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 adjective tested for positivity"</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">au</span><span class="plain-syntax">-></span><span class="element-syntax">ref_positive</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>And this is the only non-trivial thing one can do with an adjective usage:
|
||||
reverse its sense.
|
||||
</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">AdjectiveUsages::flip_parity</span><span class="plain-syntax">(</span><span class="reserved-syntax">adjective_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">au</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">au</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 adjective flipped"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">au</span><span class="plain-syntax">-></span><span class="element-syntax">ref_positive</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">au</span><span class="plain-syntax">-></span><span class="element-syntax">ref_positive</span><span class="plain-syntax">)?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -115,8 +115,8 @@ this is not a noun, and isn't allowed as a constant value in Inform.
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>Those two nonterminals here simply supply text: for efficiency reasons we
|
||||
don't actually parse them, although they would give the correct response if
|
||||
we did. Instead they're scanned for words which are marked with the appropriate
|
||||
don't actually parse against them, although they would give the correct response
|
||||
if we did. Instead they're scanned for words which are marked with the appropriate
|
||||
numbers.
|
||||
</p>
|
||||
|
||||
|
@ -178,7 +178,7 @@ in decimal digits, perhaps with a minus sign.
|
|||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_1"></a><b>§4.1. </b>These mustn't match any number too large to fit into the virtual machine
|
||||
being compiled to, so "42000", for instance, is not a valid literal if Inform
|
||||
is parsing text in a work intended for the 16-bit Z-machine.
|
||||
is parsing text in a work intended for a 16-bit VM.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Why do we catch this here? The answer is probably that it's an excess of
|
||||
|
|
|
@ -81,11 +81,9 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Services</a></li><li><a href="index.html">linguistics</a></li><li><a href="index.html#2">Chapter 2: Grammatical Categories I</a></li><li><b>Determiners and Quantifiers</b></li></ul></div>
|
||||
<p class="purpose">To create the determiners found in standard English which refer to collections of things, and to create their meanings as logical quantifiers.</p>
|
||||
|
||||
<ul class="toc"><li><a href="2-daq.html#SP1">§1. Definitions</a></li><li><a href="2-daq.html#SP6">§6. Creating a quantifier</a></li><li><a href="2-daq.html#SP9">§9. Acting on quantifiers</a></li><li><a href="2-daq.html#SP12">§12. Creating a determiner</a></li><li><a href="2-daq.html#SP14">§14. Parsing the determiner at the head of a noun phrase</a></li><li><a href="2-daq.html#SP18">§18. The built-in set</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-daq.html#SP1">§1. How these relate</a></li><li><a href="2-daq.html#SP5">§5. Creating a quantifier</a></li><li><a href="2-daq.html#SP8">§8. Acting on quantifiers</a></li><li><a href="2-daq.html#SP11">§11. Creating a determiner</a></li><li><a href="2-daq.html#SP13">§13. Parsing the determiner at the head of a noun phrase</a></li><li><a href="2-daq.html#SP17">§17. The built-in set</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>In logic, a "quantifier" appears at the front of a statement which can
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. How these relate. </b>In logic, a "quantifier" appears at the front of a statement which can
|
||||
apply to many cases, and describes the quantity of cases for which the
|
||||
statement is true: all of them, some of them, exactly six, and so on.
|
||||
</p>
|
||||
|
@ -119,10 +117,10 @@ passed, but to those which didn't, and those are called "complementary"
|
|||
of closed doors and not the number of open ones.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>These different ways to describe multiple outcomes are represented in Inform by
|
||||
<span class="extract"><span class="extract-syntax">quantifier</span></span> structures. One exists for each different meaning supported
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>These different ways to describe multiple outcomes are represented in Inform by
|
||||
<a href="2-daq.html#SP2" class="internal">quantifier</a> structures. One exists for each different meaning supported
|
||||
by Inform — <span class="extract"><span class="extract-syntax">ForAll</span></span>, <span class="extract"><span class="extract-syntax">Exists</span></span> and so forth — except that some quantifiers
|
||||
take a numerical parameter, and a single <span class="extract"><span class="extract-syntax">quantifier</span></span> structure represents
|
||||
take a numerical parameter, and a single <a href="2-daq.html#SP2" class="internal">quantifier</a> structure represents
|
||||
the meaning for any value of this parameter. For instance, the cardinality
|
||||
quantifiers <span class="extract"><span class="extract-syntax">Card=3</span></span> and <span class="extract"><span class="extract-syntax">Card=17</span></span> are both represented by the same
|
||||
quantifier structure, whose pointer is called <span class="extract"><span class="extract-syntax">exactly_quantifier</span></span> below.
|
||||
|
@ -132,7 +130,6 @@ containers, for instance, where the parameter is 3 or 17 respectively.
|
|||
|
||||
<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">quantifier</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">operator</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">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">operator_prim</span><span class="plain-syntax">; </span><span class="comment-syntax"> inter opcode to compare successes against the threshold</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
|
@ -146,7 +143,7 @@ containers, for instance, where the parameter is 3 or 17 respectively.
|
|||
<span class="plain-syntax">} </span><span class="reserved-syntax">quantifier</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure quantifier is private to this section.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>The built-in set of 16 quantifiers, arranged in eight pairs, is as follows:
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>The built-in set of 16 quantifiers, arranged in eight pairs, is as follows:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -160,7 +157,7 @@ containers, for instance, where the parameter is 3 or 17 respectively.
|
|||
<span class="plain-syntax"> *</span><span class="identifier-syntax">at_most_quantifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">less_than_quantifier</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">exactly_quantifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">other_than_quantifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>Whereas "quantifier" is a term from mathematical logic, "determiner"
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>Whereas "quantifier" is a term from mathematical logic, "determiner"
|
||||
is a term from linguistics which approximately — but only approximately —
|
||||
means the same thing.
|
||||
</p>
|
||||
|
@ -191,24 +188,22 @@ are stored in the <span class="extract"><span class="extract-syntax">determiner<
|
|||
<span class="plain-syntax">} </span><span class="reserved-syntax">determiner</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure determiner is private to this section.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. Creating a quantifier. </b>At present, there's only the built-in set, and no method exists to create
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. Creating a quantifier. </b>At present, there's only the built-in set, and no method exists to create
|
||||
new quantifiers from the source text or the template files, but what follows
|
||||
is written so that it would be fairly easy to add this ability.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="function-syntax">Quantifiers::quant_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">Quantifiers::quant_new</span></span>:<br/><a href="2-daq.html#SP18_1">§18.1</a>, <a href="2-daq.html#SP18_2">§18.2</a>, <a href="2-daq.html#SP18_3">§18.3</a>, <a href="2-daq.html#SP18_4">§18.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">op</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_comp</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="function-syntax">Quantifiers::quant_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">Quantifiers::quant_new</span></span>:<br/><a href="2-daq.html#SP17_1">§17.1</a>, <a href="2-daq.html#SP17_2">§17.2</a>, <a href="2-daq.html#SP17_3">§17.3</a>, <a href="2-daq.html#SP17_4">§17.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">op</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_comp</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quant</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="identifier-syntax">operator</span><span class="plain-syntax"> = </span><span class="identifier-syntax">op</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">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="identifier-syntax">operator_prim</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">strcmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="string-syntax">"=="</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EQ_BIP</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">strcmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="string-syntax">"~="</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NE_BIP</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">strcmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="string-syntax">">="</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GE_BIP</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">strcmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="string-syntax">">"</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GT_BIP</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">strcmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="string-syntax">"<="</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LE_BIP</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">strcmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="string-syntax">"<"</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LT_BIP</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"unfamiliar operator"</span><span 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::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"=="</span><span class="plain-syntax">)) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EQ_BIP</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"~="</span><span class="plain-syntax">)) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NE_BIP</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">">="</span><span class="plain-syntax">)) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GE_BIP</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">">"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GT_BIP</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"<="</span><span class="plain-syntax">)) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LE_BIP</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">Str::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">op</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"<"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator_prim</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LT_BIP</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"unfamiliar operator"</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">quant</span><span class="plain-syntax">-></span><span class="identifier-syntax">T_coefficient</span><span class="plain-syntax"> = </span><span class="identifier-syntax">T</span><span class="plain-syntax">; </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">is_complementary</span><span class="plain-syntax"> = </span><span class="identifier-syntax">is_comp</span><span class="plain-syntax">;</span>
|
||||
|
@ -219,7 +214,7 @@ is written so that it would be fairly easy to add this ability.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">quant</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b>That fills out the whole structure except for the negation pointers, and
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>That fills out the whole structure except for the negation pointers, and
|
||||
to ensure that these always occur in matched pairs, these are set here.
|
||||
</p>
|
||||
|
||||
|
@ -271,14 +266,14 @@ puzzlingly redundant from a traditional logic point of view.
|
|||
</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">Quantifiers::quants_negate_each_other</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">Quantifiers::quants_negate_each_other</span></span>:<br/><a href="2-daq.html#SP18_1">§18.1</a>, <a href="2-daq.html#SP18_2">§18.2</a>, <a href="2-daq.html#SP18_3">§18.3</a>, <a href="2-daq.html#SP18_4">§18.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">qx</span><span class="plain-syntax">, </span><span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">qy</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Quantifiers::quants_negate_each_other</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">Quantifiers::quants_negate_each_other</span></span>:<br/><a href="2-daq.html#SP17_1">§17.1</a>, <a href="2-daq.html#SP17_2">§17.2</a>, <a href="2-daq.html#SP17_3">§17.3</a>, <a href="2-daq.html#SP17_4">§17.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">qx</span><span class="plain-syntax">, </span><span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">qy</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">qx</span><span class="plain-syntax">-></span><span class="element-syntax">negated_quant</span><span class="plain-syntax"> = </span><span class="identifier-syntax">qy</span><span class="plain-syntax">; </span><span class="identifier-syntax">qy</span><span class="plain-syntax">-></span><span class="element-syntax">negated_quant</span><span class="plain-syntax"> = </span><span class="identifier-syntax">qx</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="function-syntax">Quantifiers::get_negation</span><span class="plain-syntax">(</span><span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quant</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">quant</span><span class="plain-syntax">-></span><span class="element-syntax">negated_quant</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b>Logging a quantifier:
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b>Logging a quantifier:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -287,7 +282,7 @@ puzzlingly redundant from a traditional logic point of view.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">log_text</span><span class="plain-syntax">, </span><span class="identifier-syntax">parameter</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. Acting on quantifiers. </b>When compiling code to test a proposition which includes a quantifier, we
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. Acting on quantifiers. </b>When compiling code to test a proposition which includes a quantifier, we
|
||||
need to test the cases in the domain set to see how many of them qualify
|
||||
and how many do not. These counts are stored in local variables called
|
||||
<span class="extract"><span class="extract-syntax">qcy_0</span></span>, <span class="extract"><span class="extract-syntax">qcn_0</span></span> and so on: <span class="extract"><span class="extract-syntax">qcn</span></span> means "quantifier count number" and is
|
||||
|
@ -320,33 +315,6 @@ the resulting I6 is more legible.)
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Quantifiers::compile_test</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quant</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">index</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">quantification_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">TC</span><span class="plain-syntax"> = </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">T_coefficient</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">TC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> -1:</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">is_complementary</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">"qcy_%d %s qcn_%d-%d"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax">, </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator</span><span class="plain-syntax">, </span><span class="identifier-syntax">index</span><span class="plain-syntax">, </span><span class="identifier-syntax">quantification_parameter</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"qcy_%d %s %d"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">index</span><span class="plain-syntax">, </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator</span><span class="plain-syntax">, </span><span class="identifier-syntax">quantification_parameter</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">case</span><span class="plain-syntax"> </span><span class="constant-syntax">10</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">"qcy_%d %s qcn_%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">index</span><span class="plain-syntax">, </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator</span><span class="plain-syntax">, </span><span class="identifier-syntax">index</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">case</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"qcy_%d %s 0"</span><span class="plain-syntax">, </span><span class="identifier-syntax">index</span><span class="plain-syntax">, </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator</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="identifier-syntax">default:</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">strcmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator</span><span class="plain-syntax">, </span><span class="string-syntax">"=="</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"qcy_%d*10 %s %d*qcn_%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">index</span><span class="plain-syntax">, </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator</span><span class="plain-syntax">, </span><span class="identifier-syntax">TC</span><span class="plain-syntax">, </span><span class="identifier-syntax">index</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"qcy_%d %s %d*qcn_%d/10"</span><span class="plain-syntax">, </span><span class="identifier-syntax">index</span><span class="plain-syntax">, </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">operator</span><span class="plain-syntax">, </span><span class="identifier-syntax">TC</span><span class="plain-syntax">, </span><span class="identifier-syntax">index</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="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Quantifiers::emit_test</span><span class="plain-syntax">(</span><span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quant</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">quantification_parameter</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">qcy</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">qcn</span><span class="plain-syntax">) {</span>
|
||||
|
@ -362,11 +330,13 @@ the resulting I6 is more legible.)
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">MINUS_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">qcn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">quantification_parameter</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">inter_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">quantification_parameter</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">());</span>
|
||||
<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">Produce::val_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">qcy</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, (</span><span class="identifier-syntax">inter_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">quantification_parameter</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val</span><span class="plain-syntax">(</span><span class="identifier-syntax">Emit::tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">inter_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">quantification_parameter</span><span class="plain-syntax">);</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">case</span><span class="plain-syntax"> </span><span class="constant-syntax">10</span><span class="plain-syntax">:</span>
|
||||
|
@ -407,7 +377,7 @@ the resulting I6 is more legible.)
|
|||
<span class="plain-syntax">}</span>
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b>"Now" is the Inform way to assert that a proposition should now be made
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>"Now" is the Inform way to assert that a proposition should now be made
|
||||
true. Many quantifiers obstruct this, by introducing too much vagueness.
|
||||
For instance, "now three doors are open" is dangerously vague because it
|
||||
doesn't say which doors are to be made open; similarly "now most of the
|
||||
|
@ -421,7 +391,7 @@ a quantifier shows whether it can be asserted in "now" like this.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">can_be_used_in_now</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. </b>Not every proposition can be used in assertion sentences, either, and
|
||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b>Not every proposition can be used in assertion sentences, either, and
|
||||
again it's the quantifiers which cause the trouble. For instance, "Not
|
||||
every room is dark." gives Inform too little to act on. Which room(s)
|
||||
should it make lighted?
|
||||
|
@ -432,7 +402,7 @@ should it make lighted?
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">quant</span><span class="plain-syntax">-></span><span class="element-syntax">can_be_used_in_assertions</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. Creating a determiner. </b>Again, at present there's only the built-in set, but we want to keep our
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. Creating a determiner. </b>Again, at present there's only the built-in set, but we want to keep our
|
||||
options open.
|
||||
</p>
|
||||
|
||||
|
@ -459,7 +429,7 @@ options open.
|
|||
<span class="definition-keyword">define</span> <span class="constant-syntax">OTHER_THAN_DET_NAME</span><span class="plain-syntax"> </span><span class="constant-syntax">20</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">determiner</span><span class="plain-syntax"> *</span><span class="function-syntax">Quantifiers::det_new</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">Quantifiers::det_new</span></span>:<br/><a href="2-daq.html#SP18_1">§18.1</a>, <a href="2-daq.html#SP18_2">§18.2</a>, <a href="2-daq.html#SP18_3">§18.3</a>, <a href="2-daq.html#SP18_4">§18.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">num</span><span class="plain-syntax">, </span><span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quant</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">determiner</span><span class="plain-syntax"> *</span><span class="function-syntax">Quantifiers::det_new</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">Quantifiers::det_new</span></span>:<br/><a href="2-daq.html#SP17_1">§17.1</a>, <a href="2-daq.html#SP17_2">§17.2</a>, <a href="2-daq.html#SP17_3">§17.3</a>, <a href="2-daq.html#SP17_4">§17.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">not</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">num</span><span class="plain-syntax">, </span><span class="reserved-syntax">quantifier</span><span class="plain-syntax"> *</span><span class="identifier-syntax">quant</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::lit_0</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::wording</span><span class="plain-syntax">(</span><span class="function-syntax"><determiner-names></span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">);</span>
|
||||
|
@ -478,7 +448,7 @@ options open.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">det</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. </b>Inform supports a built-in set of sixteen generalised quantifiers, in
|
||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. </b>Inform supports a built-in set of sixteen generalised quantifiers, in
|
||||
logical terms, and English maps onto these with a rather less elegantly
|
||||
structured set of twenty wordings. One of these doesn't appear below because
|
||||
it's empty of text: this is the determiner in "three blind mice", where
|
||||
|
@ -510,7 +480,7 @@ no text appears in front of the number "three".
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">other</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">than</span>
|
||||
</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"></a><b>§14. Parsing the determiner at the head of a noun phrase. </b>We run through the possible determiners in reverse creation order, choosing the
|
||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. Parsing the determiner at the head of a noun phrase. </b>We run through the possible determiners in reverse creation order, choosing the
|
||||
first which matches. The following returns \(-1\) if nothing was found, or
|
||||
else the first word number after the determiner words, and in that case
|
||||
it also writes a pointer to the quantifier meant to <span class="extract"><span class="Preform-extract-syntax">*which_quant</span></span> and the
|
||||
|
@ -532,7 +502,7 @@ are tried before "all".)
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">determiner</span><span class="plain-syntax"> *</span><span class="identifier-syntax">det</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_BACKWARDS_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">det</span><span class="plain-syntax">, </span><span class="reserved-syntax">determiner</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">not_flag</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">det</span><span class="plain-syntax">-></span><span class="element-syntax">allows_prefixed_not</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP17" class="function-link"><span class="function-syntax">Quantifiers::det_parse_against_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">det</span><span class="plain-syntax">, </span><span class="identifier-syntax">which_P</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP16" class="function-link"><span class="function-syntax">Quantifiers::det_parse_against_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">det</span><span class="plain-syntax">, </span><span class="identifier-syntax">which_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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">not_flag</span><span class="plain-syntax">) *</span><span class="identifier-syntax">which_quant</span><span class="plain-syntax"> = </span><span class="identifier-syntax">det</span><span class="plain-syntax">-></span><span class="element-syntax">quantifier_meant</span><span class="plain-syntax">-></span><span class="element-syntax">negated_quant</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">which_quant</span><span class="plain-syntax"> = </span><span class="identifier-syntax">det</span><span class="plain-syntax">-></span><span class="element-syntax">quantifier_meant</span><span class="plain-syntax">;</span>
|
||||
|
@ -542,7 +512,7 @@ are tried before "all".)
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. </b>We look for a determiner at the start of a noun phrase; this can sometimes
|
||||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. </b>We look for a determiner at the start of a noun phrase; this can sometimes
|
||||
be followed by a number. For example,
|
||||
</p>
|
||||
|
||||
|
@ -569,7 +539,7 @@ names like "three of clubs", meaning a single playing card.
|
|||
<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"> TRUE</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. </b>English has an awkward ambiguity here: what does this mean?
|
||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. </b>English has an awkward ambiguity here: what does this mean?
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
|
@ -591,7 +561,7 @@ from determiner parsing:
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">no</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-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="SP17"></a><b>§17. </b>We attempt to see if the word range begins with (or consists of) text which
|
||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. </b>We attempt to see if the word range begins with (or consists of) text which
|
||||
refers to the given determiner, returning the first word past this text and
|
||||
also (where appropriate) setting the number specified. For instance, for
|
||||
"at least three doors are open" and the <span class="extract"><span class="Preform-extract-syntax">at_least_determiner</span></span> we would
|
||||
|
@ -599,7 +569,7 @@ return the word "doors" and set <span class="extract"><span class="Preform-extra
|
|||
</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">Quantifiers::det_parse_against_text</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">Quantifiers::det_parse_against_text</span></span>:<br/><a href="2-daq.html#SP14">§14</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">determiner</span><span class="plain-syntax"> *</span><span class="identifier-syntax">det</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">which_P</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Quantifiers::det_parse_against_text</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">Quantifiers::det_parse_against_text</span></span>:<br/><a href="2-daq.html#SP13">§13</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">determiner</span><span class="plain-syntax"> *</span><span class="identifier-syntax">det</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">which_P</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">parameter</span><span class="plain-syntax"> = -1;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">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">W</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">x</span><span class="plain-syntax"> = </span><span class="identifier-syntax">WordAssemblages::parse_as_weakly_initial_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">det</span><span class="plain-syntax">-></span><span class="element-syntax">text_of_det</span><span class="plain-syntax">),</span>
|
||||
|
@ -621,20 +591,20 @@ return the word "doors" and set <span class="extract"><span class="Preform-extra
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP18"></a><b>§18. The built-in set. </b>We now construct both the tidy logical world of 16 quantifiers in matched
|
||||
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. The built-in set. </b>We now construct both the tidy logical world of 16 quantifiers in matched
|
||||
pairs, and also a higgledy-piggledy world of 20 English-language determiners
|
||||
referring to them. There are four broad families which we take in turn.
|
||||
</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">Quantifiers::make_built_in</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">Quantifiers::make_built_in</span></span>:<br/>Linguistics Module - <a href="1-lm.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="named-paragraph-container code-font"><a href="2-daq.html#SP18_1" class="named-paragraph-link"><span class="named-paragraph">Make traditional quantification determiners</span><span class="named-paragraph-number">18.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-daq.html#SP18_2" class="named-paragraph-link"><span class="named-paragraph">Make complement comparison determiners</span><span class="named-paragraph-number">18.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-daq.html#SP18_3" class="named-paragraph-link"><span class="named-paragraph">Make proportion determiners</span><span class="named-paragraph-number">18.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-daq.html#SP18_4" class="named-paragraph-link"><span class="named-paragraph">Make cardinality quantification determiners</span><span class="named-paragraph-number">18.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-daq.html#SP17_1" class="named-paragraph-link"><span class="named-paragraph">Make traditional quantification determiners</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-daq.html#SP17_2" class="named-paragraph-link"><span class="named-paragraph">Make complement comparison determiners</span><span class="named-paragraph-number">17.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-daq.html#SP17_3" class="named-paragraph-link"><span class="named-paragraph">Make proportion determiners</span><span class="named-paragraph-number">17.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-daq.html#SP17_4" class="named-paragraph-link"><span class="named-paragraph">Make cardinality quantification determiners</span><span class="named-paragraph-number">17.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP18_1"></a><b>§18.1. </b>As discussed above, the two traditional quantifiers in logic are "for
|
||||
<p class="commentary firstcommentary"><a id="SP17_1"></a><b>§17.1. </b>As discussed above, the two traditional quantifiers in logic are "for
|
||||
all" and "there exists", usually written in mathematical notation as
|
||||
\(\forall\) and \(\exists\), but we also need to create their negation
|
||||
quantifiers. So we end up with four: <span class="extract"><span class="extract-syntax">ForAll</span></span>, <span class="extract"><span class="extract-syntax">NotAll</span></span>, <span class="extract"><span class="extract-syntax">Exists</span></span> and
|
||||
|
@ -677,38 +647,38 @@ door is open" but would never say "not each door is open". In all other
|
|||
respects "each" and "every" are synonymous in the S-parser.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make traditional quantification determiners</span><span class="named-paragraph-number">18.1</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make traditional quantification determiners</span><span class="named-paragraph-number">17.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">for_all_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"=="</span><span class="plain-syntax">, </span><span class="constant-syntax">10</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"ForAll"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">not_for_all_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"<"</span><span class="plain-syntax">, </span><span class="constant-syntax">10</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"NotAll"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">exists_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">">"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Exists"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">not_exists_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"=="</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"DoesNotExist"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">for_all_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"=="</span><span class="plain-syntax">, </span><span class="constant-syntax">10</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"ForAll"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">not_for_all_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"<"</span><span class="plain-syntax">, </span><span class="constant-syntax">10</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"NotAll"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">exists_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">">"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Exists"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">not_exists_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"=="</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"DoesNotExist"</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">for_all_quantifier</span><span class="plain-syntax">-></span><span class="element-syntax">can_be_used_in_now</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">for_all_quantifier</span><span class="plain-syntax">-></span><span class="element-syntax">can_be_used_in_assertions</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">not_exists_quantifier</span><span class="plain-syntax">-></span><span class="element-syntax">can_be_used_in_now</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP7" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">for_all_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">not_for_all_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP7" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">exists_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">not_exists_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">for_all_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">not_for_all_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">exists_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">not_exists_quantifier</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">ALL_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">for_all_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">ALL_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">for_all_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"used in conditions: 'if all of the doors are open'"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">EACH_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">for_all_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">EACH_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">for_all_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"- see </i>all<i>"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">EVERY_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">for_all_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">EVERY_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">for_all_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"- see </i>all<i>, and can also be used in generalisations such as "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"'A nose is part of every person.'"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">NO_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">not_exists_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">NO_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">not_exists_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"opposite of 'all': 'if no door is open...'"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">NONE_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">not_exists_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">NONE_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">not_exists_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"opposite of 'all of': 'if none of the doors is open...'"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">SOME_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">exists_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">ANY_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">exists_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">SOME_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">exists_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">ANY_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">exists_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-daq.html#SP18">§18</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP18_2"></a><b>§18.2. </b>Here \(T=-1\), because we are counting actual numbers of matches rather than
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-daq.html#SP17">§17</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP17_2"></a><b>§17.2. </b>Here \(T=-1\), because we are counting actual numbers of matches rather than
|
||||
a proportion of matches. But these quantifiers count downwards from the total:
|
||||
thus "all but six" means there have to be exactly \(S-6\) matching items,
|
||||
where \(S\) is the total available. The only logical negation for this
|
||||
|
@ -718,51 +688,51 @@ construction to have any natural English paraphrase, so we do not make a
|
|||
built-in quantifiers all occur in negation pairs.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make complement comparison determiners</span><span class="named-paragraph-number">18.2</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make complement comparison determiners</span><span class="named-paragraph-number">17.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">all_but_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"=="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="string-syntax">"AllBut%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">not_all_but_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"~="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="string-syntax">"NotAllBut%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">all_but_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"=="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="string-syntax">"AllBut%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">not_all_but_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"~="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="string-syntax">"NotAllBut%d"</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP7" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">all_but_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">not_all_but_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">all_but_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">not_all_but_quantifier</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">ALL_BUT_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">all_but_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">ALL_BUT_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">all_but_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"used to count things: 'all but three containers'"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">ALL_EXCEPT_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">all_but_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">ALL_EXCEPT_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">all_but_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"- see </i>all but<i>"</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-daq.html#SP18">§18</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP18_3"></a><b>§18.3. </b>Here the \(T\)-coefficient, measuring the proportion needed, has \(0 < T < 10\).
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-daq.html#SP17">§17</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP17_3"></a><b>§17.3. </b>Here the \(T\)-coefficient, measuring the proportion needed, has \(0 < T < 10\).
|
||||
</p>
|
||||
|
||||
<p class="commentary">We don't support the determiner "half", as in, "if half the doors are open",
|
||||
because it's ambiguous as to whether it means exactly half or half-or-more.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make proportion determiners</span><span class="named-paragraph-number">18.3</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make proportion determiners</span><span class="named-paragraph-number">17.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">almost_all_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">">="</span><span class="plain-syntax">, </span><span class="constant-syntax">8</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Proportion>=80%%"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">almost_no_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"<"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Proportion<20%%"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">most_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">">"</span><span class="plain-syntax">, </span><span class="constant-syntax">5</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Proportion>50%%"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">under_half_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"<="</span><span class="plain-syntax">, </span><span class="constant-syntax">5</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Proportion<=50%%"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">almost_all_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">">="</span><span class="plain-syntax">, </span><span class="constant-syntax">8</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Proportion>=80%%"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">almost_no_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"<"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Proportion<20%%"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">most_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">">"</span><span class="plain-syntax">, </span><span class="constant-syntax">5</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Proportion>50%%"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">under_half_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"<="</span><span class="plain-syntax">, </span><span class="constant-syntax">5</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Proportion<=50%%"</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP7" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">almost_all_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">almost_no_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP7" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">most_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">under_half_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">almost_all_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">almost_no_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">most_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">under_half_quantifier</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">ALMOST_ALL_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">almost_all_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">ALMOST_ALL_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">almost_all_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"used in conditions: true if 80 percent or more possibilities work"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">ALMOST_NO_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">almost_no_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">ALMOST_NO_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">almost_no_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"used in conditions: true if fewer than 20 percent of possibilities work"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">MOST_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">most_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">MOST_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">most_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"used in conditions: true if a simple majority of possibilities work"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">UNDER_HALF_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">under_half_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">UNDER_HALF_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">under_half_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"used in conditions: true if fewer than half of possibilities work"</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-daq.html#SP18">§18</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP18_4"></a><b>§18.4. </b>The usefulness of cardinality quantifiers in logic as applied to
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-daq.html#SP17">§17</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP17_4"></a><b>§17.4. </b>The usefulness of cardinality quantifiers in logic as applied to
|
||||
linguistics seems to be an observation due to Barwise and Cooper. They are
|
||||
a natural generalisation of the for-all and there-exists quantifiers, and
|
||||
again come in matched pairs.
|
||||
|
@ -787,44 +757,44 @@ write that, but of course the two assertions need not be adjacent in
|
|||
the source text. One might be in an extension, for instance.)
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make cardinality quantification determiners</span><span class="named-paragraph-number">18.4</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make cardinality quantification determiners</span><span class="named-paragraph-number">17.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">at_least_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">">="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card>=%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">at_most_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"<="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card<=%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">exactly_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"=="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card=%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">less_than_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"<"</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card<%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">more_than_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">">"</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card>%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">other_than_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"~="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card~=%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">at_least_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">">="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card>=%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">at_most_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"<="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card<=%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">exactly_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"=="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card=%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">less_than_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"<"</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card<%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">more_than_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">">"</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card>%d"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">other_than_quantifier</span><span class="plain-syntax"> = </span><a href="2-daq.html#SP5" class="function-link"><span class="function-syntax">Quantifiers::quant_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"~="</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"Card~=%d"</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">at_least_quantifier</span><span class="plain-syntax">-></span><span class="element-syntax">can_be_used_in_assertions</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP7" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">at_least_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">less_than_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP7" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">at_most_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">more_than_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP7" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">exactly_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">other_than_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">at_least_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">less_than_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">at_most_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">more_than_quantifier</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP6" class="function-link"><span class="function-syntax">Quantifiers::quants_negate_each_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">exactly_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">other_than_quantifier</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">AT_LEAST_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">at_least_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">AT_LEAST_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">at_least_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"used to count things: 'at least five doors'"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">AT_MOST_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">at_most_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">AT_MOST_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">at_most_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"- see </i>at least<i>"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">EXACTLY_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">exactly_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">EXACTLY_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">exactly_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"whereas 'if two doors are open' implicitly means 'if at least two "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"doors are open', 'if exactly two...' makes the count precise"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">FEWER_THAN_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">less_than_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">FEWER_THAN_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">less_than_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"pedantic way to say </i>less than<i> when counting"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">LESS_THAN_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">less_than_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">LESS_THAN_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">less_than_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"- see </i>more than<i>"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">MORE_THAN_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">more_than_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">MORE_THAN_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">more_than_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"used to count things: 'more than three rooms'"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">GREATER_THAN_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">more_than_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="constant-syntax">GREATER_THAN_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">more_than_quantifier</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"used to count things: 'greater than three rooms'"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">OTHER_THAN_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">other_than_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">OTHER_THAN_DET_NAME</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">other_than_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP12" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">at_least_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-daq.html#SP11" class="function-link"><span class="function-syntax">Quantifiers::det_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">at_least_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-daq.html#SP18">§18</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP19"></a><b>§19. </b>The following question is relevant when simplifying propositions:
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-daq.html#SP17">§17</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP18"></a><b>§18. </b>The following question is relevant when simplifying propositions:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
|
|
@ -64,289 +64,288 @@ function togglePopup(material_id) {
|
|||
<!--Weave of 'Nouns' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Services</a></li><li><a href="index.html">linguistics</a></li><li><a href="index.html#2">Chapter 2: Grammatical Categories I</a></li><li><b>Nouns</b></li></ul></div>
|
||||
<p class="purpose">Nouns are an abstraction for meanings registered with the excerpt parser which serve as names for individual things or kinds of things.</p>
|
||||
<p class="purpose">Noun objects are an abstraction for the names given to concepts created in the source text.</p>
|
||||
|
||||
<ul class="toc"><li><a href="2-nns.html#SP1">§1. Why we abstract nouns</a></li><li><a href="2-nns.html#SP2">§2. Structure</a></li><li><a href="2-nns.html#SP3">§3. Creation</a></li><li><a href="2-nns.html#SP4">§4. Attaching some wording to a noun</a></li><li><a href="2-nns.html#SP6">§6. Logging</a></li><li><a href="2-nns.html#SP7">§7. Name access</a></li><li><a href="2-nns.html#SP8">§8. Other utilities</a></li><li><a href="2-nns.html#SP11">§11. Disambiguation</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-nns.html#SP1">§1. A noun is more than a name cluster</a></li><li><a href="2-nns.html#SP4">§4. Structure</a></li><li><a href="2-nns.html#SP5">§5. Creation</a></li><li><a href="2-nns.html#SP7">§7. Subclass</a></li><li><a href="2-nns.html#SP8">§8. Logging</a></li><li><a href="2-nns.html#SP9">§9. Attaching some wording to a noun</a></li><li><a href="2-nns.html#SP10">§10. Name access</a></li><li><a href="2-nns.html#SP11">§11. Meaning</a></li><li><a href="2-nns.html#SP12">§12. Exact parsing in the lexicon</a></li><li><a href="2-nns.html#SP13">§13. Disambiguation</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Why we abstract nouns. </b>In the previous chapter, we laid out a general-purpose way to register
|
||||
"excerpt meanings": to say that a given excerpt of text, such as "air
|
||||
pressure", might have a particular meaning. However, we don't want to
|
||||
use that system directly to represent a noun, because this would assume
|
||||
that nouns come in just one wording. In reality, they are inflected to
|
||||
indicate number (singular vs plural) and, in many languages, case, and
|
||||
they can therefore have many wordings; they can also be translated into
|
||||
other languages.
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. A noun is more than a name cluster. </b>Consider the line:
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. Structure. </b>We will give each noun a "priority", used when resolving ambiguities, but
|
||||
this will be a very simple system: common nouns (i.e., names of kinds) will
|
||||
be high priority, and proper names (i.e., names of instances) will be low.
|
||||
<blockquote>
|
||||
<p>A mammal is a kind of animal.</p>
|
||||
</blockquote>
|
||||
|
||||
<p class="commentary">Inform generates a new noun from this line: "mammal". This may well occur
|
||||
in a variety of inflected forms (though in English, there will be just two:
|
||||
"mammal" and "mammals"). That set of forms is gathered into a <span class="extract"><span class="extract-syntax">name_cluster</span></span>
|
||||
object: see <a href="../inflections-module/3-nc.html" class="internal">Name Clusters (in inflections)</a>. Name clusters are not necessarily
|
||||
of nouns — they are also used for adjectives, for example. So it would be
|
||||
wrong to represent a noun by a name cluster alone.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">HIGH_NOUN_PRIORITY</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">LOW_NOUN_PRIORITY</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MAX_NOUN_PRIORITY</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
|
||||
<p class="commentary">Inform instead attaches a <a href="2-nns.html#SP4" class="internal">noun</a> object to the new "mammal" kind. This object
|
||||
contains the name cluster to define its syntax, but it also has semantics attached.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>From a linguistic point of view, the class of nouns can be divided into two
|
||||
subclasses: common nouns and proper nouns. "Mammal" is a common noun, whereas
|
||||
a sentence such as:
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
<p>A carved oak table is here.</p>
|
||||
</blockquote>
|
||||
|
||||
<p class="commentary">...creates a proper noun, "carved oak table". Nouns are not used only to
|
||||
refer to the model world of some interactive fiction, though: Inform uses
|
||||
common nouns for kinds of value, such as "number", and proper nouns for
|
||||
all sorts of specific but abstract things created in a program: activities,
|
||||
rulebooks and tables, for example.
|
||||
</p>
|
||||
|
||||
<p class="commentary">What we will call the "subclass" of the noun is always one of these values:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">COMMON_NOUN</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">PROPER_NOUN</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>The other semantic ingredient in a <a href="2-nns.html#SP4" class="internal">noun</a> object is a pointer to some
|
||||
object which gives it a meaning. For example, for the "carved oak table" in
|
||||
the Inform example above that would be an <span class="extract"><span class="extract-syntax">instance</span></span> object representing this
|
||||
piece of furniture in the model world.
|
||||
</p>
|
||||
|
||||
<p class="commentary">It might seem the wrong way around for the <a href="2-nns.html#SP4" class="internal">noun</a> object to contain its
|
||||
meaning — like saying that a luggage tag has a suitcase hanging from it,
|
||||
rather than vice versa. But this arrangement makes it convenient to add
|
||||
translations into non-English languages later on (i.e., at a time after the
|
||||
initial creation of the <a href="2-nns.html#SP4" class="internal">noun</a> object).
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. Structure. </b></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">noun</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">name_cluster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">names</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">tagged_to</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">search_priority</span><span class="plain-syntax">; </span><span class="comment-syntax"> in the range 1 up to </span><span class="extract"><span class="extract-syntax">MAX_NOUN_PRIORITY</span></span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">match_exactly</span><span class="plain-syntax">; </span><span class="comment-syntax"> do not allow subset parsing matches, e.g., "bottle" for "glass bottle"</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">range_number</span><span class="plain-syntax">; </span><span class="comment-syntax"> used to enumerate</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">noun_subclass</span><span class="plain-syntax">; </span><span class="comment-syntax"> either </span><span class="extract"><span class="extract-syntax">COMMON_NOUN</span></span><span class="comment-syntax"> or </span><span class="extract"><span class="extract-syntax">PROPER_NOUN</span></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">meaning</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">registration_category</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">registration_to</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">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt_I6_identifier</span><span class="plain-syntax">; </span><span class="comment-syntax"> Name to be used in Inform 6 output</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt_iname</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">name_resolution_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">name_resolution</span><span class="plain-syntax">; </span><span class="comment-syntax"> see the Headings section on this</span>
|
||||
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_COMPILATION_LINGUISTICS_CALLBACK</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">name_compilation_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">name_compilation</span><span class="plain-syntax">; </span><span class="comment-syntax"> see </span><a href="../core-module/5-un.html" class="internal">Using Nametags (in core)</a><span class="comment-syntax"> on this</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_DISAMBIGUATION_LINGUISTICS_CALLBACK</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">name_resolution_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">name_resolution</span><span class="plain-syntax">; </span><span class="comment-syntax"> see </span><a href="../core-module/7-hdn.html" class="internal">Headings (in core)</a><span class="comment-syntax"> on this</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">noun</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure noun is private to this section.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. Creation. </b>Note that it's legal for the supplied text to be empty, and this does happen
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. Creation. </b>The following functions are called to create new proper or common nouns, and
|
||||
note that:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>(i) It is legal for the supplied text to be empty, and this does happen
|
||||
for example when Inform creates the nouns of anonymous objects, as in a
|
||||
sentence such as "Four people are in the Dining Room."
|
||||
</p>
|
||||
|
||||
<p class="commentary">It may seem odd that noun structures store a pointer back to their owners;
|
||||
as if the luggage tag has a suitcase hanging from it, rather than vice versa.
|
||||
But this is needed because nouns can themselves be registered as excerpt
|
||||
meanings. Thus, "silver medallion" might be an EM pointing to a noun,
|
||||
and if it comes up in parsing then we need a way to get from the noun to
|
||||
the actual medallion object.
|
||||
</p>
|
||||
|
||||
<p class="commentary">When a noun is created, we supply a bitmap of options:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">REGISTER_PLURAL_NTOPT</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">ATTACH_TO_SEARCH_LIST_NTOPT</span><span class="plain-syntax"> </span><span class="constant-syntax">8</span>
|
||||
sentence such as "Four people are in the Dining Room." Empty text in <span class="extract"><span class="extract-syntax">W</span></span> means
|
||||
that no forms are added to the name cluster and nothing is registered with
|
||||
the lexicon.
|
||||
</li><li>(ii) If a noun is added to the lexicon with the special meaning code <span class="extract"><span class="extract-syntax">NOUN_MC</span></span>,
|
||||
passed to these functions in <span class="extract"><span class="extract-syntax">mc</span></span>, then the meaning given to the lexicon is
|
||||
the <span class="extract"><span class="extract-syntax">noun</span></span> object itself, from which the ultimate <span class="extract"><span class="extract-syntax">meaning</span></span> can then be
|
||||
derived. The reason for such an indirection is that it makes it possible to
|
||||
see whether the noun used was common or proper. Inform uses this when sorting
|
||||
out ambiguous names of instances or kinds.
|
||||
</li><li>(iii) The <span class="extract"><span class="extract-syntax">options</span></span> are a bitmap which used to be larger, and is now reduced
|
||||
to a combination of just two possibilities:
|
||||
</li></ul>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> register these forms with the lexicon</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">WITH_PLURAL_FORMS_NTOPT</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="comment-syntax"> add plurals to the forms known</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="function-syntax">Nouns::new_proper_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gender</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">options</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">owner</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">val</span><span class="plain-syntax">) </span><span class="identifier-syntax">owner</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_parse_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</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-nns.html#SP3" class="function-link"><span class="function-syntax">Nouns::new_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="constant-syntax">LOW_NOUN_PRIORITY</span><span class="plain-syntax">, </span><span class="identifier-syntax">options</span><span class="plain-syntax">, </span><span class="identifier-syntax">mc</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">gender</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-nns.html#SP6" class="function-link"><span class="function-syntax">Nouns::new_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="constant-syntax">PROPER_NOUN</span><span class="plain-syntax">, </span><span class="identifier-syntax">options</span><span class="plain-syntax">, </span><span class="identifier-syntax">mc</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">gender</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="function-syntax">Nouns::new_common_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gender</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">options</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">general_pointer</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">return</span><span class="plain-syntax"> </span><a href="2-nns.html#SP3" class="function-link"><span class="function-syntax">Nouns::new_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="constant-syntax">HIGH_NOUN_PRIORITY</span><span class="plain-syntax">, </span><span class="identifier-syntax">options</span><span class="plain-syntax">, </span><span class="identifier-syntax">mc</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">gender</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-nns.html#SP6" class="function-link"><span class="function-syntax">Nouns::new_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="constant-syntax">COMMON_NOUN</span><span class="plain-syntax">, </span><span class="identifier-syntax">options</span><span class="plain-syntax">, </span><span class="identifier-syntax">mc</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">gender</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>Note that
|
||||
</p>
|
||||
|
||||
<span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="function-syntax">Nouns::new_inner</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">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">options</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">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">foreign_language</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gender</span><span class="plain-syntax">) {</span>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="function-syntax">Nouns::new_inner</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">Nouns::new_inner</span></span>:<br/><a href="2-nns.html#SP5">§5</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">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">options</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">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lang</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gender</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">tagged_to</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">registration_to</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">mc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NOUN_MC</span><span class="plain-syntax">) </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">registration_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">meaning</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">registration_category</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mc</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">range_number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">search_priority</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">match_exactly</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">noun_subclass</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">names</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Clusters::new</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">options</span><span class="plain-syntax"> & </span><span class="constant-syntax">PARSE_EXACTLY_NTOPT</span><span class="plain-syntax">) </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">match_exactly</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="2-nns.html#SP4" class="function-link"><span class="function-syntax">Nouns::add_to_noun_and_reg</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">foreign_language</span><span class="plain-syntax">, </span><span class="identifier-syntax">gender</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">options</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">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">nt_I6_identifier</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::new</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">nt_iname</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">options</span><span class="plain-syntax"> & </span><span class="constant-syntax">ATTACH_TO_SEARCH_LIST_NTOPT</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-nns.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Insert this noun into the relevant heading search list</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><a href="2-nns.html#SP9" class="function-link"><span class="function-syntax">Nouns::supply_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">lang</span><span class="plain-syntax">, </span><span class="identifier-syntax">gender</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">options</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">NOUN_COMPILATION_LINGUISTICS_CALLBACK</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_COMPILATION_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3_1"></a><b>§3.1. </b>Every heading in the source text has a search list of nouns created
|
||||
under it, and this is used for disambiguation: see below.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Insert this noun into the relevant heading search list</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. Subclass. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::Headings::disturb</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::Headings::attach_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::Headings::verify_divisions</span><span class="plain-syntax">();</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-nns.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. Attaching some wording to a noun. </b>As noted above, each noun comes with a cluster of names, and here's where
|
||||
we add a new one.
|
||||
</p>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::subclass</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">noun_subclass</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NOUN_HAS_NO_MC</span><span class="plain-syntax"> </span><span class="constant-syntax">0xffffffff</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Nouns::add_to_noun_and_reg</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">Nouns::add_to_noun_and_reg</span></span>:<br/><a href="2-nns.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</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">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">foreign_language</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gender</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">options</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">Clusters::add</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">names</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">foreign_language</span><span class="plain-syntax">, </span><span class="identifier-syntax">gender</span><span class="plain-syntax">, </span><span class="identifier-syntax">number</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">options</span><span class="plain-syntax"> & </span><span class="constant-syntax">REGISTER_PLURAL_NTOPT</span><span class="plain-syntax">)?</span><span class="identifier-syntax">TRUE:FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</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">in</span><span class="plain-syntax">, </span><span class="identifier-syntax">individual_name</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">options</span><span class="plain-syntax"> & </span><span class="constant-syntax">REGISTER_SINGULAR_NTOPT</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">registration_category</span><span class="plain-syntax"> != </span><span class="constant-syntax">NOUN_HAS_NO_MC</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">excerpt_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">em</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lexicon::register</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">registration_category</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Declensions::in_case</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="identifier-syntax">name</span><span class="plain-syntax">), </span><span class="identifier-syntax">NOMINATIVE_CASE</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">registration_to</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Clusters::set_principal_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">in</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_excerpt_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">em</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">in</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::is_proper</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">t</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">noun_subclass</span><span class="plain-syntax"> == </span><span class="constant-syntax">PROPER_NOUN</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::is_common</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">Nouns::is_common</span></span>:<br/><a href="2-nns.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">t</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">noun_subclass</span><span class="plain-syntax"> == </span><span class="constant-syntax">COMMON_NOUN</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>The English singular nominative form:
|
||||
</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">Nouns::nominative</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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">EMPTY_WORDING</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">Clusters::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">names</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. Logging. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. Logging. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::log</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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">"<untagged>"</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><a href="2-nns.html#SP7" class="function-link"><span class="function-syntax">Nouns::get_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</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">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">LOG</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">LOOP_THROUGH_WORDING</span><span class="plain-syntax">(</span><span class="identifier-syntax">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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%N"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> < </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><a href="2-nns.html#SP10" class="function-link"><span class="function-syntax">Nouns::nominative_singular</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. Attaching some wording to a noun. </b>As noted above, each noun comes with a cluster of names, and here's where
|
||||
we add a new one.
|
||||
</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">Nouns::supply_text</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">Nouns::supply_text</span></span>:<br/><a href="2-nns.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</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">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lang</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">gender</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">options</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">Clusters::add</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">names</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">lang</span><span class="plain-syntax">, </span><span class="identifier-syntax">gender</span><span class="plain-syntax">, </span><span class="identifier-syntax">number</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">options</span><span class="plain-syntax"> & </span><span class="constant-syntax">WITH_PLURAL_FORMS_NTOPT</span><span class="plain-syntax">)?</span><span class="identifier-syntax">TRUE: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">options</span><span class="plain-syntax"> & </span><span class="constant-syntax">ADD_TO_LEXICON_NTOPT</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</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">in</span><span class="plain-syntax">, </span><span class="identifier-syntax">individual_name</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">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">m</span><span class="plain-syntax"> = </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">meaning</span><span 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="element-syntax">registration_category</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NOUN_MC</span><span class="plain-syntax">) </span><span class="identifier-syntax">m</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Lexicon::register</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">registration_category</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Declensions::in_case</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="identifier-syntax">name</span><span class="plain-syntax">), </span><span class="identifier-syntax">NOMINATIVE_CASE</span><span class="plain-syntax">), </span><span class="identifier-syntax">m</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">"'"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. Name access. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. Name access. </b>We normally access names in their nominative cases, so:
|
||||
</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">Nouns::get_name</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Nouns::get_name</span></span>:<br/><a href="2-nns.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural_flag</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">Clusters::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">names</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural_flag</span><span class="plain-syntax">);</span>
|
||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::nominative_singular</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">Nouns::nominative_singular</span></span>:<br/><a href="2-nns.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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">EMPTY_WORDING</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">Clusters::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">names</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">Nouns::get_name_in_play</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural_flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lang</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">Clusters::get_name_in_play</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">names</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural_flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">lang</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">Nouns::set_plural_name</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L</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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</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">endif</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Clusters::set_plural_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">names</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::full_name_includes</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wd</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::nominative_singular_includes</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wd</span><span 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="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="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><a href="2-nns.html#SP7" class="function-link"><span class="function-syntax">Nouns::get_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</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="identifier-syntax">W</span><span class="plain-syntax"> = </span><a href="2-nns.html#SP10" class="function-link"><span class="function-syntax">Nouns::nominative_singular</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</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">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">wd</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">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">Nouns::nominative</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural_flag</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">Clusters::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="identifier-syntax">names</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural_flag</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">Nouns::nominative_in_language</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">plural_flag</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lang</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">Clusters::get_name_in_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">names</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural_flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">lang</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">Nouns::set_nominative_plural_in_language</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lang</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Clusters::set_plural_in_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">names</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">lang</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. Other utilities. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. Meaning. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::tag_holder</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::meaning</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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_GENERAL_POINTER</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">tagged_to</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">Nouns::priority</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">search_priority</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">Nouns::range_number</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">range_number</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">Nouns::set_range_number</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">) {</span>
|
||||
<span class="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="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">range_number</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::exactitude</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">Nouns::exactitude</span></span>:<br/><a href="2-nns.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</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="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">use_exact_parsing_option</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="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">match_exactly</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">t</span><span class="plain-syntax">-></span><span class="element-syntax">meaning</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. Exact parsing in the lexicon. </b></p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PARSE_EXACTLY_LEXICON_CALLBACK</span><span class="plain-syntax"> </span><a href="2-nns.html#SP9" class="function-link"><span class="function-syntax">Nouns::parse_exactly</span></a>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PARSE_EXACTLY_LEXICON_CALLBACK</span><span class="plain-syntax"> </span><a href="2-nns.html#SP12" class="function-link"><span class="function-syntax">Nouns::parse_exactly</span></a>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::parse_exactly</span><span class="plain-syntax">(</span><span class="identifier-syntax">excerpt_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">em</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">em</span><span class="plain-syntax">-></span><span class="identifier-syntax">meaning_code</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NOUN_MC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">em</span><span class="plain-syntax">-></span><span class="identifier-syntax">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">nt</span><span class="plain-syntax">) && (</span><a href="2-nns.html#SP8" class="function-link"><span class="function-syntax">Nouns::exactitude</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</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="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">use_exact_parsing_option</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="identifier-syntax">endif</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. Disambiguation. </b>Here the parse node <span class="extract"><span class="extract-syntax">p</span></span> stands at the head of a list of alternative meanings
|
||||
for some text: for example, they might be different possible meanings of the
|
||||
words "red chair" — perhaps the "red stuffed chair", perhaps the "red upright
|
||||
chair", and so on. We want to choose the most likely possibility.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">excerpt_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">Nouns::get_principal_meaning</span><span class="plain-syntax">(</span><span class="reserved-syntax">noun</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">RETRIEVE_POINTER_excerpt_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">Clusters::get_principal_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">-></span><span class="element-syntax">names</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. Disambiguation. </b>It's a tricky task to choose from a list of possible nouns which might
|
||||
have been intended by text such as "chair". If the list is empty or
|
||||
contains only one choice, no problem. Otherwise we will probably have to
|
||||
reorder the noun search list, and then run through it. The code below
|
||||
looks as if it picks out the match with highest score, so that the ordering
|
||||
is unimportant, but in fact the score assigned to a match is based purely
|
||||
on the number of words missed out (see later): that means that ambiguities
|
||||
often arise between two lexically similar objects, e.g., a "blue chair"
|
||||
or a "red chair" when the text simply specifies "chair". Since the code
|
||||
below accepts the first noun with the highest score, the outcome is
|
||||
thus determined by which of the blue and red chairs ranks highest in the
|
||||
search list: and that is why the search list is so important.
|
||||
<p class="commentary">Within Inform, this "likely" consideration is a matter of context — of which
|
||||
heading the noun appears under.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="function-syntax">Nouns::disambiguate</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">priority</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">candidates</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="function-syntax">Nouns::disambiguate</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">common_only</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_nt</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="2-nns.html#SP13_1" class="named-paragraph-link"><span class="named-paragraph">If only one of the possible matches is eligible, return that</span><span class="named-paragraph-number">13.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-nns.html#SP13_2" class="named-paragraph-link"><span class="named-paragraph">If the matches can be scored, return the highest-scoring one</span><span class="named-paragraph-number">13.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> and otherwise...</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_nt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP13_1"></a><b>§13.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">If only one of the possible matches is eligible, return that</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">candidates</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">; </span><span class="identifier-syntax">p2</span><span class="plain-syntax">; </span><span class="identifier-syntax">p2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p2</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_alternative</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_noun</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Lexicon::get_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">p2</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">search_priority</span><span class="plain-syntax"> >= </span><span class="constant-syntax">1</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">search_priority</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">priority</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_noun</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lexicon::get_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">p2</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-nns.html#SP14" class="function-link"><span class="function-syntax">Nouns::is_eligible_match</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">common_only</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">first_nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">; </span><span class="identifier-syntax">candidates</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">candidates</span><span class="plain-syntax"> <= </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_nt</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-nns.html#SP13">§13</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP13_2"></a><b>§13.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">If the matches can be scored, return the highest-scoring one</span><span class="named-paragraph-number">13.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::Headings::construct_noun_search_list</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</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">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">noun</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::Headings::set_noun_search_score</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">; </span><span class="identifier-syntax">p2</span><span class="plain-syntax">; </span><span class="identifier-syntax">p2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p2</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_alternative</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_noun</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Lexicon::get_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">p2</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">search_priority</span><span class="plain-syntax"> >= </span><span class="constant-syntax">1</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">search_priority</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">priority</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::Headings::set_noun_search_score</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_score</span><span class="plain-syntax">(</span><span class="identifier-syntax">p2</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">best_nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Sentences::Headings::highest_scoring_noun_searched</span><span class="plain-syntax">();</span>
|
||||
<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">NOUN_DISAMBIGUATION_LINGUISTICS_CALLBACK</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">best_nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOUN_DISAMBIGUATION_LINGUISTICS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">common_only</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">best_nt</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">best_nt</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="2-nns.html#SP13">§13</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. </b></p>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_nt</span><span class="plain-syntax">;</span>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Nouns::is_eligible_match</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">Nouns::is_eligible_match</span></span>:<br/><a href="2-nns.html#SP13_1">§13.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">noun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">common_only</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">common_only</span><span class="plain-syntax">) && (</span><a href="2-nns.html#SP7" class="function-link"><span class="function-syntax">Nouns::is_common</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
|
|
|
@ -85,7 +85,7 @@ MathJax = {
|
|||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. </b></p>
|
||||
|
||||
<pre class="definitions code-font"><span class="plain-syntax">@</span><span class="reserved-syntax">default</span><span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb_conjugation</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">default</span> <span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">verb_conjugation</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>The "permitted verb" is just a piece of temporary context used in parsing:
|
||||
it's convenient for the verb currently being considered to be stored in
|
||||
|
|
|
@ -73,7 +73,7 @@ a verb, which we will attach to our own <span class="extract"><span class="extra
|
|||
be a pointer to the type <span class="extract"><span class="extract-syntax">VERB_MEANING_LINGUISTICS_TYPE</span></span>, and by default, there's none:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="plain-syntax">@</span><span class="reserved-syntax">default</span><span class="plain-syntax"> </span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">default</span> <span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">VerbMeanings::reverse_VMT</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">VerbMeanings::reverse_VMT</span></span>:<br/><a href="4-vm.html#SP6">§6</a><br/>Verb Usages - <a href="3-vu.html#SP13">§13</a><br/>Noun Phrases - <a href="4-np.html#SP13_1">§13.1</a><br/>Verb Phrases - <a href="4-vp.html#SP9_1">§9.1</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">recto</span><span class="plain-syntax">) {</span>
|
||||
|
|
|
@ -151,6 +151,13 @@ it allows them in any form in non-assertion contexts. See
|
|||
<a href="3-vu.html#SP8" class="internal">VerbUsages::register_moods_of_verb</a>.
|
||||
</li><li>● <span class="extract"><span class="extract-syntax">EMPTY_ADJECTIVE_MEANING_LINGUISTICS_CALLBACK</span></span>, if provided, should be the default
|
||||
meaning for an adjective newly defined — see <a href="2-adj.html#SP4" class="internal">Adjectives::from_word_range</a>.
|
||||
</li><li>● <span class="extract"><span class="extract-syntax">NOUN_COMPILATION_LINGUISTICS_CALLBACK</span></span>, if provided, should accompany a
|
||||
declaration of a structure called <span class="extract"><span class="extract-syntax">name_compilation_data</span></span>; this function should
|
||||
then set up that data for the given noun — see <a href="2-nns.html#SP6" class="internal">Nouns::new_inner</a>.
|
||||
</li><li>● <span class="extract"><span class="extract-syntax">NOUN_DISAMBIGUATION_LINGUISTICS_CALLBACK</span></span>, if provided, should accompany a
|
||||
declaration of a structure called <span class="extract"><span class="extract-syntax">name_resolution_data</span></span>; this function should
|
||||
decide which possible reading of the meaning of a noun makes the best sense in
|
||||
context — see <a href="2-nns.html#SP13" class="internal">Nouns::disambiguate</a>.
|
||||
</li><li>● <span class="extract"><span class="extract-syntax">TRACING_LINGUISTICS_CALLBACK</span></span>, if provided, can return <span class="extract"><span class="extract-syntax">TRUE</span></span> to allow
|
||||
extensive details of verb parsing to be copied to the debugging log. See
|
||||
<a href="4-vp.html#SP10" class="internal">VerbPhrases::tracing</a>.
|
||||
|
|
|
@ -116,7 +116,7 @@
|
|||
<li>
|
||||
<p class="sectionentry"><a href="2-nns.html">
|
||||
<spon class="sectiontitle">Nouns</span></a> -
|
||||
<span class="sectionpurpose">Nouns are an abstraction for meanings registered with the excerpt parser which serve as names for individual things or kinds of things.</span></p>
|
||||
<span class="sectionpurpose">Noun objects are an abstraction for the names given to concepts created in the source text.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Total memory consumption was 256347K = 250 MB
|
||||
Total memory consumption was 256345K = 250 MB
|
||||
|
||||
62.4% was used for 1335177 objects, in 267912 frames in 200 x 800K = 160000K = 156 MB:
|
||||
|
||||
|
@ -27,7 +27,7 @@ Total memory consumption was 256347K = 250 MB
|
|||
0.2% dictionary 16345 objects, 784560 bytes
|
||||
0.2% dict_entry_array 236 x 100 = 23600 objects, 762752 bytes
|
||||
0.2% package_request 7928 objects, 697664 bytes
|
||||
0.2% individual_name 2623 objects, 692472 bytes
|
||||
0.2% individual_name 2623 objects, 650504 bytes
|
||||
0.2% inter_name_generator_array 16 x 1000 = 16000 objects, 640512 bytes
|
||||
0.2% verb_usage 1628 objects, 573056 bytes
|
||||
0.1% inference_subject 781 objects, 512336 bytes
|
||||
|
@ -35,8 +35,8 @@ Total memory consumption was 256347K = 250 MB
|
|||
0.1% rule 469 objects, 363944 bytes
|
||||
0.1% i6_schema_array 6 x 100 = 600 objects, 360192 bytes
|
||||
0.1% verb_form 386 objects, 339680 bytes
|
||||
0.1% noun 2440 objects, 312320 bytes
|
||||
0.1% scan_directory 70 objects, 288960 bytes
|
||||
0.1% noun 2440 objects, 273280 bytes
|
||||
0.1% binary_predicate 439 objects, 270424 bytes
|
||||
---- action_name_list_array 3 x 1000 = 3000 objects, 240096 bytes
|
||||
---- inter_annotation_array 1 x 8192 objects, 196640 bytes
|
||||
|
@ -63,7 +63,7 @@ Total memory consumption was 256347K = 250 MB
|
|||
---- property_permission 96 objects, 56832 bytes
|
||||
---- pcalc_func_array 1 x 1000 objects, 56032 bytes
|
||||
---- ph_stack_frame_box 577 objects, 55392 bytes
|
||||
---- kind_constructor 75 objects, 54600 bytes
|
||||
---- kind_constructor 75 objects, 55200 bytes
|
||||
---- text_substitution 436 objects, 48832 bytes
|
||||
---- grammar_line 230 objects, 46000 bytes
|
||||
---- table 7 objects, 45528 bytes
|
||||
|
@ -142,7 +142,7 @@ Total memory consumption was 256347K = 250 MB
|
|||
---- constant_phrase 20 objects, 1280 bytes
|
||||
---- invocation_options_array 1 x 100 objects, 1224 bytes
|
||||
---- hierarchy_metadatum 15 objects, 1200 bytes
|
||||
---- quantifier 16 objects, 1152 bytes
|
||||
---- quantifier 16 objects, 1024 bytes
|
||||
---- table_column 16 objects, 896 bytes
|
||||
---- inbuild_requirement 22 objects, 880 bytes
|
||||
---- code_generation 1 object, 864 bytes
|
||||
|
@ -204,7 +204,7 @@ Total memory consumption was 256347K = 250 MB
|
|||
|
||||
37.5% was used for memory not allocated for objects:
|
||||
|
||||
16.0% text stream storage 42037484 bytes in 265078 claims
|
||||
16.0% text stream storage 42035820 bytes in 265078 claims
|
||||
3.5% dictionary storage 9265152 bytes in 16345 claims
|
||||
---- sorting 1112 bytes in 3 claims
|
||||
2.7% source text 7200000 bytes in 3 claims
|
||||
|
@ -219,5 +219,5 @@ Total memory consumption was 256347K = 250 MB
|
|||
---- emitter array storage 14368 bytes in 8 claims
|
||||
---- code generation workspace for objects 9200 bytes in 9 claims
|
||||
|
||||
19.9% was overhead - 52468856 bytes = 51239K = 50 MB
|
||||
20.0% was overhead - 52549392 bytes = 51317K = 50 MB
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
100.0% in inform7 run
|
||||
66.6% in compilation to Inter
|
||||
26.2% in //Phrases::Manager::compile_first_block//
|
||||
8.6% in //Phrases::Manager::compile_as_needed//
|
||||
6.9% in //Strings::compile_responses//
|
||||
6.0% in //World::Compile::compile//
|
||||
26.1% in //Phrases::Manager::compile_first_block//
|
||||
8.9% in //Phrases::Manager::compile_as_needed//
|
||||
6.8% in //Strings::compile_responses//
|
||||
5.8% in //World::Compile::compile//
|
||||
3.2% in //Assertions::Traverse::traverse1//
|
||||
2.8% in //Sentences::VPs::traverse//
|
||||
2.0% in //Phrases::Manager::RulePrintingRule_routine//
|
||||
|
@ -21,10 +21,10 @@
|
|||
0.1% in //Task::load_types//
|
||||
0.1% in //World::complete//
|
||||
4.2% not specifically accounted for
|
||||
30.9% in running Inter pipeline
|
||||
10.1% in step preparation
|
||||
31.3% in running Inter pipeline
|
||||
10.2% in step preparation
|
||||
10.0% in inter step 2/12: link
|
||||
7.1% in inter step 12/12: generate inform6 -> auto.inf
|
||||
7.2% in inter step 12/12: generate inform6 -> auto.inf
|
||||
0.3% in inter step 9/12: make-identifiers-unique
|
||||
0.1% in inter step 10/12: reconcile-verbs
|
||||
0.1% in inter step 11/12: eliminate-redundant-labels
|
||||
|
@ -32,6 +32,5 @@
|
|||
0.1% in inter step 6/12: assimilate
|
||||
0.1% in inter step 7/12: resolve-external-symbols
|
||||
0.1% in inter step 8/12: inspect-plugs
|
||||
2.1% not specifically accounted for
|
||||
2.3% not specifically accounted for
|
||||
2.0% in supervisor
|
||||
0.4% not specifically accounted for
|
||||
|
|
|
@ -368,10 +368,10 @@ is just a little faster written as an internal like this.
|
|||
<s-instance-name> internal {
|
||||
parse_node *p = Lexicon::retrieve(NOUN_MC, W);
|
||||
if (p) {
|
||||
noun *nt = Nouns::disambiguate(p, MAX_NOUN_PRIORITY);
|
||||
if ((nt) && (Nouns::priority(nt) == LOW_NOUN_PRIORITY)) {
|
||||
noun *nt = Nouns::disambiguate(p, FALSE);
|
||||
if (Nouns::is_proper(nt)) {
|
||||
instance *I = Rvalues::to_object_instance(
|
||||
RETRIEVE_POINTER_parse_node(Nouns::tag_holder(nt)));
|
||||
RETRIEVE_POINTER_parse_node(Nouns::meaning(nt)));
|
||||
*XP = Rvalues::from_instance(I); return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,8 +23,7 @@ void Calculus::Equality::REL_create_initial_stock(void) {
|
|||
word_assemblage wa = PreformUtilities::merge(<relation-name-formal>, 0,
|
||||
PreformUtilities::wording(<relation-names>, EQUALITY_RELATION_NAME));
|
||||
wording AW = WordAssemblages::to_wording(&wa);
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
MISCELLANEOUS_MC, Rvalues::from_binary_predicate(R_equality));
|
||||
|
||||
#ifndef IF_MODULE
|
||||
|
|
|
@ -34,9 +34,7 @@ inter_name *Kinds::RunTime::I6_classname(kind *K) {
|
|||
}
|
||||
|
||||
int Kinds::RunTime::I6_classnumber(kind *K) {
|
||||
noun *nt = Kinds::Behaviour::get_noun(K);
|
||||
if (nt == NULL) return 0;
|
||||
return Nouns::range_number(nt);
|
||||
return Kinds::Behaviour::get_range_number(K);
|
||||
}
|
||||
|
||||
@h Default values.
|
||||
|
|
|
@ -263,15 +263,13 @@ name in both forms. The following grammar is used to construct this prefix.
|
|||
property ...
|
||||
|
||||
@<Register the property name as a noun@> =
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
PROPERTY_MC, Rvalues::from_property(prn));
|
||||
word_assemblage wa =
|
||||
PreformUtilities::merge(<property-name-construction>, 0,
|
||||
WordAssemblages::from_wording(W));
|
||||
wording AW = WordAssemblages::to_wording(&wa);
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
PROPERTY_MC, Rvalues::from_property(prn));
|
||||
|
||||
@h As kinds.
|
||||
|
|
|
@ -62,15 +62,13 @@ table_column *Tables::Columns::new_table_column(wording W) {
|
|||
tc->table_from_which_kind_inferred = NULL;
|
||||
tc->listed_in_predicate = Tables::Relations::make_listed_in_predicate(tc);
|
||||
if (Wordings::nonempty(W)) { /* as always happens except when recovering from a problem */
|
||||
tc->name = Nouns::new_proper_noun(W, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
tc->name = Nouns::new_proper_noun(W, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
TABLE_COLUMN_MC, Rvalues::from_table_column(tc));
|
||||
word_assemblage wa =
|
||||
PreformUtilities::merge(<table-column-name-construction>, 0,
|
||||
WordAssemblages::from_wording(W));
|
||||
wording AW = WordAssemblages::to_wording(&wa);
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
TABLE_COLUMN_MC, Rvalues::from_table_column(tc));
|
||||
}
|
||||
return tc;
|
||||
|
@ -78,7 +76,7 @@ table_column *Tables::Columns::new_table_column(wording W) {
|
|||
|
||||
@ =
|
||||
void Tables::Columns::log(table_column *tc) {
|
||||
LOG("'%W'/", Nouns::nominative(tc->name));
|
||||
LOG("'%W'/", Nouns::nominative_singular(tc->name));
|
||||
if (tc->kind_stored_in_column == NULL) LOG("unknown");
|
||||
else LOG("$u", tc->kind_stored_in_column);
|
||||
}
|
||||
|
@ -475,7 +473,7 @@ void Tables::Columns::note_kind(table *t, int i, table_column_usage *tcu,
|
|||
@<Issue a problem for kind mismatch between columns of the same name@> =
|
||||
int quoted_col = i + 1; /* i.e., counting from 1 */
|
||||
Problems::quote_table(6, tcu->column_identity->table_from_which_kind_inferred);
|
||||
Problems::quote_wording(7, Nouns::nominative(tcu->column_identity->name));
|
||||
Problems::quote_wording(7, Nouns::nominative_singular(tcu->column_identity->name));
|
||||
Problems::quote_number(8, "ed_col);
|
||||
Problems::quote_number(9, &table_cell_row);
|
||||
StandardProblems::table_problem(_p_(PM_TableIncompatibleEntry2),
|
||||
|
@ -492,7 +490,7 @@ happens:
|
|||
|
||||
@<Issue a problem for an inconsistent kind for this column@> =
|
||||
Problems::quote_table(6, tcu->column_identity->table_from_which_kind_inferred);
|
||||
Problems::quote_wording(7, Nouns::nominative(tcu->column_identity->name));
|
||||
Problems::quote_wording(7, Nouns::nominative_singular(tcu->column_identity->name));
|
||||
Problems::quote_kind(4, K);
|
||||
Problems::quote_kind(5, CK);
|
||||
StandardProblems::table_problem(_p_(PM_TableColumnIncompatible),
|
||||
|
@ -509,7 +507,7 @@ happens:
|
|||
void Tables::Columns::approve_kind(table *t, int i, table_column_usage *tcu) {
|
||||
kind *K = Tables::Columns::get_kind(tcu->column_identity);
|
||||
LOGIF(TABLES, "Column %d '%W' has kind $u with data:\n$T",
|
||||
i, Nouns::nominative(tcu->column_identity->name), K, tcu->entries);
|
||||
i, Nouns::nominative_singular(tcu->column_identity->name), K, tcu->entries);
|
||||
if ((Kinds::get_construct(K) == CON_list_of) &&
|
||||
(Kinds::Compare::eq(Kinds::unary_construction_material(K), K_value))) {
|
||||
StandardProblems::table_problem(_p_(PM_TableColumnEmptyLists),
|
||||
|
|
|
@ -369,8 +369,8 @@ traverse 2, if not before, we will be able to give it a kind, since after
|
|||
table-stocking the column will have a kind for its entries.
|
||||
|
||||
@<Ensure that a property with the same name as the column name exists@> =
|
||||
<unfortunate-table-column-property>(Nouns::nominative(t->columns[i].column_identity->name));
|
||||
P = Properties::Valued::obtain(Nouns::nominative(t->columns[i].column_identity->name));
|
||||
<unfortunate-table-column-property>(Nouns::nominative_singular(t->columns[i].column_identity->name));
|
||||
P = Properties::Valued::obtain(Nouns::nominative_singular(t->columns[i].column_identity->name));
|
||||
if (Properties::Valued::kind(P) == NULL) {
|
||||
kind *CK = Tables::Columns::get_kind(t->columns[i].column_identity);
|
||||
if ((Kinds::get_construct(CK) == CON_rule) ||
|
||||
|
|
|
@ -448,8 +448,7 @@ number only, that must. Suppose that "Table 2 - Trees" already exists. Then:
|
|||
word_assemblage wa = PreformUtilities::merge(<table-names-construction>, 0,
|
||||
WordAssemblages::from_wording(t->table_no_text));
|
||||
wording AW = WordAssemblages::to_wording(&wa);
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
TABLE_MC, Rvalues::from_table(t));
|
||||
}
|
||||
if (Wordings::nonempty(t->table_name_text)) {
|
||||
|
@ -458,8 +457,7 @@ number only, that must. Suppose that "Table 2 - Trees" already exists. Then:
|
|||
word_assemblage wa = PreformUtilities::merge(<table-names-construction>, 1,
|
||||
WordAssemblages::from_wording(t->table_name_text));
|
||||
wording AW = WordAssemblages::to_wording(&wa);
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
TABLE_MC, Rvalues::from_table(t));
|
||||
}
|
||||
|
||||
|
@ -592,11 +590,11 @@ the other table at all. The result will be:
|
|||
LOGIF(TABLES, "Column correspondence table:\n old->new: ");
|
||||
for (j=0; j<old_t->no_columns; j++)
|
||||
LOGIF(TABLES, "%d (%W) ", old_to_new[j],
|
||||
Nouns::nominative(old_t->columns[j].column_identity->name));
|
||||
Nouns::nominative_singular(old_t->columns[j].column_identity->name));
|
||||
LOGIF(TABLES, "\n new->old: ");
|
||||
for (i=0; i<t->no_columns; i++)
|
||||
LOGIF(TABLES, "%d (%W) ", new_to_old[i],
|
||||
Nouns::nominative(t->columns[i].column_identity->name));
|
||||
Nouns::nominative_singular(t->columns[i].column_identity->name));
|
||||
LOGIF(TABLES, "\n");
|
||||
|
||||
@ We can carry out the continuation immediately, since it just means splicing
|
||||
|
@ -762,7 +760,7 @@ columns and in the same order.
|
|||
int j;
|
||||
for (j=0; j<old_t->no_columns; j++) {
|
||||
if (j > 0) WRITE_TO(TEMP, ", ");
|
||||
WRITE_TO(TEMP, "%+W", Nouns::nominative(old_t->columns[j].column_identity->name));
|
||||
WRITE_TO(TEMP, "%+W", Nouns::nominative_singular(old_t->columns[j].column_identity->name));
|
||||
}
|
||||
WRITE_TO(TEMP, ". ");
|
||||
Problems::issue_problem_segment_from_stream(TEMP);
|
||||
|
@ -775,7 +773,7 @@ columns and in the same order.
|
|||
int i;
|
||||
for (i=0; i<t->no_columns; i++) {
|
||||
if (i > 0) WRITE_TO(TEMP, ", ");
|
||||
WRITE_TO(TEMP, "%+W", Nouns::nominative(t->columns[i].column_identity->name));
|
||||
WRITE_TO(TEMP, "%+W", Nouns::nominative_singular(t->columns[i].column_identity->name));
|
||||
}
|
||||
WRITE_TO(TEMP, ".");
|
||||
Problems::issue_problem_segment_from_stream(TEMP);
|
||||
|
@ -898,7 +896,7 @@ us issue more contextual problem messages.
|
|||
int quoted_col = table_cell_col + 1; /* i.e., counting from 1 */
|
||||
Problems::quote_number(4, "ed_col);
|
||||
Problems::quote_wording(5,
|
||||
Nouns::nominative(table_being_examined->columns[table_cell_col].column_identity->name));
|
||||
Nouns::nominative_singular(table_being_examined->columns[table_cell_col].column_identity->name));
|
||||
Problems::quote_number(6, &table_cell_row);
|
||||
StandardProblems::table_problem(_p_(PM_NonconstantActionInTable),
|
||||
table_being_examined, NULL, table_cell_node,
|
||||
|
@ -922,7 +920,7 @@ people -- it needs to be "yourself" instead, since "player" is a variable.
|
|||
int quoted_col = table_cell_col + 1; /* i.e., counting from 1 */
|
||||
Problems::quote_number(4, "ed_col);
|
||||
Problems::quote_wording(5,
|
||||
Nouns::nominative(table_being_examined->columns[table_cell_col].column_identity->name));
|
||||
Nouns::nominative_singular(table_being_examined->columns[table_cell_col].column_identity->name));
|
||||
Problems::quote_number(6, &table_cell_row);
|
||||
Problems::quote_subject(7, infs);
|
||||
StandardProblems::table_problem(_p_(PM_TablePlayerEntry),
|
||||
|
@ -935,7 +933,7 @@ people -- it needs to be "yourself" instead, since "player" is a variable.
|
|||
int quoted_col = table_cell_col + 1; /* i.e., counting from 1 */
|
||||
Problems::quote_number(4, "ed_col);
|
||||
Problems::quote_wording(5,
|
||||
Nouns::nominative(table_being_examined->columns[table_cell_col].column_identity->name));
|
||||
Nouns::nominative_singular(table_being_examined->columns[table_cell_col].column_identity->name));
|
||||
Problems::quote_number(6, &table_cell_row);
|
||||
StandardProblems::table_problem(_p_(PM_TableVariableEntry),
|
||||
table_being_examined, NULL, table_cell_node,
|
||||
|
@ -953,7 +951,7 @@ people -- it needs to be "yourself" instead, since "player" is a variable.
|
|||
int quoted_col = table_cell_col + 1; /* i.e., counting from 1 */
|
||||
Problems::quote_number(4, "ed_col);
|
||||
Problems::quote_wording(5,
|
||||
Nouns::nominative(table_being_examined->columns[table_cell_col].column_identity->name));
|
||||
Nouns::nominative_singular(table_being_examined->columns[table_cell_col].column_identity->name));
|
||||
Problems::quote_number(6, &table_cell_row);
|
||||
StandardProblems::table_problem(_p_(PM_TableUnknownEntry),
|
||||
table_being_examined, NULL, table_cell_node,
|
||||
|
@ -1022,7 +1020,7 @@ void Tables::stock_table_cell(table *t, parse_node *cell, int row_count, int col
|
|||
int quoted_col = table_cell_col + 1; /* i.e., counting from 1 */
|
||||
Problems::quote_number(4, "ed_col);
|
||||
Problems::quote_wording(5,
|
||||
Nouns::nominative(table_being_examined->columns[table_cell_col].column_identity->name));
|
||||
Nouns::nominative_singular(table_being_examined->columns[table_cell_col].column_identity->name));
|
||||
Problems::quote_number(6, &table_cell_row);
|
||||
StandardProblems::table_problem(_p_(PM_TableDescriptionEntry),
|
||||
t, NULL, cell,
|
||||
|
@ -1245,7 +1243,7 @@ time to find a clear wording for:
|
|||
Problems::quote_number(1, &amend_row);
|
||||
Problems::quote_number(2, "ed_col);
|
||||
Problems::quote_source(3, amend_cell);
|
||||
Problems::quote_wording(4, Nouns::nominative(main_table->columns[col].column_identity->name));
|
||||
Problems::quote_wording(4, Nouns::nominative_singular(main_table->columns[col].column_identity->name));
|
||||
Problems::quote_table(5, main_table);
|
||||
Problems::quote_number(6, &matches_in_last_round);
|
||||
if (matches_in_last_round > 2) Problems::quote_text(7, "any");
|
||||
|
@ -1381,7 +1379,7 @@ Helvetica-style lower case "x", but life is full of compromises.
|
|||
for (col = 0; col < t->no_columns; col++) {
|
||||
HTML::first_html_column(OUT, 0);
|
||||
WRITE(" col %d: ", col+1);
|
||||
wording CW = Nouns::nominative(t->columns[col].column_identity->name);
|
||||
wording CW = Nouns::nominative_singular(t->columns[col].column_identity->name);
|
||||
if ((t->first_column_by_definition) && (col == 0)) {
|
||||
parse_node *PN = t->where_used_to_define;
|
||||
WRITE("%+W", Node::get_text(PN));
|
||||
|
|
|
@ -72,7 +72,7 @@ void StandardProblems::table_problem(SIGIL_ARGUMENTS, table *t, table_column *tc
|
|||
ACT_ON_SIGIL
|
||||
current_sentence = t->headline_fragment;
|
||||
Problems::quote_table(1, t);
|
||||
if (tc) Problems::quote_wording(2, Nouns::nominative(tc->name));
|
||||
if (tc) Problems::quote_wording(2, Nouns::nominative_singular(tc->name));
|
||||
if (data) Problems::quote_source(3, data);
|
||||
Problems::issue_problem_begin(Task::syntax_tree(), "");
|
||||
Problems::issue_problem_segment(message);
|
||||
|
|
|
@ -231,8 +231,7 @@ could be referred to elsewhere in the text by any of three names:
|
|||
word_assemblage wa = PreformUtilities::merge(<equation-names-construction>, 0,
|
||||
WordAssemblages::from_wording(NO));
|
||||
wording AW = WordAssemblages::to_wording(&wa);
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
EQUATION_MC, Rvalues::from_equation(eqn));
|
||||
}
|
||||
|
||||
|
@ -247,15 +246,13 @@ could be referred to elsewhere in the text by any of three names:
|
|||
"because Inform would read '2 + 2' as arithmetic, not a name.");
|
||||
Problems::issue_problem_end();
|
||||
} else {
|
||||
Nouns::new_proper_noun(NA, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(NA, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
EQUATION_MC, Rvalues::from_equation(eqn));
|
||||
word_assemblage wa =
|
||||
PreformUtilities::merge(<equation-names-construction>, 0,
|
||||
WordAssemblages::from_wording(NA));
|
||||
wording AW = WordAssemblages::to_wording(&wa);
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
EQUATION_MC, Rvalues::from_equation(eqn));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -204,15 +204,13 @@ activity *Activities::new(kind *creation_kind, wording W) {
|
|||
"this already has a meaning",
|
||||
"and so cannot be the name of a newly created activity.");
|
||||
} else {
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
ACTIVITY_MC, Rvalues::from_activity(av));
|
||||
word_assemblage wa =
|
||||
PreformUtilities::merge(<activity-name-construction>, 0,
|
||||
WordAssemblages::from_wording(av->name));
|
||||
wording AW = WordAssemblages::to_wording(&wa);
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
ACTIVITY_MC, Rvalues::from_activity(av));
|
||||
}
|
||||
|
||||
|
|
|
@ -232,8 +232,7 @@ named_rulebook_outcome *Rulebooks::Outcomes::rbno_by_name(wording W) {
|
|||
Hierarchy::markup_wording(R, OUTCOME_NAME_HMD, W);
|
||||
|
||||
named_rulebook_outcome *rbno = CREATE(named_rulebook_outcome);
|
||||
rbno->name = Nouns::new_proper_noun(W, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
rbno->name = Nouns::new_proper_noun(W, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
MISCELLANEOUS_MC, Rvalues::from_named_rulebook_outcome(rbno));
|
||||
rbno->nro_iname = Hierarchy::make_iname_with_memo(OUTCOME_HL, R, W);
|
||||
if (<notable-rulebook-outcomes>(W)) {
|
||||
|
@ -397,7 +396,7 @@ void Rulebooks::Outcomes::index_outcomes(OUTPUT_STREAM, outcomes *outs, int supp
|
|||
HTML::open_indented_p(OUT, 2, "hanging");
|
||||
WRITE("<i>outcome</i> ");
|
||||
if (outs->default_named_outcome == ro) WRITE("<b>");
|
||||
WRITE("%+W", Nouns::nominative(rbno->name));
|
||||
WRITE("%+W", Nouns::nominative_singular(rbno->name));
|
||||
if (outs->default_named_outcome == ro) WRITE("</b> (default)");
|
||||
WRITE(" - <i>");
|
||||
switch(ro->kind_of_outcome) {
|
||||
|
@ -426,7 +425,7 @@ void Rulebooks::Outcomes::RulebookOutcomePrintingRule(void) {
|
|||
named_rulebook_outcome *rbno;
|
||||
LOOP_OVER(rbno, named_rulebook_outcome) {
|
||||
TEMPORARY_TEXT(RV)
|
||||
WRITE_TO(RV, "%+W", Nouns::nominative(rbno->name));
|
||||
WRITE_TO(RV, "%+W", Nouns::nominative_singular(rbno->name));
|
||||
Emit::named_string_constant(rbno->nro_iname, RV);
|
||||
DISCARD_TEXT(RV)
|
||||
}
|
||||
|
|
|
@ -249,21 +249,18 @@ rulebook *Rulebooks::new(kind *create_as, wording W, package_request *R) {
|
|||
if (rb == built_in_rulebooks[ACTION_PROCESSING_RB])
|
||||
all_action_processing_vars = StackedVariables::add_owner_to_list(NULL, rb->owned_by_rb);
|
||||
|
||||
Nouns::new_proper_noun(rb->primary_name, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(rb->primary_name, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
RULEBOOK_MC, Rvalues::from_rulebook(rb));
|
||||
word_assemblage wa =
|
||||
PreformUtilities::merge(<rulebook-name-construction>, 0,
|
||||
WordAssemblages::from_wording(rb->primary_name));
|
||||
wording AW = WordAssemblages::to_wording(&wa);
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
RULEBOOK_MC, Rvalues::from_rulebook(rb));
|
||||
wa = PreformUtilities::merge(<rulebook-name-construction>, 1,
|
||||
WordAssemblages::from_wording(rb->primary_name));
|
||||
AW = WordAssemblages::to_wording(&wa);
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
RULEBOOK_MC, Rvalues::from_rulebook(rb));
|
||||
|
||||
return rb;
|
||||
|
@ -299,8 +296,7 @@ rulebook *Rulebooks::new_automatic(wording W, kind *basis,
|
|||
|
||||
void Rulebooks::set_alt_name(rulebook *rb, wording AW) {
|
||||
rb->alternative_name = AW;
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
RULEBOOK_MC, Rvalues::from_rulebook(rb));
|
||||
}
|
||||
|
||||
|
|
|
@ -145,8 +145,7 @@ slightly differently. (Not all rule names do: those for timed events do not.)
|
|||
@<Register the name of this rule@> =
|
||||
unsigned int mc = RULE_MC;
|
||||
if (<rule-name-formal>(W)) mc = MISCELLANEOUS_MC;
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
mc, Rvalues::from_rule(R));
|
||||
|
||||
@ Reversing the process:
|
||||
|
|
|
@ -297,7 +297,7 @@ of course.
|
|||
|
||||
@<Present the name of the phrase regarded as a value, if it has one@> =
|
||||
if (ph->usage_data.constant_phrase_holder) {
|
||||
wording W = Nouns::nominative(ph->usage_data.constant_phrase_holder->name);
|
||||
wording W = Nouns::nominative_singular(ph->usage_data.constant_phrase_holder->name);
|
||||
HTML_CLOSE("p");
|
||||
HTML_OPEN("p");
|
||||
WRITE("<b>Name:</b> ");
|
||||
|
|
|
@ -323,8 +323,8 @@ mode, we can get that value back again if we look it up by name.
|
|||
if (Kinds::Behaviour::definite(cphr->cphr_kind) == FALSE) {
|
||||
phrase *ph = Phrases::Constants::as_phrase(cphr);
|
||||
if (ph) current_sentence = Phrases::declaration_node(ph);
|
||||
Problems::quote_source(1, NounPhrases::new_raw(Nouns::nominative(cphr->name)));
|
||||
Problems::quote_wording(2, Nouns::nominative(cphr->name));
|
||||
Problems::quote_source(1, NounPhrases::new_raw(Nouns::nominative_singular(cphr->name)));
|
||||
Problems::quote_wording(2, Nouns::nominative_singular(cphr->name));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NamedGeneric));
|
||||
Problems::issue_problem_segment(
|
||||
"I can't allow %1, because the phrase it gives a name to "
|
||||
|
@ -552,13 +552,13 @@ int Phrases::Usage::get_timing_of_event(ph_usage_data *phud) {
|
|||
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(phud->constant_phrase_holder->name)))) return TRUE;
|
||||
(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(phud->constant_phrase_holder->name));
|
||||
return Wordings::first_word(Nouns::nominative_singular(phud->constant_phrase_holder->name));
|
||||
return EMPTY_WORDING;
|
||||
}
|
||||
|
||||
|
@ -591,7 +591,7 @@ void Phrases::Usage::log(ph_usage_data *phud) {
|
|||
}
|
||||
LOG("PHUD: <%W>: rule attachment mode %s\n", phud->full_preamble, ram);
|
||||
if (phud->constant_phrase_holder)
|
||||
LOG(" Constant name: <%W>\n", Nouns::nominative(phud->constant_phrase_holder->name));
|
||||
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)
|
||||
|
|
|
@ -29,8 +29,7 @@ constant_phrase *Phrases::Constants::create(wording NW, wording RW) {
|
|||
cphr->phrase_meant = NULL; /* we won't know until later */
|
||||
cphr->cphr_kind = NULL; /* nor this */
|
||||
cphr->associated_preamble_text = RW;
|
||||
cphr->name = Nouns::new_proper_noun(NW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
cphr->name = Nouns::new_proper_noun(NW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
PHRASE_CONSTANT_MC, Rvalues::from_constant_phrase(cphr));
|
||||
cphr->cphr_iname = NULL;
|
||||
return cphr;
|
||||
|
@ -141,7 +140,7 @@ case the phrase occurs as a constant but is never explicitly invoked.
|
|||
Emit::array_iname_entry(RS);
|
||||
|
||||
TEMPORARY_TEXT(name)
|
||||
WRITE_TO(name, "%W", Nouns::nominative(cphr->name));
|
||||
WRITE_TO(name, "%W", Nouns::nominative_singular(cphr->name));
|
||||
Emit::array_text_entry(name);
|
||||
DISCARD_TEXT(name)
|
||||
|
||||
|
|
|
@ -99,8 +99,7 @@ void UseOptions::new_use_option(parse_node *p) {
|
|||
uo->source_file_scoped = FALSE;
|
||||
if ((<notable-use-option-name>(OW)) && (<<r>> == AUTHORIAL_MODESTY_UO))
|
||||
uo->source_file_scoped = TRUE;
|
||||
Nouns::new_proper_noun(OW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(OW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
MISCELLANEOUS_MC, Rvalues::from_use_option(uo));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -211,7 +211,7 @@ void Data::Objects::index(OUTPUT_STREAM, instance *I, kind *K, int depth, int de
|
|||
}
|
||||
|
||||
@<Quote the name of the object being indexed@> =
|
||||
wording W = Nouns::get_name_in_play(nt, FALSE, Projects::get_language_of_play(Task::project()));
|
||||
wording W = Nouns::nominative_in_language(nt, FALSE, Projects::get_language_of_play(Task::project()));
|
||||
if ((Wordings::empty(W)) && (I)) {
|
||||
kind *IK = Instances::to_kind(I);
|
||||
W = Kinds::Behaviour::get_name_in_play(IK, FALSE, Projects::get_language_of_play(Task::project()));
|
||||
|
@ -239,7 +239,7 @@ void Data::Objects::index(OUTPUT_STREAM, instance *I, kind *K, int depth, int de
|
|||
}
|
||||
}
|
||||
}
|
||||
wording PW = Nouns::get_name_in_play(nt, TRUE, Projects::get_language_of_play(Task::project()));
|
||||
wording PW = Nouns::nominative_in_language(nt, TRUE, Projects::get_language_of_play(Task::project()));
|
||||
if (Wordings::nonempty(PW)) WRITE(" (<i>plural</i> %+W)", PW);
|
||||
|
||||
@<Index the kind attribution part of the object citation@> =
|
||||
|
|
|
@ -143,19 +143,17 @@ full, whereas a "tuna fish" (an object) can be called just "tuna".
|
|||
if (any_parsing) {
|
||||
if (exact_parsing)
|
||||
I->tag =
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT + ATTACH_TO_SEARCH_LIST_NTOPT,
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
NAMED_CONSTANT_MC, Rvalues::from_instance(I));
|
||||
else
|
||||
I->tag =
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + ATTACH_TO_SEARCH_LIST_NTOPT,
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
NOUN_MC, Rvalues::from_instance(I));
|
||||
} else {
|
||||
I->tag = Nouns::new_proper_noun(W, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT + ATTACH_TO_SEARCH_LIST_NTOPT,
|
||||
NOUN_HAS_NO_MC, NULL);
|
||||
I->tag = Nouns::new_proper_noun(W, NEUTER_GENDER, 0,
|
||||
NAMED_CONSTANT_MC, NULL);
|
||||
}
|
||||
Sentences::Headings::initialise_noun_resolution(I->tag);
|
||||
|
||||
@ The values in an enumerated kind such as our perpetual "colour" example
|
||||
are numbered 1, 2, 3, ..., in order of creation. This is where we assign
|
||||
|
@ -267,17 +265,17 @@ inference_subject *Instances::as_subject(instance *I) {
|
|||
=
|
||||
wording Instances::get_name(instance *I, int plural) {
|
||||
if ((I == NULL) || (I->tag == NULL)) return EMPTY_WORDING;
|
||||
return Nouns::get_name(I->tag, plural);
|
||||
return Nouns::nominative(I->tag, plural);
|
||||
}
|
||||
|
||||
wording Instances::get_name_in_play(instance *I, int plural) {
|
||||
if ((I == NULL) || (I->tag == NULL)) return EMPTY_WORDING;
|
||||
return Nouns::get_name_in_play(I->tag, plural, Projects::get_language_of_play(Task::project()));
|
||||
return Nouns::nominative_in_language(I->tag, plural, Projects::get_language_of_play(Task::project()));
|
||||
}
|
||||
|
||||
int Instances::full_name_includes(instance *I, vocabulary_entry *wd) {
|
||||
if (I == NULL) return FALSE;
|
||||
return Nouns::full_name_includes(I->tag, wd);
|
||||
return Nouns::nominative_singular_includes(I->tag, wd);
|
||||
}
|
||||
|
||||
noun *Instances::get_noun(instance *I) {
|
||||
|
@ -295,7 +293,7 @@ inter_name *Instances::iname(instance *I) {
|
|||
I->instance_package = Hierarchy::local_package(INSTANCES_HAP);
|
||||
UseNouns::noun_compose_identifier(I->instance_package, I->tag, I->allocation_id);
|
||||
I->instance_iname = UseNouns::iname(I->tag);
|
||||
Hierarchy::markup_wording(I->instance_package, INSTANCE_NAME_HMD, Nouns::get_name(I->tag, FALSE));
|
||||
Hierarchy::markup_wording(I->instance_package, INSTANCE_NAME_HMD, Nouns::nominative(I->tag, FALSE));
|
||||
}
|
||||
return I->instance_iname;
|
||||
}
|
||||
|
@ -312,7 +310,7 @@ void Instances::writer(OUTPUT_STREAM, char *format_string, void *vI) {
|
|||
case '-': @<Write the instance with normalised casing@>; break;
|
||||
case '~': {
|
||||
inter_name *N = Instances::iname(I);
|
||||
if (Str::len(I->tag->nt_I6_identifier) > 0) WRITE("%S", I->tag->nt_I6_identifier);
|
||||
if (Str::len(I->tag->name_compilation.nt_identifier) > 0) WRITE("%S", I->tag->name_compilation.nt_identifier);
|
||||
else WRITE("%n", N);
|
||||
break;
|
||||
}
|
||||
|
@ -354,14 +352,14 @@ instance *Instances::parse_object(wording W) {
|
|||
if (<s-literal>(W)) return NULL;
|
||||
p = Lexicon::retrieve(NOUN_MC, W);
|
||||
if (p == NULL) return NULL;
|
||||
noun *nt = Nouns::disambiguate(p, MAX_NOUN_PRIORITY);
|
||||
if (nt == NULL) return NULL;
|
||||
if (Nouns::priority(nt) != LOW_NOUN_PRIORITY) return NULL;
|
||||
parse_node *pn = RETRIEVE_POINTER_parse_node(Nouns::tag_holder(nt));
|
||||
if (Node::is(pn, CONSTANT_NT)) {
|
||||
kind *K = Node::get_kind_of_value(pn);
|
||||
if (Kinds::Compare::le(K, K_object))
|
||||
return Node::get_constant_instance(pn);
|
||||
noun *nt = Nouns::disambiguate(p, FALSE);
|
||||
if (Nouns::is_proper(nt)) {
|
||||
parse_node *pn = RETRIEVE_POINTER_parse_node(Nouns::meaning(nt));
|
||||
if (Node::is(pn, CONSTANT_NT)) {
|
||||
kind *K = Node::get_kind_of_value(pn);
|
||||
if (Kinds::Compare::le(K, K_object))
|
||||
return Node::get_constant_instance(pn);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -156,8 +156,7 @@ to have the "initial value" property.
|
|||
nlv->scope = scope;
|
||||
nlv->substitution_marker = 0;
|
||||
if ((Wordings::nonempty(W)) && (scope == NULL)) /* that is, if it's a global */
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(W, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
VARIABLE_MC, Lvalues::new_actual_NONLOCAL_VARIABLE(nlv));
|
||||
nlv->nlv_knowledge =
|
||||
InferenceSubjects::new(nonlocal_variables,
|
||||
|
|
|
@ -20,10 +20,8 @@ void UnicodeTranslations::unicode_translates(parse_node *pn) {
|
|||
return;
|
||||
}
|
||||
|
||||
Nouns::new_proper_noun(Node::get_text(pn->next), NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
MISCELLANEOUS_MC,
|
||||
NounPhrases::new_raw(Node::get_text(pn->next->next)));
|
||||
Nouns::new_proper_noun(Node::get_text(pn->next), NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
MISCELLANEOUS_MC, NounPhrases::new_raw(Node::get_text(pn->next->next)));
|
||||
}
|
||||
|
||||
@ The following parses the subject noun phrase of sentences like
|
||||
|
|
|
@ -8,46 +8,63 @@ Since I6 identifiers compiled by Inform are usually based on the names of
|
|||
the things they represent -- a typical example would be |I45_silver_bars| --
|
||||
it's convenient to associate them with nametags.
|
||||
|
||||
@d NOUN_COMPILATION_LINGUISTICS_CALLBACK UseNouns::initialise_noun_compilation
|
||||
|
||||
=
|
||||
typedef struct name_compilation_data {
|
||||
struct text_stream *nt_identifier;
|
||||
struct inter_name *nt_iname; /* (which will have that identifier) */
|
||||
} name_compilation_data;
|
||||
|
||||
void UseNouns::initialise_noun_compilation(noun *t) {
|
||||
if (t == NULL) internal_error("no noun");
|
||||
t->name_compilation.nt_identifier = Str::new();
|
||||
t->name_compilation.nt_iname = NULL;
|
||||
}
|
||||
|
||||
text_stream *UseNouns::identifier(noun *t) {
|
||||
if (t == NULL) return I"nothing";
|
||||
return t->nt_I6_identifier;
|
||||
return t->name_compilation.nt_identifier;
|
||||
}
|
||||
|
||||
inter_name *UseNouns::iname(noun *t) {
|
||||
if (t == NULL) return NULL;
|
||||
if (t->nt_iname == NULL) { LOG("So %W / %S is stuck\n", Nouns::get_name(t, FALSE), t->nt_I6_identifier); internal_error("stuck"); }
|
||||
return t->nt_iname;
|
||||
if (t->name_compilation.nt_iname == NULL) {
|
||||
LOG("So %W / %S is stuck\n",
|
||||
Nouns::nominative(t, FALSE), t->name_compilation.nt_identifier);
|
||||
internal_error("noun compilation failed");
|
||||
}
|
||||
return t->name_compilation.nt_iname;
|
||||
}
|
||||
|
||||
int UseNouns::iname_set(noun *t) {
|
||||
if (t == NULL) return FALSE;
|
||||
if (t->nt_iname == NULL) return FALSE;
|
||||
if (t->name_compilation.nt_iname == NULL) return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void UseNouns::noun_compose_identifier(package_request *R, noun *t, int N) {
|
||||
if (t->nt_iname == NULL) {
|
||||
wording W = Nouns::get_name(t, FALSE);
|
||||
t->nt_iname = Hierarchy::make_iname_with_memo(INSTANCE_HL, R, W);
|
||||
if (t->name_compilation.nt_iname == NULL) {
|
||||
wording W = Nouns::nominative(t, FALSE);
|
||||
t->name_compilation.nt_iname = Hierarchy::make_iname_with_memo(INSTANCE_HL, R, W);
|
||||
}
|
||||
}
|
||||
|
||||
void UseNouns::noun_impose_identifier(noun *t, inter_name *iname) {
|
||||
if (t->nt_iname == NULL) t->nt_iname = iname;
|
||||
if (t->name_compilation.nt_iname == NULL) t->name_compilation.nt_iname = iname;
|
||||
}
|
||||
|
||||
void UseNouns::noun_set_I6_representation(noun *t, text_stream *new) {
|
||||
if (t->nt_iname == NULL) internal_error("no instance iname yet");
|
||||
Str::clear(t->nt_I6_identifier);
|
||||
Str::copy(t->nt_I6_identifier, new);
|
||||
if (Str::get_first_char(t->nt_I6_identifier) == '"')
|
||||
Str::delete_first_character(t->nt_I6_identifier);
|
||||
if (Str::get_last_char(t->nt_I6_identifier) == '"')
|
||||
Str::delete_last_character(t->nt_I6_identifier);
|
||||
Produce::change_translation(t->nt_iname, t->nt_I6_identifier);
|
||||
Produce::clear_flag(t->nt_iname, MAKE_NAME_UNIQUE);
|
||||
Hierarchy::make_available(Emit::tree(), t->nt_iname);
|
||||
if (t->name_compilation.nt_iname == NULL) internal_error("no instance iname yet");
|
||||
Str::clear(t->name_compilation.nt_identifier);
|
||||
Str::copy(t->name_compilation.nt_identifier, new);
|
||||
if (Str::get_first_char(t->name_compilation.nt_identifier) == '"')
|
||||
Str::delete_first_character(t->name_compilation.nt_identifier);
|
||||
if (Str::get_last_char(t->name_compilation.nt_identifier) == '"')
|
||||
Str::delete_last_character(t->name_compilation.nt_identifier);
|
||||
Produce::change_translation(t->name_compilation.nt_iname, t->name_compilation.nt_identifier);
|
||||
Produce::clear_flag(t->name_compilation.nt_iname, MAKE_NAME_UNIQUE);
|
||||
Hierarchy::make_available(Emit::tree(), t->name_compilation.nt_iname);
|
||||
}
|
||||
|
||||
@ The identifiers are created all at once, but the process is complicated by
|
||||
|
@ -73,7 +90,7 @@ void UseNouns::visit_to_name(parse_node *p) {
|
|||
wording W = Wordings::trim_last_word(Node::get_text(p->down->next));
|
||||
parse_node *res = Lexicon::retrieve(NOUN_MC, W);
|
||||
if (res) {
|
||||
noun *nt = Nouns::disambiguate(res, MAX_NOUN_PRIORITY);
|
||||
noun *nt = Nouns::disambiguate(res, FALSE);
|
||||
if (nt) {
|
||||
TEMPORARY_TEXT(i6r)
|
||||
WRITE_TO(i6r, "%N", Wordings::first_wn(Node::get_text(p->down->next->next)));
|
||||
|
@ -127,8 +144,8 @@ void UseNouns::nl_translates(parse_node *pn) {
|
|||
instance *I = <<rp>>;
|
||||
noun *t = Instances::get_noun(I);
|
||||
if (t == NULL) internal_error("stuck on instance name");
|
||||
Nouns::add_to_noun_and_reg(t, Node::get_text(pn->next->next), nl, g,
|
||||
1, REGISTER_SINGULAR_NTOPT);
|
||||
Nouns::supply_text(t, Node::get_text(pn->next->next), nl, g,
|
||||
1, ADD_TO_LEXICON_NTOPT);
|
||||
break;
|
||||
}
|
||||
case TRANS_KIND: {
|
||||
|
@ -137,8 +154,8 @@ void UseNouns::nl_translates(parse_node *pn) {
|
|||
if (KC == NULL) internal_error("stuck on kind name");
|
||||
noun *t = Kinds::Constructors::get_noun(KC);
|
||||
if (t == NULL) internal_error("further stuck on kind name");
|
||||
Nouns::add_to_noun_and_reg(t, Node::get_text(pn->next->next), nl, g,
|
||||
1, REGISTER_SINGULAR_NTOPT + REGISTER_PLURAL_NTOPT);
|
||||
Nouns::supply_text(t, Node::get_text(pn->next->next), nl, g,
|
||||
1, ADD_TO_LEXICON_NTOPT + WITH_PLURAL_FORMS_NTOPT);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -516,8 +516,7 @@ binary_predicate *BinaryPredicates::make_pair(int family,
|
|||
word_assemblage wa =
|
||||
PreformUtilities::merge(<relation-name-formal>, 0, source_name);
|
||||
wording AW = WordAssemblages::to_wording(&wa);
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
MISCELLANEOUS_MC, Rvalues::from_binary_predicate(bp));
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,13 @@ name_resolution_data *Sentences::Headings::name_resolution_data(noun *t) {
|
|||
return &(t->name_resolution);
|
||||
}
|
||||
|
||||
void Sentences::Headings::initialise_noun_resolution(noun *t) {
|
||||
if (t == NULL) internal_error("tried to initialise resolution data for null tag");
|
||||
Sentences::Headings::disturb();
|
||||
Sentences::Headings::attach_noun(t);
|
||||
Sentences::Headings::verify_divisions();
|
||||
}
|
||||
|
||||
int no_tags_attached = 0;
|
||||
void Sentences::Headings::attach_noun(noun *new_tag) {
|
||||
if (current_sentence == NULL) return;
|
||||
|
@ -182,9 +189,8 @@ void Sentences::Headings::construct_noun_search_list(void) {
|
|||
|
||||
@<Start the search list empty@>;
|
||||
|
||||
int i;
|
||||
for (i=1; i<=MAX_NOUN_PRIORITY; i++)
|
||||
Sentences::Headings::build_search_list_from(h, NULL, i);
|
||||
Sentences::Headings::build_search_list_from(h, NULL, COMMON_NOUN);
|
||||
Sentences::Headings::build_search_list_from(h, NULL, PROPER_NOUN);
|
||||
|
||||
@<Verify that the search list indeed contains every noun just once@>;
|
||||
|
||||
|
@ -263,7 +269,7 @@ void Sentences::Headings::build_search_list_from(heading *within, heading *way_w
|
|||
if (within == NULL) return;
|
||||
|
||||
LOOP_OVER_NOUNS_UNDER(nt, within)
|
||||
if (Nouns::priority(nt) == p)
|
||||
if (Nouns::subclass(nt) == p)
|
||||
@<Add tag to the end of the search list@>;
|
||||
|
||||
/* recurse downwards through subordinate headings, other than the way we came up */
|
||||
|
@ -306,6 +312,34 @@ noun *Sentences::Headings::highest_scoring_noun_searched(void) {
|
|||
return best_nt;
|
||||
}
|
||||
|
||||
@ It's a tricky task to choose from a list of possible nouns which might have
|
||||
been intended by text such as "chair". If the list is empty or contains only
|
||||
one choice, no problem. Otherwise we will probably have to reorder the noun
|
||||
search list, and then run through it. The code below looks as if it picks out
|
||||
the match with highest score, so that the ordering is unimportant, but in fact
|
||||
the score assigned to a match is based purely on the number of words missed
|
||||
out (see later): that means that ambiguities often arise between two lexically
|
||||
similar objects, e.g., a "blue chair" or a "red chair" when the text simply
|
||||
specifies "chair". Since the code below accepts the first noun with the
|
||||
highest score, the outcome is thus determined by which of the blue and red
|
||||
chairs ranks highest in the search list: and that is why the search list is so
|
||||
important.
|
||||
|
||||
@d NOUN_DISAMBIGUATION_LINGUISTICS_CALLBACK Sentences::Headings::choose_highest_scoring_noun
|
||||
|
||||
=
|
||||
noun *Sentences::Headings::choose_highest_scoring_noun(parse_node *p, int common_only) {
|
||||
Sentences::Headings::construct_noun_search_list();
|
||||
noun *nt;
|
||||
LOOP_OVER(nt, noun) Sentences::Headings::set_noun_search_score(nt, 0);
|
||||
for (parse_node *p2 = p; p2; p2 = p2->next_alternative) {
|
||||
noun *nt = RETRIEVE_POINTER_noun(Lexicon::get_data(Node::get_meaning(p2)));
|
||||
if (Nouns::is_eligible_match(nt, common_only))
|
||||
Sentences::Headings::set_noun_search_score(nt, Node::get_score(p2));
|
||||
}
|
||||
return Sentences::Headings::highest_scoring_noun_searched();
|
||||
}
|
||||
|
||||
@h Handling headings during the main traverses.
|
||||
Here's what we do when we run into a heading, as we look through the
|
||||
assertions in the source text: nothing, except to wipe out any meanings of
|
||||
|
@ -482,7 +516,7 @@ in practice strews distractingly many orange berries across the page.
|
|||
noun *nt;
|
||||
int c = 0;
|
||||
LOOP_OVER_NOUNS_UNDER(nt, h) {
|
||||
wording W = Nouns::get_name(nt, FALSE);
|
||||
wording W = Nouns::nominative(nt, FALSE);
|
||||
if (Wordings::nonempty(W)) {
|
||||
if (c++ == 0) {
|
||||
HTML::open_indented_p(OUT, ind_used+1, "hanging");
|
||||
|
|
|
@ -1,851 +0,0 @@
|
|||
[Parser::SP::MeaningLists::] Meaning Lists.
|
||||
|
||||
To build meaning lists, which despite the name are really tree
|
||||
structures, showing possible interpretations of a sequence of words.
|
||||
|
||||
@h Definitions.
|
||||
|
||||
@ Meaning lists are an intermediate construction within the S-parser,
|
||||
used to hold the possible meanings of complex excerpts of text. The S-parser
|
||||
completes its work by turning any meaning list for a successfully parsed
|
||||
piece of text into a much more compact |specification| structure,
|
||||
perhaps with a proposition in predicate calculus attached. This is both
|
||||
smaller and much less ambiguous in meaning. It would remove a layer of
|
||||
code in Inform, and also one delicate interface between layers, if the
|
||||
S-parser could parse directly to specifications; and this is what
|
||||
the earliest builds did, in 2003 and 2004, but the result was that
|
||||
|specification| became a very complex structure, trying to perform
|
||||
two different tasks at once -- being a sort of checklist of possibilities
|
||||
and then being a definite answer. Separating these two roles and inventing
|
||||
meaning lists was a very disruptive decision, but eventually resulted in cleaner
|
||||
and simpler code.
|
||||
|
||||
@ We have already seen meaning lists used to store lists of possible
|
||||
excerpt meanings attached to given words, but that's not their main
|
||||
function, and despite the name they are not necessarily simple lists. They
|
||||
are a sort of two-dimensional tree structure where every node P represents
|
||||
one possible meaning of a given excerpt of the original text. Because in
|
||||
general the meaning will be complicated, and not as simple as a single
|
||||
noun, P will also have children which are nodes representing meanings of
|
||||
subexcerpts.
|
||||
|
||||
A two-dimensional tree is hard to visualise, but in practice they are easy
|
||||
enough to read: they are basically standard parse-trees except that at
|
||||
certain points they fork off into different possibilities. For instance, if
|
||||
we try to parse the example phrase at the beginning of this chapter:
|
||||
|
||||
>> if Mr Fitzwilliam Darcy was carrying at least three things which are in the box, increase the score by 7;
|
||||
|
||||
then the S-parser initially generates the following meaning list:
|
||||
= (text)
|
||||
CMD_ML / "if mr fitzwilliam darcy was carrying at least ..."
|
||||
PHRASE_ML
|
||||
[1/2] (score 1) {# at # = VOID_PHRASE_MC} / "if mr fitzwilliam ..."
|
||||
UNPARSED_ML / "if mr fitzwilliam darcy was carrying"
|
||||
UNPARSED_ML / "least three things which are in the box..."
|
||||
[2/2] (score 1) {if # , # = VOID_PHRASE_MC} / "if mr fitzwilliam darcy..."
|
||||
UNPARSED_ML / "mr fitzwilliam darcy was carrying at..."
|
||||
UNPARSED_ML / "increase the score by 7"
|
||||
=
|
||||
The notation |[1/2]| means "possibility 1 of 2". This structure shows that
|
||||
the S-parser is certain that we have a command phrase, but that on textual
|
||||
grounds alone it could be one of two possibilities. In fact, |[2/2]| is the
|
||||
valid one, as will become clear when it returns to parse the arguments currently
|
||||
left as |UNPARSED_ML| nodes.
|
||||
|
||||
@ When the S-parser gets to the condition (argument 1 of possibility |[2/2]| above),
|
||||
a more elaborate meaning list results, but which is unambiguous:
|
||||
= (text)
|
||||
COND_ML / "mr fitzwilliam darcy was carrying at least ... in the box"
|
||||
SV_ML / "mr fitzwilliam darcy was carrying at least ... in the box"
|
||||
NP_ML / "mr fitzwilliam darcy"
|
||||
VAL_ML / "mr fitzwilliam darcy"
|
||||
DC_ML / "mr fitzwilliam darcy"
|
||||
DC_NOUN_ML / "mr fitzwilliam darcy"
|
||||
{mr fitzwilliam darcy = NAMETAG_MC}
|
||||
VP_ML
|
||||
VERB_ML => VU: was WAS_TENSE -> is
|
||||
PREP_ML => PU: carrying -> carries
|
||||
NP_ML / "at least three things which are in the box"
|
||||
VAL_ML / "at least three things which are in the box"
|
||||
DC_ML / "at least three things which are in the box"
|
||||
SN_ML / "at least three things which are in the box"
|
||||
DC_ML / "at least three things"
|
||||
DC_NOUN_ML / "things"
|
||||
{things = NAMETAG_MC}
|
||||
DETERMINER_ML => Card>=3 / "at least three"
|
||||
VP_ML
|
||||
VERB_ML => VU: are IS_TENSE -> is
|
||||
PREP_ML => PU: in -> is-in
|
||||
DC_ML / "box"
|
||||
DC_NOUN_ML / "box"
|
||||
{mr bingham's box = NAMETAG_MC}
|
||||
DETERMINER_ML => Card>=3 / "at least three"
|
||||
=
|
||||
Note the three concrete noun phrases -- Mr Darcy, the box, and "things". It's
|
||||
perhaps surprising that the determiner for "at least three" turns up twice
|
||||
in the tree, but this is because the sub-excerpt
|
||||
|
||||
>> at least three things
|
||||
|
||||
is also validly subject to the determiner, so its subtree contains the
|
||||
appropriate node.
|
||||
|
||||
As this shows, the result of parsing can be an extravagantly big meaning list.
|
||||
When the S-parser finishes, it is translated into much more compact data:
|
||||
a single specification representing a condition,
|
||||
= (text)
|
||||
(A)'mr fitzwilliam ... box'/CONDITION_FMY/TEST_PROPOSITION_SPC<0 times: WAS_TENSE>
|
||||
=
|
||||
and with the proposition
|
||||
= (text)
|
||||
[ Card>=3 x: K2'thing'(x) ^ is(O104'mr bingham's box',ContainerOf(x)) =>
|
||||
is(O105'mr fitzwilliam darcy',CarrierOf(x)) ]
|
||||
=
|
||||
which can be paraphrased "at least three $x$ which are things and such that
|
||||
their container is the box are also such that Mr Darcy is their carrier".
|
||||
|
||||
@ So, then, each meaning list node has children and siblings to place it into
|
||||
a parse tree, but also forking links to alternative meanings. The actual
|
||||
data at a node can be a value (the |type_spec|), an excerpt meaning, or
|
||||
in some cases a pointer to some other structure. For instance, a
|
||||
|VERB_ML| node has a pointer to the relevant |verb_usage| attached.
|
||||
|
||||
=
|
||||
typedef struct meaning_list {
|
||||
int expiry_time; /* an integer measured in creation "cycles": see below */
|
||||
unsigned int production; /* a production code */
|
||||
int word_ref1, word_ref2; /* word pair as usual */
|
||||
struct excerpt_meaning *em; /* what this seems to mean... */
|
||||
struct specification *type_spec; /* evaluation used in compaction */
|
||||
struct general_pointer data_attached; /* certain productions have data attached */
|
||||
struct meaning_list *next_alternative; /* fork to alternative meaning */
|
||||
int score; /* a scoring system is used to choose most likely alternative */
|
||||
struct meaning_list *sibling; /* tree of meanings of subordinate clauses */
|
||||
struct meaning_list *child;
|
||||
CLASS_DEFINITION
|
||||
} meaning_list;
|
||||
|
||||
int no_permanent_MLs = 0, no_ephemeral_MLs = 0, GAP_movements = 0;
|
||||
|
||||
@ It will be noted that the meaning codes for excerpt meanings use the bottom
|
||||
31 bits of a (presumably) 32-bit word to hold sets of contexts, but never have
|
||||
bit 32 set. Meaning codes with bit 32 set are not considered as sets but
|
||||
simply as magic values in themselves. When we parse a complicated piece of
|
||||
text, the result is a tree in which the leaves are excerpts with simple
|
||||
meanings, where the |production| field is a meaning code; but the higher
|
||||
nodes have |production| values from the following set.
|
||||
|
||||
(There is no significance to these numbers except that they must all be
|
||||
different, and must all have bit 32 set.)
|
||||
|
||||
@d ABSENT_SUBJECT_ML 0x80000010
|
||||
@d ADVERB_ML 0x80000030
|
||||
@d AL_ML 0x80000040
|
||||
@d AP_ML 0x80000050
|
||||
@d CALLED_ML 0x80000058
|
||||
@d CARRIED_ML 0x80000060
|
||||
@d CASE_ML 0x80000070
|
||||
@d OTHERWISE_ML 0x80000080
|
||||
@d CMD_ML 0x80000090
|
||||
@d COND_AND_ML 0x800000a0
|
||||
@d COND_NOT_ML 0x800000b0
|
||||
@d COND_OR_ML 0x800000c0
|
||||
@d COND_PAST_ML 0x800000d0
|
||||
@d COND_PHRASE_ML 0x800000e0
|
||||
@d COND_ML 0x800000f0
|
||||
@d DC_ADJS_ML 0x80000100
|
||||
@d DC_ADJSNOUN_ML 0x80000110
|
||||
@d DC_NOUN_ML 0x80000130
|
||||
@d DC_ML 0x80000140
|
||||
@d DETERMINER_ML 0x80000180
|
||||
@d INSTEAD_ML 0x80000190
|
||||
@d LITERAL_ML 0x800001a0
|
||||
@d LOCAL_ML 0x800001b0
|
||||
@d MEMBER_OF_ML 0x800001c0
|
||||
@d ADJ_NOT_ML 0x800001e0
|
||||
@d NP_ML 0x800001f0
|
||||
@d OPTION_ML 0x80000200
|
||||
@d PHR_OPT_ML 0x80000210
|
||||
@d PHRASE_ML 0x80000220
|
||||
@d PREP_ML 0x80000240
|
||||
@d SAY_ML 0x80000250
|
||||
@d SN_ML 0x80000270
|
||||
@d STV_ML 0x80000280
|
||||
@d SV_ML 0x80000290
|
||||
@d TE_CALLED_ML 0x800002a0
|
||||
@d TE_EX_VAR_ML 0x800002b0
|
||||
@d TE_GL_VAR_ML 0x800002c0
|
||||
@d TE_NEW_VAR_ML 0x800002e0
|
||||
@d TE_ML 0x800002f0
|
||||
@d TE_VAR_ML 0x80000300
|
||||
@d THERE_ML 0x80000310
|
||||
@d TIME_ML 0x80000320
|
||||
@d TR_CORR_ML 0x80000330
|
||||
@d TR_ENTRY_ML 0x80000340
|
||||
@d TR_IN_ROW_ML 0x80000350
|
||||
@d TR_LISTED_IN_ML 0x80000360
|
||||
@d TR_OF_IN_ML 0x80000370
|
||||
@d TR_ML 0x80000380
|
||||
@d TYPE_ML 0x80000390
|
||||
@d UNPARSED_ML 0x800003a0
|
||||
@d VAL_LIST_ENTRY_ML 0x800003b0
|
||||
@d VAL_NOTHING_ML 0x800003c0
|
||||
@d VAL_ML 0x800003d0
|
||||
@d VAL_PAIR_ML 0x800003e0
|
||||
@d VAL_PROP_OF_ML 0x800003f0
|
||||
@d VAL_RESPONSE_ML 0x80000400
|
||||
@d VALUE_PHRASE_ML 0x80000410
|
||||
@d VERB_ML 0x80000420
|
||||
@d VP_ML 0x80000430
|
||||
@d COMPOSITED_ML 0x80000440
|
||||
|
||||
@d EQUATION_INLINE_ML 0x80000450
|
||||
@d EQUATION_WHERE_ML 0x80000460
|
||||
@d SAY_VERB_ML 0x80000470
|
||||
@d SAY_MODAL_VERB_ML 0x80000480
|
||||
@d SAY_ADJECTIVE_ML 0x80000490
|
||||
|
||||
@h Logging production values.
|
||||
|
||||
=
|
||||
void Parser::SP::MeaningLists::log_production(unsigned int production) {
|
||||
if (production == 0) { LOG("<null-production>"); return; }
|
||||
if (production & 0x80000000) {
|
||||
switch (production) {
|
||||
case ABSENT_SUBJECT_ML: LOG("ABSENT_SUBJECT_ML"); break;
|
||||
case ADVERB_ML: LOG("ADVERB_ML"); break;
|
||||
case AL_ML: LOG("AL_ML"); break;
|
||||
case AP_ML: LOG("AP_ML"); break;
|
||||
case CALLED_ML: LOG("CALLED_ML"); break;
|
||||
case CARRIED_ML: LOG("CARRIED_ML"); break;
|
||||
case CASE_ML: LOG("CASE_ML"); break;
|
||||
case OTHERWISE_ML: LOG("OTHERWISE_ML"); break;
|
||||
case CMD_ML: LOG("CMD_ML"); break;
|
||||
case COMPOSITED_ML: LOG("COMPOSITED_ML"); break;
|
||||
case COND_AND_ML: LOG("COND_AND_ML"); break;
|
||||
case COND_NOT_ML: LOG("COND_NOT_ML"); break;
|
||||
case COND_OR_ML: LOG("COND_OR_ML"); break;
|
||||
case COND_PAST_ML: LOG("COND_PAST_ML"); break;
|
||||
case COND_PHRASE_ML: LOG("COND_PHRASE_ML"); break;
|
||||
case COND_ML: LOG("COND_ML"); break;
|
||||
case DC_ADJS_ML: LOG("DC_ADJS_ML"); break;
|
||||
case DC_ADJSNOUN_ML: LOG("DC_ADJSNOUN_ML"); break;
|
||||
case DC_NOUN_ML: LOG("DC_NOUN_ML"); break;
|
||||
case DC_ML: LOG("DC_ML"); break;
|
||||
case DETERMINER_ML: LOG("DETERMINER_ML"); break;
|
||||
case EQUATION_INLINE_ML: LOG("EQUATION_INLINE_ML"); break;
|
||||
case EQUATION_WHERE_ML: LOG("EQUATION_WHERE_ML"); break;
|
||||
case INSTEAD_ML: LOG("INSTEAD_ML"); break;
|
||||
case LITERAL_ML: LOG("LITERAL_ML"); break;
|
||||
case LOCAL_ML: LOG("LOCAL_ML"); break;
|
||||
case MEMBER_OF_ML: LOG("MEMBER_OF_ML"); break;
|
||||
case ADJ_NOT_ML: LOG("ADJ_NOT_ML"); break;
|
||||
case NP_ML: LOG("NP_ML"); break;
|
||||
case OPTION_ML: LOG("OPTION_ML"); break;
|
||||
case PHR_OPT_ML: LOG("PHR_OPT_ML"); break;
|
||||
case PHRASE_ML: LOG("PHRASE_ML"); break;
|
||||
case PREP_ML: LOG("PREP_ML"); break;
|
||||
case SAY_ML: LOG("SAY_ML"); break;
|
||||
case SAY_ADJECTIVE_ML: LOG("SAY_ADJECTIVE_ML"); break;
|
||||
case SAY_VERB_ML: LOG("SAY_VERB_ML"); break;
|
||||
case SAY_MODAL_VERB_ML: LOG("SAY_MODAL_VERB_ML"); break;
|
||||
case SN_ML: LOG("SN_ML"); break;
|
||||
case STV_ML: LOG("STV_ML"); break;
|
||||
case SV_ML: LOG("SV_ML"); break;
|
||||
case TE_CALLED_ML: LOG("TE_CALLED_ML"); break;
|
||||
case TE_EX_VAR_ML: LOG("TE_EX_VAR_ML"); break;
|
||||
case TE_GL_VAR_ML: LOG("TE_GL_VAR_ML"); break;
|
||||
case TE_NEW_VAR_ML: LOG("TE_NEW_VAR_ML"); break;
|
||||
case TE_ML: LOG("TE_ML"); break;
|
||||
case TE_VAR_ML: LOG("TE_VAR_ML"); break;
|
||||
case THERE_ML: LOG("THERE_ML"); break;
|
||||
case TIME_ML: LOG("TIME_ML"); break;
|
||||
case TR_CORR_ML: LOG("TR_CORR_ML"); break;
|
||||
case TR_ENTRY_ML: LOG("TR_ENTRY_ML"); break;
|
||||
case TR_IN_ROW_ML: LOG("TR_IN_ROW_ML"); break;
|
||||
case TR_LISTED_IN_ML: LOG("TR_LISTED_IN_ML"); break;
|
||||
case TR_OF_IN_ML: LOG("TR_OF_IN_ML"); break;
|
||||
case TR_ML: LOG("TR_ML"); break;
|
||||
case TYPE_ML: LOG("TYPE_ML"); break;
|
||||
case UNPARSED_ML: LOG("UNPARSED_ML"); break;
|
||||
case VAL_LIST_ENTRY_ML: LOG("VAL_LIST_ENTRY_ML"); break;
|
||||
case VAL_NOTHING_ML: LOG("VAL_NOTHING_ML"); break;
|
||||
case VAL_PAIR_ML: LOG("VAL_PAIR_ML"); break;
|
||||
case VAL_ML: LOG("VAL_ML"); break;
|
||||
case VAL_PROP_OF_ML: LOG("VAL_PROP_OF_ML"); break;
|
||||
case VAL_RESPONSE_ML: LOG("VAL_RESPONSE_ML"); break;
|
||||
case VALUE_PHRASE_ML: LOG("VALUE_PHRASE_ML"); break;
|
||||
case VERB_ML: LOG("VERB_ML"); break;
|
||||
case VP_ML: LOG("VP_ML"); break;
|
||||
default: LOG("<unknown-production-%08x>", production); break;
|
||||
}
|
||||
} else Semantics::Nouns::ExcerptMeanings::log_meaning_code(production);
|
||||
}
|
||||
|
||||
@ Logging a meaning list is more than a matter of displaying an indented tree,
|
||||
because of the ambiguities present. The log uses the notation |[1/3]| for
|
||||
"possibility 1 of 3".
|
||||
|
||||
@d LOG_ML_SAFETY_LIMIT 100
|
||||
|
||||
=
|
||||
void Parser::SP::MeaningLists::log(meaning_list *ml) {
|
||||
if (ml == NULL) { LOG("<null-meaning-list>\n"); return; }
|
||||
Parser::SP::MeaningLists::log_ml_recursively(ml, 0, 0, 1);
|
||||
}
|
||||
|
||||
void Parser::SP::MeaningLists::log_ml_recursively(meaning_list *ml, int num, int of, int gen) {
|
||||
if (gen > LOG_ML_SAFETY_LIMIT) { LOG("*** Pruned: tree large or damaged ***\n"); return; }
|
||||
int w1, w2;
|
||||
@<Calculate num and of such that this is [num/of] if they aren't already supplied@>;
|
||||
|
||||
if (ml == NULL) { LOG("NULL\n"); return; }
|
||||
if (of > 1) {
|
||||
LOG("[%d/%d] ", num, of);
|
||||
if (ml->score != 0) LOG("(score %d) ", ml->score);
|
||||
}
|
||||
if (ml->em) LOG("$M", ml->em);
|
||||
else Parser::SP::MeaningLists::log_production(ml->production);
|
||||
if (ml->type_spec) {
|
||||
LOG(" => ");
|
||||
if (ml->production == TIME_ML) LOG("$t", Specifications::get_condition_tense(ml->type_spec));
|
||||
else LOG("$S", ml->type_spec);
|
||||
}
|
||||
@<Describe attached data for a few special cases with pointers attached@>;
|
||||
Parser::SP::MeaningLists::get_text(ml, &w1, &w2);
|
||||
if (w1 >= 0) LOG(" / \"$W\"", w1, w2);
|
||||
LOG("\n");
|
||||
|
||||
if (ml->child) {
|
||||
LOG_INDENT; Parser::SP::MeaningLists::log_ml_recursively(ml->child, 0, 0, gen+1); LOG_OUTDENT;
|
||||
}
|
||||
if (ml->next_alternative) Parser::SP::MeaningLists::log_ml_recursively(ml->next_alternative, num+1, of, gen+1);
|
||||
if (ml->sibling) Parser::SP::MeaningLists::log_ml_recursively(ml->sibling, 0, 0, gen+1);
|
||||
}
|
||||
|
||||
@ When the first alternative is called, |Parser::SP::MeaningLists::log_ml_recursively| has arguments 0
|
||||
and 0 for the possibility. The following code finds out the correct value for
|
||||
|of|, setting this possibility to be |[1/of]|. When we later iterate through
|
||||
other alternatives, we pass on correct values of |num| and |of|, so that this
|
||||
code won't be used again on the same horizontal list of possibilities.
|
||||
|
||||
@<Calculate num and of such that this is [num/of] if they aren't already supplied@> =
|
||||
if (num == 0) {
|
||||
meaning_list *ml2;
|
||||
for (ml2 = ml, of = 0; ml2; ml2 = ml2->next_alternative, of++) ;
|
||||
num = 1;
|
||||
}
|
||||
|
||||
@ Most higher-up nodes in the list are described fully by production
|
||||
number alone -- every |VAL_ML| is like every other. But a few have
|
||||
data attached, a pointer to some other structure, to clarify them. Not
|
||||
every |PREP_ML| is like every other; it depends what the preposition
|
||||
usage is.
|
||||
|
||||
@<Describe attached data for a few special cases with pointers attached@> =
|
||||
switch (ml->production) {
|
||||
case DETERMINER_ML:
|
||||
LOG(" => ");
|
||||
Quantifiers::log(RETRIEVE_POINTER_quantifier(ml->data_attached), ml->score); break;
|
||||
case VERB_ML:
|
||||
LOG(" => ");
|
||||
Verbs::log(RETRIEVE_POINTER_verb_usage(ml->data_attached)); break;
|
||||
case PREP_ML:
|
||||
LOG(" => ");
|
||||
Prepositions::log(RETRIEVE_POINTER_preposition_usage(ml->data_attached)); break;
|
||||
}
|
||||
|
||||
@h Creation.
|
||||
When we ask the memory manager to create a new structure, we increase
|
||||
the amount of memory claimed from the operating system, little by little.
|
||||
This memory will not be given back until Inform exits: structures, once
|
||||
created, are permanent. Normally this is what we want -- to hold a phrase
|
||||
definition, for instance, which needs to be available for the rest of the
|
||||
run.
|
||||
|
||||
Meaning lists are the exception. In tests made in February 2009, compiling
|
||||
"Bronze" generated around 189,000 |meaning_list| structures, but only
|
||||
1 in 50 were needed in permanent storage -- to hold the lists of excerpt
|
||||
meanings attached to vocabulary words, which together make up Inform's
|
||||
equivalent of a symbols table. The other 49 in 50 |meaning_list| structures
|
||||
were ephemeral -- an intermediate result of parsing text which could be thrown
|
||||
away once acted on. So that is what the following new system will do.
|
||||
|
||||
Each |meaning_list| is marked with an expiry date when created --
|
||||
most often the "current time", just as supermarket bread is tagged with a
|
||||
sell-by date which is the same as the day of baking. The rarer permanent
|
||||
MLs are marked instead with impossibly distant expiry dates, like Army
|
||||
field rations. The "current time", for this purpose, has no connection
|
||||
with the time of day. It begins at 0 and advances by 1 whenever Inform
|
||||
completes some parsing-heavy task: working through an assertion sentence,
|
||||
compiling a phrase, and so on. A meaning list structure whose expiry date
|
||||
is before the current time is said to have "expired".
|
||||
|
||||
@d THE_INFINITE_FUTURE 2147483647
|
||||
|
||||
@ When we need a new meaning list, we first look for an expired one to
|
||||
reuse -- only if that fails do we ask the memory manager to create
|
||||
a new structure. A complete search of existing structures would produce
|
||||
the best-possible memory economy, but would also be slow. For speed
|
||||
reasons we therefore use the following pragmatic strategy:
|
||||
|
||||
(a) A new ephemeral ML reuses the first expired structure after the
|
||||
last-created permanent one, but
|
||||
(b) A new permanent ML reuses the expired structure in memory.
|
||||
|
||||
We do this by keeping three markers: the earliest ephemeral ML occurring
|
||||
one or more places before some permanent ML, the "GAP";
|
||||
the latest permanent one, the "LP"; and the start of the expired tail,
|
||||
"TAIL", characterised by the fact that it and all subsequent MLs have
|
||||
expired.
|
||||
|
||||
For instance, suppose the time is now 1021 and the list of MLs in memory
|
||||
shows expiry dates thus:
|
||||
= (text)
|
||||
PERMANENT -> 1020 -> PERMANENT -> PERMANENT -> 1021 -> 1020 -> 976
|
||||
^GAP ^LP ^TAIL
|
||||
=
|
||||
A new ephemeral ML reuses the TAIL position, the second 1020, and TAIL
|
||||
moves forwards:
|
||||
= (text)
|
||||
PERMANENT -> 1020 -> PERMANENT -> PERMANENT -> 1021 -> 1021 -> 976
|
||||
^GAP ^LP ^TAIL
|
||||
=
|
||||
Whereas a new permanent ML reuses the GAP position, filling in the gap,
|
||||
and GAP becomes |NULL|:
|
||||
= (text)
|
||||
PERMANENT -> PERMANENT -> PERMANENT -> PERMANENT -> 1021 -> 1021 -> 976
|
||||
^LP ^TAIL
|
||||
=
|
||||
Note that LP moves only forwards. GAP is |NULL| from time to time, but its
|
||||
non-|NULL| values always move forwards, too. The sequence is always GAP
|
||||
strictly behind LP strictly behind TAIL, when these are not |NULL|, and
|
||||
no two ever coincide.
|
||||
|
||||
Perfect efficiency is achieved when GAP is |NULL|, as here. In
|
||||
practice this doesn't always happen. But MLs do tend to concentrate early in
|
||||
memory; on a long run they end up about 90\% contiguous, that is, if there
|
||||
are $N$ permanent MLs then they tend to live in the first $1.1N$ positions.
|
||||
That will be good enough for us, and the important point about the above
|
||||
algorithm is that it allocates $M$ objects in $O(M)$ time, not $O(M^2)$,
|
||||
which with $M\simeq 190,000$ would hurt.
|
||||
|
||||
=
|
||||
meaning_list *LP_marker = NULL, *GAP_marker = NULL, *TAIL_marker = NULL;
|
||||
meaning_list *earliest_ephemeral_ML_today = NULL;
|
||||
|
||||
int current_creation_time = 0, max_ML_creations_per_day = 0, no_ML_creations_today;
|
||||
|
||||
@ First, the allocation.
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::get_available_ml(int seeking_permanent_slot) {
|
||||
meaning_list *new;
|
||||
if ((seeking_permanent_slot) && (GAP_marker)) {
|
||||
new = GAP_marker;
|
||||
LOGIF(MEANING_LIST_ALLOCATION, "Time %d: Using GAP position ML%d with expiry time %d\n",
|
||||
current_creation_time, new->allocation_id, new->expiry_time);
|
||||
/* here TAIL does not change */
|
||||
@<Move the GAP marker forward to the next gap, if any@>;
|
||||
} else if (TAIL_marker) {
|
||||
new = TAIL_marker;
|
||||
LOGIF(MEANING_LIST_ALLOCATION, "Time %d: Using TAIL position ML%d with expiry time %d\n",
|
||||
current_creation_time, new->allocation_id, new->expiry_time);
|
||||
/* here any GAP is unaltered */
|
||||
TAIL_marker = NEXT_OBJECT(TAIL_marker, meaning_list);
|
||||
if (seeking_permanent_slot) LP_marker = new;
|
||||
} else {
|
||||
new = CREATE(meaning_list);
|
||||
LOGIF(MEANING_LIST_ALLOCATION, "Time %d: Using new position ML%d\n",
|
||||
current_creation_time, new->allocation_id);
|
||||
/* here any TAIL vanishes, but a GAP is unaltered */
|
||||
TAIL_marker = NULL;
|
||||
if (seeking_permanent_slot) LP_marker = new;
|
||||
}
|
||||
if (seeking_permanent_slot) new->expiry_time = THE_INFINITE_FUTURE;
|
||||
else {
|
||||
new->expiry_time = current_creation_time;
|
||||
if (earliest_ephemeral_ML_today == NULL) earliest_ephemeral_ML_today = new;
|
||||
}
|
||||
no_ML_creations_today++;
|
||||
LOGIF(MEANING_LIST_ALLOCATION, "Time %d: GAP = ML%d, LP = ML%d, TAIL = ML%d\n",
|
||||
current_creation_time,
|
||||
(GAP_marker)?(GAP_marker->allocation_id):0,
|
||||
(LP_marker)?(LP_marker->allocation_id):0,
|
||||
(TAIL_marker)?(TAIL_marker->allocation_id):0);
|
||||
return new;
|
||||
}
|
||||
|
||||
@ Everything before the GAP is permanent, and the new item put there will also
|
||||
be permanent. We must move forward over unexpired items. There are then three
|
||||
possibilities: we run out (there are now no expired items in the list, so the
|
||||
new GAP is |NULL|); or we are at the TAIL position (so everything is expired
|
||||
from here on, and GAP must again be |NULL|); or we are at an expired item
|
||||
before the TAIL, which is therefore a new valid GAP item.
|
||||
|
||||
@<Move the GAP marker forward to the next gap, if any@> =
|
||||
do {
|
||||
GAP_marker = NEXT_OBJECT(GAP_marker, meaning_list);
|
||||
GAP_movements++;
|
||||
} while ((GAP_marker) && (GAP_marker->expiry_time >= current_creation_time));
|
||||
if (GAP_marker == TAIL_marker) GAP_marker = NULL;
|
||||
|
||||
@ Second, moving time on to the next day. There is little prospect of
|
||||
reaching |THE_INFINITE_FUTURE|, but just in case we do, we stop time
|
||||
there; infinity is the day that never sees midnight.
|
||||
|
||||
=
|
||||
void Parser::SP::MeaningLists::finish_this_session(void) {
|
||||
if (current_creation_time < THE_INFINITE_FUTURE) {
|
||||
if (Log::get_aspect(MEANING_LIST_ALLOCATION_DA)) {
|
||||
LOG("Time %d: %d items were created today ",
|
||||
current_creation_time, no_ML_creations_today);
|
||||
if (no_ML_creations_today > max_ML_creations_per_day) {
|
||||
LOG("- a new record!");
|
||||
max_ML_creations_per_day = no_ML_creations_today;
|
||||
}
|
||||
LOG("\n");
|
||||
}
|
||||
@<Adjust the markers at midnight@>;
|
||||
current_creation_time++;
|
||||
earliest_ephemeral_ML_today = NULL;
|
||||
no_ML_creations_today = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ To continue our example, at one minute to midnight on day 1021 we had:
|
||||
= (text)
|
||||
PERMANENT -> PERMANENT -> PERMANENT -> PERMANENT -> 1021 -> 1021 -> 976
|
||||
^LP ^TAIL
|
||||
=
|
||||
And at one minute past midnight on day 1022 we have:
|
||||
= (text)
|
||||
PERMANENT -> PERMANENT -> PERMANENT -> PERMANENT -> 1021 -> 1021 -> 976
|
||||
^LP ^TAIL
|
||||
=
|
||||
LP doesn't move, since there is no change to the permanent items. Since every
|
||||
non-permanent item expired at midnight, the new TAIL always starts just after LP.
|
||||
|
||||
The tricky one is GAP. If it is non-|NULL| at midnight, it doesn't change,
|
||||
since it is still an expired item with everything before it permanent. But if
|
||||
it is |NULL|, we only know that any gaps in the permanent items are filled
|
||||
with day-1021 creations, like this:
|
||||
= (text)
|
||||
PERMANENT -> PERMANENT -> PERMANENT -> 1021 -> 1021 -> PERMANENT -> 1021 -> 976
|
||||
=
|
||||
Consider the first day-1021 creation in the list. If it doesn't exist
|
||||
(i.e., there are no day-1021 items) there is still no GAP. Otherwise it
|
||||
exists, and is either before, at or after the new TAIL position. If before
|
||||
TAIL (or if there is no TAIL), it is the new GAP. If at or after TAIL then
|
||||
there are no permanent items after it, and once again there is still no GAP.
|
||||
|
||||
@<Adjust the markers at midnight@> =
|
||||
TAIL_marker = NEXT_OBJECT(LP_marker, meaning_list);
|
||||
if (GAP_marker == NULL) {
|
||||
GAP_marker = earliest_ephemeral_ML_today;
|
||||
if ((TAIL_marker) && (GAP_marker) &&
|
||||
(GAP_marker->allocation_id >= TAIL_marker->allocation_id))
|
||||
GAP_marker = NULL;
|
||||
}
|
||||
|
||||
@ We can finally prove the running time of this algorithm over the entire
|
||||
run. Suppose $M$ meaning lists are allocated during the run. The midnight
|
||||
operation runs in $O(1)$ but occurs on each of the $D$ days; however, each
|
||||
day's activity requires the creation of at least one meaning list, so
|
||||
$D\leq M$ and midnight operations are worst $O(M)$. The allocation
|
||||
operation contains just one loop, when GAP moves forwards. Now GAP always
|
||||
advances until it becomes |NULL|, and since the list has length at most
|
||||
$M$, this is $\leq M$ iterations in total across Inform's run -- {\it
|
||||
except} that the midnight operation sometimes puts it back after it has
|
||||
become |NULL|, forcing it to traverse the last few items again.
|
||||
|
||||
For each $t$, let $C(t)$ be the number of allocations made on day $t$.
|
||||
We prove by induction that the number of extra GAP movements due to being
|
||||
put back at the end of day $t$, which we call $X(t)$, satisfies $X(t)\leq
|
||||
C(t)+C(t+1)$.
|
||||
|
||||
Suppose, at midnight on day $t$, GAP is put back into the new list. How
|
||||
many extra steps forward will that cost us before it falls off again? The
|
||||
answer is that it is put back at the earliest ephemeral day $t$ creation.
|
||||
This is at most $C(t)$ steps from the TAIL, which it will never advance
|
||||
past. However, the TAIL itself moves forwards during day $t+1$, by at most
|
||||
$C(t+1)$ steps. So the worst case is that the extra steps incurred due to
|
||||
day $t+1$ is actually $C(t)+C(t+1)$.
|
||||
|
||||
Therefore the total number of extra steps forward is
|
||||
$$ X = \sum_{t=0}^{D-1} X(t) \leq \sum_{t=0}^{D-1} C(t)+C(t+1)
|
||||
\leq 2\sum_{t=0}^{D-1} C(t) = 2M. $$
|
||||
It takes at most $M$ regular steps forward, so, finally, the number of
|
||||
iterations of the loop is bounded across the whole run by $3M$, and hence
|
||||
our allocation algorithm runs in $O(M)$ time.
|
||||
|
||||
@ Testing with "Bronze" in February 2009 in fact produced just 2438 steps
|
||||
where $M = 189165$, so in real-world usage it is very likely well under
|
||||
$3M$. At the end of the run there were 5411 MLs in memory, of which 4166
|
||||
were permanent. Only 1245 ephemeral MLs existed, instead of 184,999, saving
|
||||
about 10.5MB of memory -- a saving of 30\% off the total memory bill.
|
||||
|
||||
Though it had been intended as a trade-off of speed for memory savings, it
|
||||
in fact shaved about 15\% off Inform's total running time, because
|
||||
|Parser::SP::MeaningLists::get_available_ml| acts as a fast cache for spare memory in rapid-fire
|
||||
parsing.
|
||||
|
||||
@h Construction.
|
||||
We can now forget how memory for MLs is found, and worry about how to
|
||||
make them and what to use them for. We request them either temporarily or
|
||||
permanently:
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::new(unsigned int code_number) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::get_available_ml(FALSE);
|
||||
@<Initialise the rest of the ML structure@>;
|
||||
no_ephemeral_MLs++;
|
||||
return ml;
|
||||
}
|
||||
|
||||
meaning_list *Parser::SP::MeaningLists::new_permanent(unsigned int code_number) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::get_available_ml(TRUE);
|
||||
@<Initialise the rest of the ML structure@>;
|
||||
no_permanent_MLs++;
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ But in each case the result looks the same.
|
||||
|
||||
@<Initialise the rest of the ML structure@> =
|
||||
ml->em = NULL;
|
||||
ml->next_alternative = NULL;
|
||||
ml->sibling = NULL;
|
||||
ml->child = NULL;
|
||||
ml->type_spec = NULL;
|
||||
ml->score = 0;
|
||||
ml->production = code_number;
|
||||
Parser::SP::MeaningLists::set_text(ml, -1, -1);
|
||||
ml->data_attached = NULL_GENERAL_POINTER;
|
||||
|
||||
@ The following constructor routines fill out the fields in useful ways.
|
||||
Here's one if a word range is to be attached:
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::new_with_words(unsigned int code_number, int w1, int w2) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new(code_number);
|
||||
Parser::SP::MeaningLists::set_text(ml, w1, w2);
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ And here is one deriving from a nametag:
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::from_nametag(nametag *nt) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new(NAMETAG_MC);
|
||||
ml->em = Nametags::get_principal_meaning(nt);
|
||||
ml->score = 1;
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ |TYPE_ML| nodes hold specifications. As we will see,
|
||||
these can represent both actual and generic values (for instance, "7" and
|
||||
"a number"), but the ones attached to |TYPE_ML| nodes are always
|
||||
generic. First, a version to create such a node from the type ID number:
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::type_from_ID(int ID_number) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new(TYPE_ML);
|
||||
ml->type_spec = Specifications::new_generic_from_type_ID(ID_number);
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ Second, from a given kind:
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::type_from_kind(kind *K) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new(TYPE_ML);
|
||||
ml->type_spec = Specifications::Values::new_generic_CONSTANT(K);
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ |DETERMINER_ML| nodes record a quantifier (the underlying meaning
|
||||
of a determiner, that is) together with its numeric parameter, in case
|
||||
relevant.
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::determiner(quantifier *quant, int parameter, int w1, int w2) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new_with_words(DETERMINER_ML, w1, w2);
|
||||
ml->data_attached = STORE_POINTER_quantifier(quant);
|
||||
ml->score = parameter;
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ |TIME_ML| nodes record a time period, a structure which despite
|
||||
its name can also simply be a tense indication. Slightly bogusly, the time
|
||||
period is attached by being part of a condition SP, though no specific
|
||||
condition is meant -- it's just that conditions always have time periods
|
||||
attached to them, so this is the natural way to store them.
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::time(time_period tp) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new(TIME_ML);
|
||||
ml->type_spec = Specifications::Conditions::new(TimePeriods::store(tp));
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ |VERB_ML| nodes record the usage of a verb.
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::verb(verb_usage *vu) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new(VERB_ML);
|
||||
Parser::SP::MeaningLists::attach_data(ml, STORE_POINTER_verb_usage(vu));
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ |PREP_ML| nodes record the usage of SParSSa preposition.
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::preposition(preposition_usage *pu) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new(PREP_ML);
|
||||
Parser::SP::MeaningLists::attach_data(ml, STORE_POINTER_preposition_usage(pu));
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ An |OPTION_ML| node holds a phrase option name.
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::option(int opt_num) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new(OPTION_ML);
|
||||
ml->type_spec = Specifications::Conditions::new_TEST_PHRASE_OPTION(opt_num);
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ |SAY_VERB_ML| nodes hold references to verbs by their first person plural.
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::say_verb(verb_conjugation *vc, int neg) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new(SAY_VERB_ML);
|
||||
Parser::SP::MeaningLists::attach_data(ml, STORE_POINTER_verb_conjugation(vc));
|
||||
Parser::SP::MeaningLists::set_score(ml, neg);
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ |SAY_MODAL_VERB_ML| annotate those with modals like "might".
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::say_modal_verb(verb_conjugation *vc) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new(SAY_MODAL_VERB_ML);
|
||||
Parser::SP::MeaningLists::attach_data(ml, STORE_POINTER_verb_conjugation(vc));
|
||||
return ml;
|
||||
}
|
||||
|
||||
@ |SAY_ADJECTIVE_ML| nodes hold references to adjectives by their masculine
|
||||
singulars.
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::say_adjective(adjectival_phrase *aph) {
|
||||
meaning_list *ml = Parser::SP::MeaningLists::new(SAY_ADJECTIVE_ML);
|
||||
Parser::SP::MeaningLists::attach_data(ml, STORE_POINTER_adjectival_phrase(aph));
|
||||
return ml;
|
||||
}
|
||||
|
||||
@h Copying MLs.
|
||||
Note that this copies the contents of the ML, but not the expiry date, or
|
||||
indeed the memory manager's private fields.
|
||||
|
||||
=
|
||||
void Parser::SP::MeaningLists::copy(meaning_list *ml_to, meaning_list *ml_from) {
|
||||
ml_to->em = ml_from->em;
|
||||
ml_to->next_alternative = ml_from->next_alternative;
|
||||
ml_to->sibling = ml_from->sibling;
|
||||
ml_to->child = ml_from->child;
|
||||
ml_to->type_spec = ml_from->type_spec;
|
||||
ml_to->score = ml_from->score;
|
||||
ml_to->production = ml_from->production;
|
||||
ml_to->word_ref1 = ml_from->word_ref1;
|
||||
ml_to->word_ref2 = ml_from->word_ref2;
|
||||
ml_to->data_attached = ml_from->data_attached;
|
||||
}
|
||||
|
||||
@h Access routines.
|
||||
|
||||
=
|
||||
unsigned int Parser::SP::MeaningLists::production(meaning_list *ml) {
|
||||
return ml->production;
|
||||
}
|
||||
void Parser::SP::MeaningLists::set_production(meaning_list *ml, unsigned int pr) {
|
||||
ml->production = pr;
|
||||
}
|
||||
|
||||
@ Navigating the tree structure through subclauses:
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::right(meaning_list *ml) {
|
||||
return ml->sibling;
|
||||
}
|
||||
void Parser::SP::MeaningLists::set_right(meaning_list *ml, meaning_list *ml2) {
|
||||
ml->sibling = ml2;
|
||||
}
|
||||
meaning_list *Parser::SP::MeaningLists::down(meaning_list *ml) {
|
||||
return ml->child;
|
||||
}
|
||||
void Parser::SP::MeaningLists::set_down(meaning_list *ml, meaning_list *ml2) {
|
||||
ml->child = ml2;
|
||||
}
|
||||
|
||||
@ Alternatives, where the meaning list forks:
|
||||
|
||||
=
|
||||
meaning_list *Parser::SP::MeaningLists::sideways(meaning_list *ml) {
|
||||
return ml->next_alternative;
|
||||
}
|
||||
int Parser::SP::MeaningLists::match_score(meaning_list *ml) {
|
||||
return ml->score;
|
||||
}
|
||||
void Parser::SP::MeaningLists::set_score(meaning_list *ml, int s) {
|
||||
ml->score = s;
|
||||
}
|
||||
|
||||
@ The attached text. Most Inform structures don't use access routines like this
|
||||
for word ranges, but this one is an exception because at one time it was packed
|
||||
into a single |int| to save memory; that proved impossible given the conflicting
|
||||
needs of very high $w_1$ values on long source texts, and very high $w_2-w_1$
|
||||
differences for extensive constant lists.
|
||||
|
||||
=
|
||||
void Parser::SP::MeaningLists::set_text(meaning_list *ml, int w1, int w2) {
|
||||
if (w1<0) { ml->word_ref1 = -1; ml->word_ref2 = -1; }
|
||||
else { ml->word_ref1 = w1; ml->word_ref2 = w2; }
|
||||
}
|
||||
|
||||
void Parser::SP::MeaningLists::get_text(meaning_list *ml, int *w1, int *w2) {
|
||||
*w1 = ml->word_ref1; *w2 = ml->word_ref2;
|
||||
}
|
||||
|
||||
@ An excerpt meaning:
|
||||
|
||||
=
|
||||
excerpt_meaning *Parser::SP::MeaningLists::meaning(meaning_list *ml) {
|
||||
return ml->em;
|
||||
}
|
||||
void Parser::SP::MeaningLists::set_meaning(meaning_list *ml, excerpt_meaning *em) {
|
||||
ml->em = em;
|
||||
}
|
||||
|
||||
@ Or maybe a specification:
|
||||
|
||||
=
|
||||
specification *Parser::SP::MeaningLists::get_attached_spec(meaning_list *ml) {
|
||||
return ml->type_spec;
|
||||
}
|
||||
void Parser::SP::MeaningLists::attach_spec(meaning_list *ml, specification *spec) {
|
||||
ml->type_spec = spec;
|
||||
}
|
||||
|
||||
@ And perhaps also an attached pointer to some other structure of
|
||||
unspecified type.
|
||||
|
||||
=
|
||||
general_pointer Parser::SP::MeaningLists::get_attached_data(meaning_list *ml) {
|
||||
return ml->data_attached;
|
||||
}
|
||||
void Parser::SP::MeaningLists::attach_data(meaning_list *ml, general_pointer data) {
|
||||
ml->data_attached = data;
|
||||
}
|
|
@ -54,7 +54,7 @@ void PL::Actions::Lists::log(action_name_list *anl) {
|
|||
if (anl->action_listed)
|
||||
LOG("%W", anl->action_listed->present_name);
|
||||
if (anl->nap_listed)
|
||||
LOG("%W", Nouns::nominative(anl->nap_listed->name));
|
||||
LOG("%W", Nouns::nominative_singular(anl->nap_listed->name));
|
||||
else LOG("NULL");
|
||||
for (i=0; i<anl->parc; i++)
|
||||
LOG(" [%d: %W]", i, anl->parameter[i]);
|
||||
|
@ -70,7 +70,7 @@ void PL::Actions::Lists::log_briefly(action_name_list *anl) {
|
|||
for (a = anl; a; a = a->next) {
|
||||
if (a->nap_listed) {
|
||||
if (a->parity == -1) LOG("not-");
|
||||
LOG("%W / ", Nouns::nominative(a->nap_listed->name));
|
||||
LOG("%W / ", Nouns::nominative_singular(a->nap_listed->name));
|
||||
} else if (a->action_listed == NULL)
|
||||
LOG("ANY / ");
|
||||
else {
|
||||
|
|
|
@ -256,8 +256,7 @@ action_name *PL::Actions::act_new(wording W, int implemented_by_I7) {
|
|||
word_assemblage wa = PreformUtilities::merge(<action-name-construction>, 0,
|
||||
WordAssemblages::from_wording(W));
|
||||
wording AW = WordAssemblages::to_wording(&wa);
|
||||
an->name = Nouns::new_proper_noun(AW, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
an->name = Nouns::new_proper_noun(AW, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
MISCELLANEOUS_MC, Rvalues::from_action_name(an));
|
||||
|
||||
Vocabulary::set_flags(Lexer::word(Wordings::first_wn(W)), ACTION_PARTICIPLE_MC);
|
||||
|
|
|
@ -20,8 +20,7 @@ named_action_pattern *PL::Actions::Patterns::Named::nap_new(wording W) {
|
|||
named_action_pattern *nap = CREATE(named_action_pattern);
|
||||
nap->first = NULL;
|
||||
nap->text_of_declaration = W;
|
||||
nap->name = Nouns::new_proper_noun(W, NEUTER_GENDER,
|
||||
REGISTER_SINGULAR_NTOPT + PARSE_EXACTLY_NTOPT,
|
||||
nap->name = Nouns::new_proper_noun(W, NEUTER_GENDER, ADD_TO_LEXICON_NTOPT,
|
||||
NAMED_AP_MC, Rvalues::from_named_action_pattern(nap));
|
||||
|
||||
package_request *PR = Hierarchy::local_package(NAMED_ACTION_PATTERNS_HAP);
|
||||
|
@ -74,7 +73,7 @@ void PL::Actions::Patterns::Named::index(OUTPUT_STREAM) {
|
|||
}
|
||||
|
||||
LOOP_OVER(nap, named_action_pattern) {
|
||||
HTML_OPEN("p"); WRITE("<b>%+W</b>", Nouns::nominative(nap->name));
|
||||
HTML_OPEN("p"); WRITE("<b>%+W</b>", Nouns::nominative_singular(nap->name));
|
||||
Index::link(OUT, Wordings::first_wn(nap->text_of_declaration));
|
||||
HTML_TAG("br");
|
||||
ap = nap->first;
|
||||
|
|
|
@ -124,9 +124,9 @@ make two further checks:
|
|||
} else {
|
||||
p = Lexicon::retrieve(NOUN_MC, W);
|
||||
if (p) {
|
||||
noun *nt = Nouns::disambiguate(p, HIGH_NOUN_PRIORITY);
|
||||
noun *nt = Nouns::disambiguate(p, TRUE);
|
||||
if (nt) K = Kinds::base_construction(
|
||||
RETRIEVE_POINTER_kind_constructor(Nouns::tag_holder(nt)));
|
||||
RETRIEVE_POINTER_kind_constructor(Nouns::meaning(nt)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,6 +73,7 @@ typedef struct kind_constructor {
|
|||
/* H: representing this kind at run-time */
|
||||
int weak_kind_ID; /* as used at run-time by the I6 template */
|
||||
struct text_stream *name_in_template_code; /* an I6 identifier */
|
||||
int class_number; /* for classes of object */
|
||||
#ifdef CORE_MODULE
|
||||
struct inter_name *con_iname;
|
||||
struct package_request *kc_package;
|
||||
|
@ -256,6 +257,7 @@ I6 template files.
|
|||
/* H: representing this kind at run-time */
|
||||
con->weak_kind_ID = next_free_data_type_ID++;
|
||||
con->name_in_template_code = Str::new();
|
||||
con->class_number = 0;
|
||||
|
||||
/* I: storing values at run-time */
|
||||
con->multiple_block = FALSE;
|
||||
|
@ -342,7 +344,7 @@ void Kinds::Constructors::attach_noun(kind_constructor *con, noun *nt) {
|
|||
wording Kinds::Constructors::get_name(kind_constructor *con, int plural_form) {
|
||||
if (con->dt_tag) {
|
||||
noun *nt = con->dt_tag;
|
||||
if (nt) return Nouns::get_name(nt, plural_form);
|
||||
if (nt) return Nouns::nominative(nt, plural_form);
|
||||
}
|
||||
return EMPTY_WORDING;
|
||||
}
|
||||
|
@ -351,7 +353,7 @@ wording Kinds::Constructors::get_name_in_play(kind_constructor *con, int plural_
|
|||
NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
if (con->dt_tag) {
|
||||
noun *nt = con->dt_tag;
|
||||
if (nt) return Nouns::get_name_in_play(nt, plural_form, nl);
|
||||
if (nt) return Nouns::nominative_in_language(nt, plural_form, nl);
|
||||
}
|
||||
return EMPTY_WORDING;
|
||||
}
|
||||
|
|
|
@ -887,13 +887,17 @@ void Kinds::Interpreter::apply_kind_command(parse_node_tree *T, single_kind_comm
|
|||
wording LW = Feeds::end(id);
|
||||
if (tcc == singular_KCC) {
|
||||
int ro = 0;
|
||||
if (con->group != PROPER_CONSTRUCTOR_GRP) ro = REGISTER_SINGULAR_NTOPT + REGISTER_PLURAL_NTOPT;
|
||||
if (con->group != PROPER_CONSTRUCTOR_GRP) ro = ADD_TO_LEXICON_NTOPT + WITH_PLURAL_FORMS_NTOPT;
|
||||
noun *nt =
|
||||
Nouns::new_common_noun(LW, NEUTER_GENDER, PARSE_EXACTLY_NTOPT + ro,
|
||||
Nouns::new_common_noun(LW, NEUTER_GENDER, ro,
|
||||
KIND_SLOW_MC, STORE_POINTER_kind_constructor(con));
|
||||
con->dt_tag = nt;
|
||||
} else {
|
||||
Nouns::set_plural_name(con->dt_tag, LW);
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *L = NULL;
|
||||
#ifdef CORE_MODULE
|
||||
L = Task::language_of_syntax();
|
||||
#endif
|
||||
Nouns::set_nominative_plural_in_language(con->dt_tag, LW, L);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -708,12 +708,12 @@ matched up with the inference subject already existing.
|
|||
unsigned int mc = KIND_SLOW_MC;
|
||||
if (Kinds::Compare::le(super, K_object)) mc = NOUN_MC;
|
||||
noun *nt = Nouns::new_common_noun(W, NEUTER_GENDER,
|
||||
PARSE_EXACTLY_NTOPT + REGISTER_SINGULAR_NTOPT +
|
||||
REGISTER_PLURAL_NTOPT + ATTACH_TO_SEARCH_LIST_NTOPT,
|
||||
ADD_TO_LEXICON_NTOPT + WITH_PLURAL_FORMS_NTOPT,
|
||||
KIND_SLOW_MC, STORE_POINTER_kind_constructor(K->construct));
|
||||
if (Kinds::Compare::le(super, K_object))
|
||||
Nouns::set_range_number(nt, no_kinds_of_object++);
|
||||
Sentences::Headings::initialise_noun_resolution(nt);
|
||||
Kinds::Constructors::attach_noun(K->construct, nt);
|
||||
if (Kinds::Compare::le(super, K_object))
|
||||
Kinds::Behaviour::set_range_number(K, no_kinds_of_object++);
|
||||
|
||||
@h Kind names in the I6 template.
|
||||
We defined some "constant" kinds and constructors above, to provide
|
||||
|
|
|
@ -21,6 +21,16 @@ noun *Kinds::Behaviour::get_noun(kind *K) {
|
|||
return K->construct->dt_tag;
|
||||
}
|
||||
|
||||
int Kinds::Behaviour::get_range_number(kind *K) {
|
||||
if (K == NULL) return 0;
|
||||
return K->construct->class_number;
|
||||
}
|
||||
|
||||
void Kinds::Behaviour::set_range_number(kind *K, int r) {
|
||||
if (K == NULL) return;
|
||||
K->construct->class_number = r;
|
||||
}
|
||||
|
||||
@h Definiteness.
|
||||
A kind like "number" is definite. One way to be indefinite is to be a
|
||||
kind of kind, like "arithmetic value":
|
||||
|
|
|
@ -11,9 +11,9 @@ with lingistic roles. For example, the cluster of names for the common noun
|
|||
>> man (En, singular), men (En, plural), homme (Fr, singular), hommes (Fr, plural)
|
||||
|
||||
While this perhaps looks a little unstructured, that means that it doesn't
|
||||
impose many assumptions about the language. Compare the XML frameworks used
|
||||
in the Lexical Markup Framework standard ISO 24613, which it would be fairly
|
||||
easy to convert our //name_cluster// objects to.
|
||||
impose many assumptions about the language. A similarly pragmatic view is taken
|
||||
by the XML frameworks used in the Lexical Markup Framework standard ISO 24613,
|
||||
which it would be fairly easy to convert our //name_cluster// objects to.
|
||||
|
||||
=
|
||||
typedef struct name_cluster {
|
||||
|
@ -22,7 +22,6 @@ typedef struct name_cluster {
|
|||
} name_cluster;
|
||||
|
||||
typedef struct individual_name {
|
||||
general_pointer principal_meaning; /* for the client to attach some meaning */
|
||||
struct declension name; /* text of name */
|
||||
int name_number; /* 1 for singular, 2 for plural */
|
||||
int name_gender; /* 1 is neuter, 2 is masculine, 3 is feminine */
|
||||
|
@ -46,7 +45,6 @@ individual_name *Clusters::add_one(name_cluster *names, wording W,
|
|||
NATURAL_LANGUAGE_WORDS_TYPE *nl, int gender, int number) {
|
||||
nl = DefaultLanguage::get(nl);
|
||||
individual_name *in = CREATE(individual_name);
|
||||
in->principal_meaning = NULL_GENERAL_POINTER;
|
||||
in->name = Declensions::of_noun(W, nl, gender, number);
|
||||
in->name_language = nl;
|
||||
in->name_number = number;
|
||||
|
@ -153,7 +151,7 @@ only when the built-in kinds are being given plural names; some of these
|
|||
and wouldn't pass through the pluralising tries intact.
|
||||
|
||||
=
|
||||
void Clusters::set_plural_name(name_cluster *cl, wording W,
|
||||
void Clusters::set_plural_in_language(name_cluster *cl, wording W,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
individual_name *in;
|
||||
LOOP_OVER_LINKED_LIST(in, individual_name, cl->listed)
|
||||
|
@ -186,7 +184,7 @@ wording Clusters::get_name(name_cluster *cl, int plural_flag) {
|
|||
falling back on English if there's none registered:
|
||||
|
||||
=
|
||||
wording Clusters::get_name_in_play(name_cluster *cl, int plural_flag,
|
||||
wording Clusters::get_name_in_language(name_cluster *cl, int plural_flag,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
int number_sought = 1;
|
||||
if (plural_flag) number_sought = 2;
|
||||
|
@ -211,21 +209,3 @@ wording Clusters::get_name_general(name_cluster *cl,
|
|||
return Declensions::in_case(&(in->name), NOMINATIVE_CASE);
|
||||
return EMPTY_WORDING;
|
||||
}
|
||||
|
||||
@h Meanings.
|
||||
We will come to how excerpts of text are given meanings later on. For now, it's
|
||||
enough to say that each individual name can have one, and that the pointer
|
||||
to an |excerpt_meaning| records it.
|
||||
|
||||
=
|
||||
void Clusters::set_principal_meaning(individual_name *in, general_pointer meaning) {
|
||||
if (in == NULL) internal_error("no individual name");
|
||||
in->principal_meaning = meaning;
|
||||
}
|
||||
|
||||
general_pointer Clusters::get_principal_meaning(name_cluster *cl) {
|
||||
individual_name *in;
|
||||
LOOP_OVER_LINKED_LIST(in, individual_name, cl->listed)
|
||||
return in->principal_meaning;
|
||||
return NULL_GENERAL_POINTER;
|
||||
}
|
||||
|
|
|
@ -24,9 +24,9 @@ DECLARE_CLASS(excerpt_meaning)
|
|||
void LexiconModule::start(void) {
|
||||
@<Register this module's debugging log aspects@>;
|
||||
@<Register this module's debugging log writers@>;
|
||||
Cardinals::enable_in_word_form();
|
||||
Articles::mark_for_preform();
|
||||
Prepositions::mark_for_preform();
|
||||
// Cardinals::enable_in_word_form();
|
||||
// Articles::mark_for_preform();
|
||||
// Prepositions::mark_for_preform();
|
||||
}
|
||||
void LexiconModule::end(void) {
|
||||
}
|
||||
|
|
|
@ -72,21 +72,21 @@ void LinguisticsModule::end(void) {
|
|||
@ This module uses //syntax//, and adds the following annotations to the
|
||||
syntax tree.
|
||||
|
||||
@e verbal_certainty_ANNOT /* |int|: certainty level if known */
|
||||
@e verbal_certainty_ANNOT /* |int|: certainty level if known */
|
||||
@e sentence_is_existential_ANNOT /* |int|: such as "there is a man" */
|
||||
@e linguistic_error_here_ANNOT /* |int|: one of the errors occurred here */
|
||||
@e inverted_verb_ANNOT /* |int|: an inversion of subject and object has occurred */
|
||||
@e possessive_verb_ANNOT /* |int|: this is a non-relative use of "to have" */
|
||||
@e verb_ANNOT /* |verb_usage|: what's being done here */
|
||||
@e preposition_ANNOT /* |preposition_identity|: which preposition, if any, qualifies it */
|
||||
@e second_preposition_ANNOT /* |preposition_identity|: which further preposition, if any, qualifies it */
|
||||
@e verb_meaning_ANNOT /* |verb_meaning|: what it means */
|
||||
@e inverted_verb_ANNOT /* |int|: an inversion of subject and object has occurred */
|
||||
@e possessive_verb_ANNOT /* |int|: this is a non-relative use of "to have" */
|
||||
@e verb_ANNOT /* |verb_usage|: what's being done here */
|
||||
@e preposition_ANNOT /* |preposition_identity|: which preposition, if any, qualifies it */
|
||||
@e second_preposition_ANNOT /* |preposition_identity|: which further preposition, if any, qualifies it */
|
||||
@e verb_meaning_ANNOT /* |verb_meaning|: what it means */
|
||||
|
||||
@e nounphrase_article_ANNOT /* |int|: definite or indefinite article: see below */
|
||||
@e plural_reference_ANNOT /* |int|: used by PROPER NOUN nodes for evident plurals */
|
||||
@e gender_reference_ANNOT /* |int|: used by PROPER NOUN nodes for evident genders */
|
||||
@e nounphrase_article_ANNOT /* |int|: definite or indefinite article: see below */
|
||||
@e plural_reference_ANNOT /* |int|: used by PROPER NOUN nodes for evident plurals */
|
||||
@e gender_reference_ANNOT /* |int|: used by PROPER NOUN nodes for evident genders */
|
||||
@e relationship_node_type_ANNOT /* |int|: what kind of inference this assertion makes */
|
||||
@e implicitly_refers_to_ANNOT /* |int|: this will implicitly refer to something */
|
||||
@e implicitly_refers_to_ANNOT /* |int|: this will implicitly refer to something */
|
||||
|
||||
=
|
||||
DECLARE_ANNOTATION_FUNCTIONS(verb, verb_usage)
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
A lightweight structure to record uses of an adjective, either
|
||||
positively or negatively.
|
||||
|
||||
@h Adjective usages.
|
||||
This really is just an ordered pair of an adjective and a boolean:
|
||||
@ This really is just an ordered pair of an adjective and a boolean:
|
||||
|
||||
=
|
||||
typedef struct adjective_usage {
|
||||
|
@ -20,6 +19,13 @@ adjective_usage *AdjectiveUsages::new(adjectival_phrase *aph, int pos) {
|
|||
return au;
|
||||
}
|
||||
|
||||
adjective_usage *AdjectiveUsages::copy(adjective_usage *au_from) {
|
||||
return AdjectiveUsages::new(au_from->ref_to, au_from->ref_positive);
|
||||
}
|
||||
|
||||
@ Logging:
|
||||
|
||||
=
|
||||
void AdjectiveUsages::log(adjective_usage *au) {
|
||||
adjectival_phrase *aph = AdjectiveUsages::get_aph(au);
|
||||
if (au->ref_positive == FALSE) LOG("~");
|
||||
|
@ -27,10 +33,9 @@ void AdjectiveUsages::log(adjective_usage *au) {
|
|||
LOG("<adj:%W>", W);
|
||||
}
|
||||
|
||||
adjective_usage *AdjectiveUsages::copy(adjective_usage *au_from) {
|
||||
return AdjectiveUsages::new(au_from->ref_to, au_from->ref_positive);
|
||||
}
|
||||
@ Access:
|
||||
|
||||
=
|
||||
adjectival_phrase *AdjectiveUsages::get_aph(adjective_usage *au) {
|
||||
if (au == NULL) return NULL;
|
||||
return au->ref_to;
|
||||
|
@ -41,6 +46,10 @@ int AdjectiveUsages::get_parity(adjective_usage *au) {
|
|||
return au->ref_positive;
|
||||
}
|
||||
|
||||
@ And this is the only non-trivial thing one can do with an adjective usage:
|
||||
reverse its sense.
|
||||
|
||||
=
|
||||
void AdjectiveUsages::flip_parity(adjective_usage *au) {
|
||||
if (au == NULL) internal_error("null adjective flipped");
|
||||
au->ref_positive = (au->ref_positive)?FALSE:TRUE;
|
||||
|
|
|
@ -47,7 +47,7 @@ typedef struct adjectival_phrase {
|
|||
adjectival_phrase *Adjectives::declare(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
adjectival_phrase *aph;
|
||||
LOOP_OVER(aph, adjectival_phrase) {
|
||||
wording C = Clusters::get_name_in_play(aph->adjective_names, FALSE, nl);
|
||||
wording C = Clusters::get_name_in_language(aph->adjective_names, FALSE, nl);
|
||||
if (Wordings::match(C, W)) return aph;
|
||||
}
|
||||
return Adjectives::from_word_range(W, nl);
|
||||
|
@ -118,6 +118,7 @@ adjectival_phrase *Adjectives::parse(wording W) {
|
|||
}
|
||||
|
||||
@h Testing agreement.
|
||||
This is used in unit testing.
|
||||
|
||||
=
|
||||
void Adjectives::test_adjective(OUTPUT_STREAM, wording W) {
|
||||
|
|
|
@ -9,16 +9,16 @@ adjectives, verbs and nouns, it can't make new pronouns.
|
|||
|
||||
=
|
||||
<pronoun> ::=
|
||||
<nominative-pronoun> | ==> R[1]
|
||||
<accusative-pronoun> ==> R[1]
|
||||
<nominative-pronoun> | ==> R[1]
|
||||
<accusative-pronoun> ==> R[1]
|
||||
|
||||
<nominative-pronoun> ::=
|
||||
it/he/she | ==> 1 /* singular */
|
||||
they ==> 2 /* plural */
|
||||
it/he/she | ==> 1 /* singular */
|
||||
they ==> 2 /* plural */
|
||||
|
||||
<accusative-pronoun> ::=
|
||||
it/him/her | ==> 1 /* singular */
|
||||
them ==> 2 /* plural */
|
||||
it/him/her | ==> 1 /* singular */
|
||||
them ==> 2 /* plural */
|
||||
|
||||
@h Possessives.
|
||||
Inform uses these not only for parsing but also to inflect text. For example,
|
||||
|
@ -29,16 +29,16 @@ person to second person).
|
|||
|
||||
=
|
||||
<possessive-first-person> ::=
|
||||
my | ==> 1 /* singular */
|
||||
our ==> 2 /* plural */
|
||||
my | ==> 1 /* singular */
|
||||
our ==> 2 /* plural */
|
||||
|
||||
<possessive-second-person> ::=
|
||||
your | ==> 1 /* singular */
|
||||
your ==> 2 /* plural */
|
||||
your | ==> 1 /* singular */
|
||||
your ==> 2 /* plural */
|
||||
|
||||
<possessive-third-person> ::=
|
||||
its/his/her | ==> 1 /* singular */
|
||||
their ==> 2 /* plural */
|
||||
its/his/her | ==> 1 /* singular */
|
||||
their ==> 2 /* plural */
|
||||
|
||||
@h Articles.
|
||||
|
||||
|
@ -49,18 +49,19 @@ person to second person).
|
|||
|
||||
=
|
||||
<article> ::=
|
||||
<indefinite-article> | ==> R[1]
|
||||
<definite-article> ==> R[1]
|
||||
<indefinite-article> | ==> R[1]
|
||||
<definite-article> ==> R[1]
|
||||
|
||||
@ The articles need to be single words, and the following two productions
|
||||
have an unusual convention: they are required to have production numbers
|
||||
which encode both the implied grammatical number and gender.
|
||||
which encode both the implied grammatical number and gender. These numbers
|
||||
mean:
|
||||
|
||||
(a) singular, neuter; (b) masculine; (c) feminine
|
||||
(d) plural, neuter; (e) masculine; (f) feminine
|
||||
|/a/| singular, neuter; |/b/| singular, masculine; |/c/| singular, feminine;
|
||||
|/d/| plural, neuter; |/e/| plural, masculine; |/f/| plural, feminine.
|
||||
|
||||
In English gender doesn't appear in articles, and "the" is ambiguous as to
|
||||
number in any case, so we end up with something quite dull:
|
||||
But since in English gender doesn't appear in articles, and "the" is ambiguous
|
||||
as to number in any case, we end up with something quite dull as the default:
|
||||
|
||||
=
|
||||
<definite-article> ::=
|
||||
|
@ -86,8 +87,8 @@ number in any case, so we end up with something quite dull:
|
|||
|
||||
@ =
|
||||
wording Articles::remove_the(wording W) {
|
||||
if ((Wordings::length(W) > 1) &&
|
||||
(<optional-definite-article>(W))) return GET_RW(<optional-definite-article>, 1);
|
||||
if ((Wordings::length(W) > 1) && (<optional-definite-article>(W)))
|
||||
return GET_RW(<optional-definite-article>, 1);
|
||||
return W;
|
||||
}
|
||||
|
||||
|
@ -125,7 +126,6 @@ is never treated as a participle.
|
|||
|
||||
@h Marking for Preform efficiency.
|
||||
|
||||
|
||||
=
|
||||
void Articles::mark_for_preform(void) {
|
||||
NTI::give_nt_reserved_incidence_bit(<article>, ARTICLE_RES_NT_BIT);
|
||||
|
|
|
@ -44,8 +44,8 @@ this is not a noun, and isn't allowed as a constant value in Inform.
|
|||
twelfth
|
||||
|
||||
@ Those two nonterminals here simply supply text: for efficiency reasons we
|
||||
don't actually parse them, although they would give the correct response if
|
||||
we did. Instead they're scanned for words which are marked with the appropriate
|
||||
don't actually parse against them, although they would give the correct response
|
||||
if we did. Instead they're scanned for words which are marked with the appropriate
|
||||
numbers.
|
||||
|
||||
=
|
||||
|
@ -104,7 +104,7 @@ in decimal digits, perhaps with a minus sign.
|
|||
|
||||
@ These mustn't match any number too large to fit into the virtual machine
|
||||
being compiled to, so "42000", for instance, is not a valid literal if Inform
|
||||
is parsing text in a work intended for the 16-bit Z-machine.
|
||||
is parsing text in a work intended for a 16-bit VM.
|
||||
|
||||
Why do we catch this here? The answer is probably that it's an excess of
|
||||
caution, but this is a rare case where the choice of virtual machine affects
|
||||
|
|
|
@ -3,9 +3,8 @@
|
|||
To create the determiners found in standard English which refer
|
||||
to collections of things, and to create their meanings as logical quantifiers.
|
||||
|
||||
@h Definitions.
|
||||
|
||||
@ In logic, a "quantifier" appears at the front of a statement which can
|
||||
@h How these relate.
|
||||
In logic, a "quantifier" appears at the front of a statement which can
|
||||
apply to many cases, and describes the quantity of cases for which the
|
||||
statement is true: all of them, some of them, exactly six, and so on.
|
||||
|
||||
|
@ -33,9 +32,9 @@ passed, but to those which didn't, and those are called "complementary"
|
|||
of closed doors and not the number of open ones.
|
||||
|
||||
@ These different ways to describe multiple outcomes are represented in Inform by
|
||||
|quantifier| structures. One exists for each different meaning supported
|
||||
//quantifier// structures. One exists for each different meaning supported
|
||||
by Inform -- |ForAll|, |Exists| and so forth -- except that some quantifiers
|
||||
take a numerical parameter, and a single |quantifier| structure represents
|
||||
take a numerical parameter, and a single //quantifier// structure represents
|
||||
the meaning for any value of this parameter. For instance, the cardinality
|
||||
quantifiers |Card=3| and |Card=17| are both represented by the same
|
||||
quantifier structure, whose pointer is called |exactly_quantifier| below.
|
||||
|
@ -44,7 +43,6 @@ containers, for instance, where the parameter is 3 or 17 respectively.
|
|||
|
||||
=
|
||||
typedef struct quantifier {
|
||||
char *operator;
|
||||
#ifdef CORE_MODULE
|
||||
inter_t operator_prim; /* inter opcode to compare successes against the threshold */
|
||||
#endif
|
||||
|
@ -103,18 +101,16 @@ new quantifiers from the source text or the template files, but what follows
|
|||
is written so that it would be fairly easy to add this ability.
|
||||
|
||||
=
|
||||
quantifier *Quantifiers::quant_new(char *op, int T, int is_comp, char *text) {
|
||||
quantifier *Quantifiers::quant_new(text_stream *op, int T, int is_comp, char *text) {
|
||||
quantifier *quant = CREATE(quantifier);
|
||||
quant->operator = op;
|
||||
#ifdef CORE_MODULE
|
||||
quant->operator_prim = 0;
|
||||
if (strcmp(op, "==") == 0) quant->operator_prim = EQ_BIP;
|
||||
if (strcmp(op, "~=") == 0) quant->operator_prim = NE_BIP;
|
||||
if (strcmp(op, ">=") == 0) quant->operator_prim = GE_BIP;
|
||||
if (strcmp(op, ">") == 0) quant->operator_prim = GT_BIP;
|
||||
if (strcmp(op, "<=") == 0) quant->operator_prim = LE_BIP;
|
||||
if (strcmp(op, "<") == 0) quant->operator_prim = LT_BIP;
|
||||
if (quant->operator_prim == 0) internal_error("unfamiliar operator");
|
||||
if (Str::eq(op, I"==")) quant->operator_prim = EQ_BIP;
|
||||
else if (Str::eq(op, I"~=")) quant->operator_prim = NE_BIP;
|
||||
else if (Str::eq(op, I">=")) quant->operator_prim = GE_BIP;
|
||||
else if (Str::eq(op, I">")) quant->operator_prim = GT_BIP;
|
||||
else if (Str::eq(op, I"<=")) quant->operator_prim = LE_BIP;
|
||||
else if (Str::eq(op, I"<")) quant->operator_prim = LT_BIP;
|
||||
else internal_error("unfamiliar operator");
|
||||
#endif
|
||||
|
||||
quant->T_coefficient = T; quant->is_complementary = is_comp;
|
||||
|
@ -207,33 +203,6 @@ I6 will fold that out in eventual code generation. When the proportion is
|
|||
the resulting I6 is more legible.)
|
||||
|
||||
=
|
||||
void Quantifiers::compile_test(OUTPUT_STREAM, quantifier *quant, int index,
|
||||
int quantification_parameter) {
|
||||
int TC = quant->T_coefficient;
|
||||
switch (TC) {
|
||||
case -1:
|
||||
if (quant->is_complementary)
|
||||
WRITE("qcy_%d %s qcn_%d-%d",
|
||||
index, quant->operator, index, quantification_parameter);
|
||||
else
|
||||
WRITE("qcy_%d %s %d",
|
||||
index, quant->operator, quantification_parameter);
|
||||
break;
|
||||
case 10:
|
||||
WRITE("qcy_%d %s qcn_%d", index, quant->operator, index);
|
||||
break;
|
||||
case 0:
|
||||
WRITE("qcy_%d %s 0", index, quant->operator);
|
||||
break;
|
||||
default:
|
||||
if (strcmp(quant->operator, "==") != 0)
|
||||
WRITE("qcy_%d*10 %s %d*qcn_%d", index, quant->operator, TC, index);
|
||||
else
|
||||
WRITE("qcy_%d %s %d*qcn_%d/10", index, quant->operator, TC, index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CORE_MODULE
|
||||
void Quantifiers::emit_test(quantifier *quant,
|
||||
int quantification_parameter, inter_symbol *qcy, inter_symbol *qcn) {
|
||||
|
@ -249,11 +218,13 @@ void Quantifiers::emit_test(quantifier *quant,
|
|||
Produce::inv_primitive(Emit::tree(), MINUS_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
Produce::val_symbol(Emit::tree(), K_value, qcn);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_t) quantification_parameter);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL,
|
||||
(inter_t) quantification_parameter);
|
||||
Produce::up(Emit::tree());
|
||||
} else {
|
||||
Produce::val_symbol(Emit::tree(), K_value, qcy);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL, (inter_t) quantification_parameter);
|
||||
Produce::val(Emit::tree(), K_number, LITERAL_IVAL,
|
||||
(inter_t) quantification_parameter);
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
|
@ -535,10 +506,10 @@ door is open" but would never say "not each door is open". In all other
|
|||
respects "each" and "every" are synonymous in the S-parser.
|
||||
|
||||
@<Make traditional quantification determiners@> =
|
||||
for_all_quantifier = Quantifiers::quant_new("==", 10, FALSE, "ForAll");
|
||||
not_for_all_quantifier = Quantifiers::quant_new("<", 10, FALSE, "NotAll");
|
||||
exists_quantifier = Quantifiers::quant_new(">", 0, FALSE, "Exists");
|
||||
not_exists_quantifier = Quantifiers::quant_new("==", 0, FALSE, "DoesNotExist");
|
||||
for_all_quantifier = Quantifiers::quant_new(I"==", 10, FALSE, "ForAll");
|
||||
not_for_all_quantifier = Quantifiers::quant_new(I"<", 10, FALSE, "NotAll");
|
||||
exists_quantifier = Quantifiers::quant_new(I">", 0, FALSE, "Exists");
|
||||
not_exists_quantifier = Quantifiers::quant_new(I"==", 0, FALSE, "DoesNotExist");
|
||||
|
||||
for_all_quantifier->can_be_used_in_now = TRUE;
|
||||
for_all_quantifier->can_be_used_in_assertions = TRUE;
|
||||
|
@ -571,8 +542,8 @@ construction to have any natural English paraphrase, so we do not make a
|
|||
built-in quantifiers all occur in negation pairs.
|
||||
|
||||
@<Make complement comparison determiners@> =
|
||||
all_but_quantifier = Quantifiers::quant_new("==", -1, TRUE, "AllBut%d");
|
||||
not_all_but_quantifier = Quantifiers::quant_new("~=", -1, TRUE, "NotAllBut%d");
|
||||
all_but_quantifier = Quantifiers::quant_new(I"==", -1, TRUE, "AllBut%d");
|
||||
not_all_but_quantifier = Quantifiers::quant_new(I"~=", -1, TRUE, "NotAllBut%d");
|
||||
|
||||
Quantifiers::quants_negate_each_other(all_but_quantifier, not_all_but_quantifier);
|
||||
|
||||
|
@ -587,10 +558,10 @@ We don't support the determiner "half", as in, "if half the doors are open",
|
|||
because it's ambiguous as to whether it means exactly half or half-or-more.
|
||||
|
||||
@<Make proportion determiners@> =
|
||||
almost_all_quantifier = Quantifiers::quant_new(">=", 8, FALSE, "Proportion>=80%%");
|
||||
almost_no_quantifier = Quantifiers::quant_new("<", 2, FALSE, "Proportion<20%%");
|
||||
most_quantifier = Quantifiers::quant_new(">", 5, FALSE, "Proportion>50%%");
|
||||
under_half_quantifier = Quantifiers::quant_new("<=", 5, FALSE, "Proportion<=50%%");
|
||||
almost_all_quantifier = Quantifiers::quant_new(I">=", 8, FALSE, "Proportion>=80%%");
|
||||
almost_no_quantifier = Quantifiers::quant_new(I"<", 2, FALSE, "Proportion<20%%");
|
||||
most_quantifier = Quantifiers::quant_new(I">", 5, FALSE, "Proportion>50%%");
|
||||
under_half_quantifier = Quantifiers::quant_new(I"<=", 5, FALSE, "Proportion<=50%%");
|
||||
|
||||
Quantifiers::quants_negate_each_other(almost_all_quantifier, almost_no_quantifier);
|
||||
Quantifiers::quants_negate_each_other(most_quantifier, under_half_quantifier);
|
||||
|
@ -625,12 +596,12 @@ write that, but of course the two assertions need not be adjacent in
|
|||
the source text. One might be in an extension, for instance.)
|
||||
|
||||
@<Make cardinality quantification determiners@> =
|
||||
at_least_quantifier = Quantifiers::quant_new(">=", -1, FALSE, "Card>=%d");
|
||||
at_most_quantifier = Quantifiers::quant_new("<=", -1, FALSE, "Card<=%d");
|
||||
exactly_quantifier = Quantifiers::quant_new("==", -1, FALSE, "Card=%d");
|
||||
less_than_quantifier = Quantifiers::quant_new("<", -1, FALSE, "Card<%d");
|
||||
more_than_quantifier = Quantifiers::quant_new(">", -1, FALSE, "Card>%d");
|
||||
other_than_quantifier = Quantifiers::quant_new("~=", -1, FALSE, "Card~=%d");
|
||||
at_least_quantifier = Quantifiers::quant_new(I">=", -1, FALSE, "Card>=%d");
|
||||
at_most_quantifier = Quantifiers::quant_new(I"<=", -1, FALSE, "Card<=%d");
|
||||
exactly_quantifier = Quantifiers::quant_new(I"==", -1, FALSE, "Card=%d");
|
||||
less_than_quantifier = Quantifiers::quant_new(I"<", -1, FALSE, "Card<%d");
|
||||
more_than_quantifier = Quantifiers::quant_new(I">", -1, FALSE, "Card>%d");
|
||||
other_than_quantifier = Quantifiers::quant_new(I"~=", -1, FALSE, "Card~=%d");
|
||||
|
||||
at_least_quantifier->can_be_used_in_assertions = TRUE;
|
||||
|
||||
|
|
|
@ -1,137 +1,137 @@
|
|||
[Nouns::] Nouns.
|
||||
|
||||
Nouns are an abstraction for meanings registered with the excerpt
|
||||
parser which serve as names for individual things or kinds of things.
|
||||
Noun objects are an abstraction for the names given to concepts created
|
||||
in the source text.
|
||||
|
||||
@h Why we abstract nouns.
|
||||
In the previous chapter, we laid out a general-purpose way to register
|
||||
"excerpt meanings": to say that a given excerpt of text, such as "air
|
||||
pressure", might have a particular meaning. However, we don't want to
|
||||
use that system directly to represent a noun, because this would assume
|
||||
that nouns come in just one wording. In reality, they are inflected to
|
||||
indicate number (singular vs plural) and, in many languages, case, and
|
||||
they can therefore have many wordings; they can also be translated into
|
||||
other languages.
|
||||
@h A noun is more than a name cluster.
|
||||
Consider the line:
|
||||
|
||||
>> A mammal is a kind of animal.
|
||||
|
||||
Inform generates a new noun from this line: "mammal". This may well occur
|
||||
in a variety of inflected forms (though in English, there will be just two:
|
||||
"mammal" and "mammals"). That set of forms is gathered into a |name_cluster|
|
||||
object: see //inflections: Name Clusters//. Name clusters are not necessarily
|
||||
of nouns -- they are also used for adjectives, for example. So it would be
|
||||
wrong to represent a noun by a name cluster alone.
|
||||
|
||||
Inform instead attaches a //noun// object to the new "mammal" kind. This object
|
||||
contains the name cluster to define its syntax, but it also has semantics attached.
|
||||
|
||||
@ From a linguistic point of view, the class of nouns can be divided into two
|
||||
subclasses: common nouns and proper nouns. "Mammal" is a common noun, whereas
|
||||
a sentence such as:
|
||||
|
||||
>> A carved oak table is here.
|
||||
|
||||
...creates a proper noun, "carved oak table". Nouns are not used only to
|
||||
refer to the model world of some interactive fiction, though: Inform uses
|
||||
common nouns for kinds of value, such as "number", and proper nouns for
|
||||
all sorts of specific but abstract things created in a program: activities,
|
||||
rulebooks and tables, for example.
|
||||
|
||||
What we will call the "subclass" of the noun is always one of these values:
|
||||
|
||||
@d COMMON_NOUN 1
|
||||
@d PROPER_NOUN 2
|
||||
|
||||
@ The other semantic ingredient in a //noun// object is a pointer to some
|
||||
object which gives it a meaning. For example, for the "carved oak table" in
|
||||
the Inform example above that would be an |instance| object representing this
|
||||
piece of furniture in the model world.
|
||||
|
||||
It might seem the wrong way around for the //noun// object to contain its
|
||||
meaning -- like saying that a luggage tag has a suitcase hanging from it,
|
||||
rather than vice versa. But this arrangement makes it convenient to add
|
||||
translations into non-English languages later on (i.e., at a time after the
|
||||
initial creation of the //noun// object).
|
||||
|
||||
@h Structure.
|
||||
We will give each noun a "priority", used when resolving ambiguities, but
|
||||
this will be a very simple system: common nouns (i.e., names of kinds) will
|
||||
be high priority, and proper names (i.e., names of instances) will be low.
|
||||
|
||||
@d HIGH_NOUN_PRIORITY 1
|
||||
@d LOW_NOUN_PRIORITY 2
|
||||
|
||||
@d MAX_NOUN_PRIORITY 2
|
||||
|
||||
=
|
||||
typedef struct noun {
|
||||
struct name_cluster *names;
|
||||
struct general_pointer tagged_to;
|
||||
int search_priority; /* in the range 1 up to |MAX_NOUN_PRIORITY| */
|
||||
int match_exactly; /* do not allow subset parsing matches, e.g., "bottle" for "glass bottle" */
|
||||
int range_number; /* used to enumerate */
|
||||
int noun_subclass; /* either |COMMON_NOUN| or |PROPER_NOUN| */
|
||||
|
||||
struct general_pointer meaning;
|
||||
unsigned int registration_category;
|
||||
struct general_pointer registration_to;
|
||||
#ifdef CORE_MODULE
|
||||
struct text_stream *nt_I6_identifier; /* Name to be used in Inform 6 output */
|
||||
struct inter_name *nt_iname;
|
||||
struct name_resolution_data name_resolution; /* see the Headings section on this */
|
||||
|
||||
#ifdef NOUN_COMPILATION_LINGUISTICS_CALLBACK
|
||||
struct name_compilation_data name_compilation; /* see //core: Using Nametags// on this */
|
||||
#endif
|
||||
#ifdef NOUN_DISAMBIGUATION_LINGUISTICS_CALLBACK
|
||||
struct name_resolution_data name_resolution; /* see //core: Headings// on this */
|
||||
#endif
|
||||
|
||||
CLASS_DEFINITION
|
||||
} noun;
|
||||
|
||||
@h Creation.
|
||||
Note that it's legal for the supplied text to be empty, and this does happen
|
||||
The following functions are called to create new proper or common nouns, and
|
||||
note that:
|
||||
(i) It is legal for the supplied text to be empty, and this does happen
|
||||
for example when Inform creates the nouns of anonymous objects, as in a
|
||||
sentence such as "Four people are in the Dining Room."
|
||||
sentence such as "Four people are in the Dining Room." Empty text in |W| means
|
||||
that no forms are added to the name cluster and nothing is registered with
|
||||
the lexicon.
|
||||
(ii) If a noun is added to the lexicon with the special meaning code |NOUN_MC|,
|
||||
passed to these functions in |mc|, then the meaning given to the lexicon is
|
||||
the |noun| object itself, from which the ultimate |meaning| can then be
|
||||
derived. The reason for such an indirection is that it makes it possible to
|
||||
see whether the noun used was common or proper. Inform uses this when sorting
|
||||
out ambiguous names of instances or kinds.
|
||||
(iii) The |options| are a bitmap which used to be larger, and is now reduced
|
||||
to a combination of just two possibilities:
|
||||
|
||||
It may seem odd that noun structures store a pointer back to their owners;
|
||||
as if the luggage tag has a suitcase hanging from it, rather than vice versa.
|
||||
But this is needed because nouns can themselves be registered as excerpt
|
||||
meanings. Thus, "silver medallion" might be an EM pointing to a noun,
|
||||
and if it comes up in parsing then we need a way to get from the noun to
|
||||
the actual medallion object.
|
||||
|
||||
When a noun is created, we supply a bitmap of options:
|
||||
|
||||
@d PARSE_EXACTLY_NTOPT 1
|
||||
@d REGISTER_SINGULAR_NTOPT 2
|
||||
@d REGISTER_PLURAL_NTOPT 4
|
||||
@d ATTACH_TO_SEARCH_LIST_NTOPT 8
|
||||
@d ADD_TO_LEXICON_NTOPT 1 /* register these forms with the lexicon */
|
||||
@d WITH_PLURAL_FORMS_NTOPT 2 /* add plurals to the forms known */
|
||||
|
||||
=
|
||||
noun *Nouns::new_proper_noun(wording W, int gender, int options,
|
||||
unsigned int mc, parse_node *val) {
|
||||
general_pointer owner = NULL_GENERAL_POINTER;
|
||||
if (val) owner = STORE_POINTER_parse_node(val);
|
||||
return Nouns::new_inner(W, owner, LOW_NOUN_PRIORITY, options, mc, NULL, gender);
|
||||
return Nouns::new_inner(W, owner, PROPER_NOUN, options, mc, NULL, gender);
|
||||
}
|
||||
|
||||
noun *Nouns::new_common_noun(wording W, int gender, int options,
|
||||
unsigned int mc, general_pointer owner) {
|
||||
return Nouns::new_inner(W, owner, HIGH_NOUN_PRIORITY, options, mc, NULL, gender);
|
||||
return Nouns::new_inner(W, owner, COMMON_NOUN, options, mc, NULL, gender);
|
||||
}
|
||||
|
||||
@ Note that
|
||||
|
||||
=
|
||||
noun *Nouns::new_inner(wording W, general_pointer owner, int p, int options,
|
||||
unsigned int mc, NATURAL_LANGUAGE_WORDS_TYPE *foreign_language, int gender) {
|
||||
unsigned int mc, NATURAL_LANGUAGE_WORDS_TYPE *lang, int gender) {
|
||||
noun *t = CREATE(noun);
|
||||
t->tagged_to = owner;
|
||||
t->registration_to = owner;
|
||||
if (mc == NOUN_MC) t->registration_to = STORE_POINTER_noun(t);
|
||||
t->meaning = owner;
|
||||
t->registration_category = mc;
|
||||
t->range_number = t->allocation_id + 1;
|
||||
t->search_priority = p;
|
||||
t->match_exactly = FALSE;
|
||||
t->noun_subclass = p;
|
||||
t->names = Clusters::new();
|
||||
if (options & PARSE_EXACTLY_NTOPT) t->match_exactly = TRUE;
|
||||
if (Wordings::nonempty(W))
|
||||
Nouns::add_to_noun_and_reg(t, W, foreign_language, gender, 1, options);
|
||||
#ifdef CORE_MODULE
|
||||
t->nt_I6_identifier = Str::new();
|
||||
t->nt_iname = NULL;
|
||||
if (options & ATTACH_TO_SEARCH_LIST_NTOPT)
|
||||
@<Insert this noun into the relevant heading search list@>;
|
||||
if (Wordings::nonempty(W)) Nouns::supply_text(t, W, lang, gender, 1, options);
|
||||
#ifdef NOUN_COMPILATION_LINGUISTICS_CALLBACK
|
||||
NOUN_COMPILATION_LINGUISTICS_CALLBACK(t);
|
||||
#endif
|
||||
return t;
|
||||
}
|
||||
|
||||
@ Every heading in the source text has a search list of nouns created
|
||||
under it, and this is used for disambiguation: see below.
|
||||
|
||||
@<Insert this noun into the relevant heading search list@> =
|
||||
Sentences::Headings::disturb();
|
||||
Sentences::Headings::attach_noun(t);
|
||||
Sentences::Headings::verify_divisions();
|
||||
|
||||
@h Attaching some wording to a noun.
|
||||
As noted above, each noun comes with a cluster of names, and here's where
|
||||
we add a new one.
|
||||
|
||||
@d NOUN_HAS_NO_MC 0xffffffff
|
||||
@h Subclass.
|
||||
|
||||
=
|
||||
individual_name *Nouns::add_to_noun_and_reg(noun *t,
|
||||
wording W, NATURAL_LANGUAGE_WORDS_TYPE *foreign_language, int gender, int number, int options) {
|
||||
linked_list *L = Clusters::add(t->names, W, foreign_language, gender, number,
|
||||
(options & REGISTER_PLURAL_NTOPT)?TRUE:FALSE);
|
||||
individual_name *in;
|
||||
LOOP_OVER_LINKED_LIST(in, individual_name, L)
|
||||
if ((options & REGISTER_SINGULAR_NTOPT) && (t->registration_category != NOUN_HAS_NO_MC)) {
|
||||
excerpt_meaning *em = Lexicon::register(
|
||||
t->registration_category,
|
||||
Declensions::in_case(&(in->name), NOMINATIVE_CASE),
|
||||
t->registration_to);
|
||||
Clusters::set_principal_meaning(in, STORE_POINTER_excerpt_meaning(em));
|
||||
}
|
||||
return in;
|
||||
int Nouns::subclass(noun *t) {
|
||||
if (t == NULL) return 0;
|
||||
return t->noun_subclass;
|
||||
}
|
||||
|
||||
@ The English singular nominative form:
|
||||
int Nouns::is_proper(noun *t) {
|
||||
if ((t) && (t->noun_subclass == PROPER_NOUN)) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
=
|
||||
wording Nouns::nominative(noun *t) {
|
||||
if (t == NULL) return EMPTY_WORDING;
|
||||
return Clusters::get_name(t->names, FALSE);
|
||||
int Nouns::is_common(noun *t) {
|
||||
if ((t) && (t->noun_subclass == COMMON_NOUN)) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@h Logging.
|
||||
|
@ -139,137 +139,121 @@ wording Nouns::nominative(noun *t) {
|
|||
=
|
||||
void Nouns::log(noun *t) {
|
||||
if (t == NULL) { LOG("<untagged>"); return; }
|
||||
wording W = Nouns::get_name(t, FALSE);
|
||||
if (Wordings::nonempty(W)) {
|
||||
LOG("'");
|
||||
LOOP_THROUGH_WORDING(i, W) {
|
||||
LOG("%N", i);
|
||||
if (i < Wordings::last_wn(W)) LOG(" ");
|
||||
wording W = Nouns::nominative_singular(t);
|
||||
if (Wordings::nonempty(W)) LOG("'%W'", W);
|
||||
}
|
||||
|
||||
@h Attaching some wording to a noun.
|
||||
As noted above, each noun comes with a cluster of names, and here's where
|
||||
we add a new one.
|
||||
|
||||
=
|
||||
void Nouns::supply_text(noun *t, wording W, NATURAL_LANGUAGE_WORDS_TYPE *lang,
|
||||
int gender, int number, int options) {
|
||||
linked_list *L = Clusters::add(t->names, W, lang, gender, number,
|
||||
(options & WITH_PLURAL_FORMS_NTOPT)?TRUE:FALSE);
|
||||
if (options & ADD_TO_LEXICON_NTOPT) {
|
||||
individual_name *in;
|
||||
LOOP_OVER_LINKED_LIST(in, individual_name, L) {
|
||||
general_pointer m = t->meaning;
|
||||
if (t->registration_category == NOUN_MC) m = STORE_POINTER_noun(t);
|
||||
Lexicon::register(t->registration_category,
|
||||
Declensions::in_case(&(in->name), NOMINATIVE_CASE), m);
|
||||
}
|
||||
LOG("'");
|
||||
}
|
||||
}
|
||||
|
||||
@h Name access.
|
||||
We normally access names in their nominative cases, so:
|
||||
|
||||
=
|
||||
wording Nouns::get_name(noun *t, int plural_flag) {
|
||||
return Clusters::get_name(t->names, plural_flag);
|
||||
wording Nouns::nominative_singular(noun *t) {
|
||||
if (t == NULL) return EMPTY_WORDING;
|
||||
return Clusters::get_name(t->names, FALSE);
|
||||
}
|
||||
|
||||
wording Nouns::get_name_in_play(noun *t, int plural_flag, NATURAL_LANGUAGE_WORDS_TYPE *lang) {
|
||||
return Clusters::get_name_in_play(t->names, plural_flag, lang);
|
||||
}
|
||||
|
||||
void Nouns::set_plural_name(noun *t, wording W) {
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *L = NULL;
|
||||
#ifdef CORE_MODULE
|
||||
L = Task::language_of_syntax();
|
||||
#endif
|
||||
Clusters::set_plural_name(t->names, W, L);
|
||||
}
|
||||
|
||||
int Nouns::full_name_includes(noun *t, vocabulary_entry *wd) {
|
||||
int Nouns::nominative_singular_includes(noun *t, vocabulary_entry *wd) {
|
||||
if (t == NULL) return FALSE;
|
||||
wording W = Nouns::get_name(t, FALSE);
|
||||
wording W = Nouns::nominative_singular(t);
|
||||
LOOP_THROUGH_WORDING(i, W)
|
||||
if (wd == Lexer::word(i))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@h Other utilities.
|
||||
wording Nouns::nominative(noun *t, int plural_flag) {
|
||||
return Clusters::get_name(t->names, plural_flag);
|
||||
}
|
||||
|
||||
wording Nouns::nominative_in_language(noun *t, int plural_flag,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *lang) {
|
||||
return Clusters::get_name_in_language(t->names, plural_flag, lang);
|
||||
}
|
||||
|
||||
void Nouns::set_nominative_plural_in_language(noun *t, wording W,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *lang) {
|
||||
Clusters::set_plural_in_language(t->names, W, lang);
|
||||
}
|
||||
|
||||
@h Meaning.
|
||||
|
||||
=
|
||||
general_pointer Nouns::tag_holder(noun *t) {
|
||||
general_pointer Nouns::meaning(noun *t) {
|
||||
if (t == NULL) return NULL_GENERAL_POINTER;
|
||||
return t->tagged_to;
|
||||
return t->meaning;
|
||||
}
|
||||
|
||||
int Nouns::priority(noun *t) {
|
||||
if (t == NULL) return 0;
|
||||
return t->search_priority;
|
||||
}
|
||||
|
||||
int Nouns::range_number(noun *t) {
|
||||
if (t == NULL) return 0;
|
||||
return t->range_number;
|
||||
}
|
||||
|
||||
void Nouns::set_range_number(noun *t, int r) {
|
||||
if (t == NULL) return;
|
||||
t->range_number = r;
|
||||
}
|
||||
|
||||
int Nouns::exactitude(noun *t) {
|
||||
if (t == NULL) return FALSE;
|
||||
#ifdef CORE_MODULE
|
||||
if (use_exact_parsing_option) return TRUE;
|
||||
#endif
|
||||
return t->match_exactly;
|
||||
}
|
||||
|
||||
@
|
||||
@h Exact parsing in the lexicon.
|
||||
|
||||
@d PARSE_EXACTLY_LEXICON_CALLBACK Nouns::parse_exactly
|
||||
|
||||
=
|
||||
int Nouns::parse_exactly(excerpt_meaning *em) {
|
||||
if (em->meaning_code == NOUN_MC) {
|
||||
noun *nt = RETRIEVE_POINTER_noun(em->data);
|
||||
if ((nt) && (Nouns::exactitude(nt))) return TRUE;
|
||||
#ifdef CORE_MODULE
|
||||
if (use_exact_parsing_option) return TRUE;
|
||||
#endif
|
||||
return FALSE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ =
|
||||
excerpt_meaning *Nouns::get_principal_meaning(noun *t) {
|
||||
return RETRIEVE_POINTER_excerpt_meaning(Clusters::get_principal_meaning(t->names));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@h Disambiguation.
|
||||
It's a tricky task to choose from a list of possible nouns which might
|
||||
have been intended by text such as "chair". If the list is empty or
|
||||
contains only one choice, no problem. Otherwise we will probably have to
|
||||
reorder the noun search list, and then run through it. The code below
|
||||
looks as if it picks out the match with highest score, so that the ordering
|
||||
is unimportant, but in fact the score assigned to a match is based purely
|
||||
on the number of words missed out (see later): that means that ambiguities
|
||||
often arise between two lexically similar objects, e.g., a "blue chair"
|
||||
or a "red chair" when the text simply specifies "chair". Since the code
|
||||
below accepts the first noun with the highest score, the outcome is
|
||||
thus determined by which of the blue and red chairs ranks highest in the
|
||||
search list: and that is why the search list is so important.
|
||||
Here the parse node |p| stands at the head of a list of alternative meanings
|
||||
for some text: for example, they might be different possible meanings of the
|
||||
words "red chair" -- perhaps the "red stuffed chair", perhaps the "red upright
|
||||
chair", and so on. We want to choose the most likely possibility.
|
||||
|
||||
Within Inform, this "likely" consideration is a matter of context -- of which
|
||||
heading the noun appears under.
|
||||
|
||||
=
|
||||
noun *Nouns::disambiguate(parse_node *p, int priority) {
|
||||
int candidates = 0; noun *first_nt = NULL;
|
||||
noun *Nouns::disambiguate(parse_node *p, int common_only) {
|
||||
noun *first_nt = NULL;
|
||||
@<If only one of the possible matches is eligible, return that@>;
|
||||
@<If the matches can be scored, return the highest-scoring one@>;
|
||||
/* and otherwise... */
|
||||
return first_nt;
|
||||
}
|
||||
|
||||
@<If only one of the possible matches is eligible, return that@> =
|
||||
int candidates = 0;
|
||||
for (parse_node *p2 = p; p2; p2 = p2->next_alternative) {
|
||||
noun *nt = RETRIEVE_POINTER_noun(
|
||||
Lexicon::get_data(Node::get_meaning(p2)));
|
||||
if ((nt->search_priority >= 1) && (nt->search_priority <= priority)) {
|
||||
noun *nt = RETRIEVE_POINTER_noun(Lexicon::get_data(Node::get_meaning(p2)));
|
||||
if (Nouns::is_eligible_match(nt, common_only)) {
|
||||
first_nt = nt; candidates++;
|
||||
}
|
||||
}
|
||||
|
||||
if (candidates <= 1) return first_nt;
|
||||
|
||||
#ifdef CORE_MODULE
|
||||
Sentences::Headings::construct_noun_search_list();
|
||||
noun *nt;
|
||||
LOOP_OVER(nt, noun)
|
||||
Sentences::Headings::set_noun_search_score(nt, 0);
|
||||
|
||||
for (parse_node *p2 = p; p2; p2 = p2->next_alternative) {
|
||||
noun *nt = RETRIEVE_POINTER_noun(
|
||||
Lexicon::get_data(Node::get_meaning(p2)));
|
||||
if ((nt->search_priority >= 1) && (nt->search_priority <= priority))
|
||||
Sentences::Headings::set_noun_search_score(nt,
|
||||
Node::get_score(p2));
|
||||
}
|
||||
noun *best_nt = Sentences::Headings::highest_scoring_noun_searched();
|
||||
@<If the matches can be scored, return the highest-scoring one@> =
|
||||
#ifdef NOUN_DISAMBIGUATION_LINGUISTICS_CALLBACK
|
||||
noun *best_nt = NOUN_DISAMBIGUATION_LINGUISTICS_CALLBACK(p, common_only);
|
||||
if (best_nt) return best_nt;
|
||||
#endif
|
||||
|
||||
return first_nt;
|
||||
@ =
|
||||
int Nouns::is_eligible_match(noun *nt, int common_only) {
|
||||
if ((common_only) && (Nouns::is_common(nt) == FALSE)) return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -86,6 +86,15 @@ it allows them in any form in non-assertion contexts. See
|
|||
(*) |EMPTY_ADJECTIVE_MEANING_LINGUISTICS_CALLBACK|, if provided, should be the default
|
||||
meaning for an adjective newly defined -- see //Adjectives::from_word_range//.
|
||||
|
||||
(*) |NOUN_COMPILATION_LINGUISTICS_CALLBACK|, if provided, should accompany a
|
||||
declaration of a structure called |name_compilation_data|; this function should
|
||||
then set up that data for the given noun -- see //Nouns::new_inner//.
|
||||
|
||||
(*) |NOUN_DISAMBIGUATION_LINGUISTICS_CALLBACK|, if provided, should accompany a
|
||||
declaration of a structure called |name_resolution_data|; this function should
|
||||
decide which possible reading of the meaning of a noun makes the best sense in
|
||||
context -- see //Nouns::disambiguate//.
|
||||
|
||||
(*) |TRACING_LINGUISTICS_CALLBACK|, if provided, can return |TRUE| to allow
|
||||
extensive details of verb parsing to be copied to the debugging log. See
|
||||
//VerbPhrases::tracing//.
|
||||
|
|
Loading…
Reference in a new issue