mirror of
https://github.com/ganelson/inform.git
synced 2024-06-17 07:40:47 +03:00
Started in on inflections
This commit is contained in:
parent
a77ae3b34b
commit
eace688fea
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
v10.1.0-alpha.1+6Q52 'Krypton' (22 May 2020)
|
||||
v10.1.0-alpha.1+6Q53 'Krypton' (23 May 2020)
|
||||
|
||||
## About Inform 7
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: alpha.1
|
||||
Build Date: 22 May 2020
|
||||
Build Number: 6Q52
|
||||
Build Date: 23 May 2020
|
||||
Build Number: 6Q53
|
||||
|
|
|
@ -132,7 +132,7 @@ thing which is being compiled when it is.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">stage_of_compilation</span><span class="plain-syntax"> = -1;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">next_resource_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">3</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">English_language</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Projects::get_language_of_syntax</span><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">InflectionDefns::set_default_nl</span><span class="plain-syntax">(</span><span class="identifier-syntax">Projects::get_language_of_syntax</span><span class="plain-syntax">(</span><span class="identifier-syntax">project</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">rv</span><span class="plain-syntax"> = </span><a href="1-htc.html#SP2" class="function-link"><span class="function-syntax">Sequence::carry_out</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TargetVMs::debug_enabled</span><span class="plain-syntax">(</span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax">-></span><span class="element-syntax">task</span><span class="plain-syntax">-></span><span class="identifier-syntax">for_vm</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inform7_task</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -103,7 +103,7 @@ trouble to search the existing dictionary here.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</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="named-paragraph-container code-font"><a href="3-pd.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Forbid plural declarations containing quoted text</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="9-tc.html#SP11" class="function-link"><span class="function-syntax">Assertions::Creator::vet_name_for_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="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">Pluralisation::register</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Pluralisation::register</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">InflectionDefns::default_nl</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">TRUE</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>
|
||||
|
|
|
@ -1527,7 +1527,7 @@ prefaced "(of a rulebook)", "(of an activity)", and so on.
|
|||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><adaptive-adjective></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> (</span><span class="Preform-identifier-syntax">Projects::get_language_of_play</span><span class="Preform-plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="Preform-function-syntax">Task::project</span></a><span class="Preform-plain-syntax">()) == </span><span class="Preform-identifier-syntax">English_language</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">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">Projects::get_language_of_play</span><span class="Preform-plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="Preform-function-syntax">Task::project</span></a><span class="Preform-plain-syntax">()) == </span><span class="Preform-identifier-syntax">InflectionDefns::default_nl</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">NULL</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">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">adjectival_phrase</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">aph</span><span class="Preform-plain-syntax">;</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">LOOP_OVER</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">aph</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">adjectival_phrase</span><span class="Preform-plain-syntax">) {</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">wording</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">AW</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Clusters::get_name_general</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">aph</span><span class="Preform-plain-syntax">-></span><span class="Preform-identifier-syntax">adjective_names</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">Projects::get_language_of_play</span><span class="Preform-plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="Preform-function-syntax">Task::project</span></a><span class="Preform-plain-syntax">()), </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax">, -1);</span>
|
||||
|
@ -1544,7 +1544,7 @@ prefaced "(of a rulebook)", "(of an activity)", and so on.
|
|||
|
||||
<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::Meanings::agreements</span><button class="popup" onclick="togglePopup('usagePopup38')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup38">Usage of <span class="code-font"><span class="function-syntax">Adjectives::Meanings::agreements</span></span>:<br/>How To Compile - <a href="1-htc.html#SP2_8">§2.8</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">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="identifier-syntax">English_language</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">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="identifier-syntax">InflectionDefns::default_nl</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">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="identifier-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">PW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Clusters::get_name_general</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">-></span><span class="identifier-syntax">adjective_names</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="constant-syntax">1</span><span class="plain-syntax">, -1);</span>
|
||||
|
|
|
@ -185,7 +185,7 @@ and is a somewhat provisional feature for now.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">inform_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_defn_language</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">g</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Annotations::read_int</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">gender_reference_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</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 such 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">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">InflectionDefns::default_nl</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">StandardProblems::sentence_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_CantTranslateIntoEnglish</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"you can't translate into English"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"only out of it."</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -165,7 +165,7 @@ as the object.
|
|||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><verb-implies-sentence-subject></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><natural-language></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><infinitive-declaration></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[2]; <<inform_language:nl>> = (inform_language *) (RP[1]);</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><infinitive-declaration></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]; <<inform_language:nl>> = English_language;</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><infinitive-declaration></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]; <<inform_language:nl>> = InflectionDefns::default_nl(NULL);</span>
|
||||
|
||||
<span class="Preform-function-syntax"><infinitive-declaration></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><infinitive-usage></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]; <<giving-parts>> = TRUE</span>
|
||||
|
@ -715,7 +715,7 @@ foreign verbs (4).
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VerbMeanings::get_relational_meaning</span><span class="plain-syntax">(&</span><span class="identifier-syntax">vm</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">a_has_b_predicate</span><span class="plain-syntax">) </span><span class="identifier-syntax">p</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">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">R_equality</span><span class="plain-syntax">) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">nl</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> != </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">)) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">nl</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> != </span><span class="identifier-syntax">InflectionDefns::default_nl</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))) </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> ++</span><span class="identifier-syntax">new_verb_sequence_count</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">vi</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Verbs::new_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">vc</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">vc</span><span class="plain-syntax">-></span><span class="identifier-syntax">vc_conjugates</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vi</span><span class="plain-syntax">;</span>
|
||||
|
@ -801,13 +801,13 @@ foreign verbs (4).
|
|||
<span class="plain-syntax"> </span><a href="6-nv.html#SP16" class="function-link"><span class="function-syntax">NewVerbs::declare_sm</span></a><span class="plain-syntax">(</span><a href="7-ns.html#SP11" class="function-link"><span class="function-syntax">Sentences::VPs::omit_from_SMF</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"omit-from"</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">infinitive</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::wording</span><span class="plain-syntax">(</span><span class="function-syntax"><bootstrap-verb></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">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Conjugation::conjugate</span><span class="plain-syntax">(</span><span class="identifier-syntax">infinitive</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Conjugation::conjugate</span><span class="plain-syntax">(</span><span class="identifier-syntax">infinitive</span><span class="plain-syntax">, </span><span class="identifier-syntax">InflectionDefns::default_nl</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">verb_identity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vi</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Verbs::new_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">vc</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">vc</span><span class="plain-syntax">-></span><span class="identifier-syntax">vc_conjugates</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vi</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VerbUsages::register_all_usages_of_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">vi</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">infinitive</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::wording</span><span class="plain-syntax">(</span><span class="function-syntax"><bootstrap-verb></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">vc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Conjugation::conjugate</span><span class="plain-syntax">(</span><span class="identifier-syntax">infinitive</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">vc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Conjugation::conjugate</span><span class="plain-syntax">(</span><span class="identifier-syntax">infinitive</span><span class="plain-syntax">, </span><span class="identifier-syntax">InflectionDefns::default_nl</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">vi</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Verbs::new_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">vc</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">vc</span><span class="plain-syntax">-></span><span class="identifier-syntax">vc_conjugates</span><span class="plain-syntax"> = </span><span class="identifier-syntax">vi</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">VerbUsages::register_all_usages_of_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">vi</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">);</span>
|
||||
|
@ -1341,7 +1341,7 @@ usages to the debugging log.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">vu</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 verb usage)"</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"VU: $f "</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-></span><span class="identifier-syntax">vu_text</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-></span><span class="identifier-syntax">negated_form_of_verb</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"(negated) "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Linguistics::log_tense_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-></span><span class="identifier-syntax">tensed</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">InflectionDefns::log_tense_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">DL</span><span class="plain-syntax">, </span><span class="identifier-syntax">vu</span><span class="plain-syntax">-></span><span class="identifier-syntax">tensed</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">NewVerbs::log_all</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">NewVerbs::log_all</span></span>:<br/>Main Routine - <a href="1-mr.html#SP1_6">§1.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
|
|
|
@ -266,7 +266,7 @@ from sentences, and this can include I6 properties with no I7 analogue.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">this_is_named_for_something_with_a_printed_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-tnt.html#SP11_1_1" class="named-paragraph-link"><span class="named-paragraph">Issue problem message if the name contains a comma</span><span class="named-paragraph-number">11.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">this_has_a_printed_name</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-tnt.html#SP11_1_2" class="named-paragraph-link"><span class="named-paragraph">Assert the printed name property</span><span class="named-paragraph-number">11.1.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Projects::get_language_of_play</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::project</span><span class="plain-syntax">()) != </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Projects::get_language_of_play</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::project</span><span class="plain-syntax">()) != </span><span class="identifier-syntax">InflectionDefns::default_nl</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-tnt.html#SP11_1_4" class="named-paragraph-link"><span class="named-paragraph">Assert male, female, neuter adjectives from grammatical gender</span><span class="named-paragraph-number">11.1.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
|
|
|
@ -127,7 +127,7 @@ which use this module:
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="1-im.html#SP3">§3</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrentchapter">1</li><li class="progresscurrent">im</li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="2-ld.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="P-htitm.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">im</li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="2-ld.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -72,11 +72,13 @@ function togglePopup(material_id) {
|
|||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NO_KNOWN_GENDERS</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">NEUTER_GENDER</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> can be used as Scandinavian "common gender"</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">NEUTER_GENDER</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> or can be used as Scandinavian "common gender"</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MASCULINE_GENDER</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">FEMININE_GENDER</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>There are six "persons":
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>There are six "persons". The sequence corresponds to the defined constants
|
||||
in the English Language extension, which we assume will be followed by other
|
||||
languages.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NO_KNOWN_PERSONS</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span>
|
||||
|
@ -101,15 +103,9 @@ function togglePopup(material_id) {
|
|||
<span class="definition-keyword">define</span> <span class="constant-syntax">ACTIVE_MOOD</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">PASSIVE_MOOD</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>25 cases ought to be plenty, though some languages are pretty scary this
|
||||
way: Hungarian, for example, has 18. We only require one case to exist, the
|
||||
nominative, which is required to be case 0.
|
||||
</p>
|
||||
|
||||
<p class="commentary">But this covers a pretty decent selection. Note that, as with the
|
||||
persons above, the sequence corresponds to the defined constants in the
|
||||
English Language extension, which we assume will be followed by other
|
||||
languages.
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>25 cases sounds like plenty, but some languages are pretty scary this
|
||||
way: Hungarian has 18. We only require one case to exist, the nominative,
|
||||
which is required to be case 0.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MAX_GRAMMATICAL_CASES</span><span class="plain-syntax"> </span><span class="constant-syntax">25</span>
|
||||
|
@ -126,18 +122,20 @@ tense 5 for the past historic.
|
|||
<span class="definition-keyword">define</span> <span class="constant-syntax">HASBEEN_TENSE</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="comment-syntax"> Present perfect</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">HADBEEN_TENSE</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax"> </span><span class="comment-syntax"> Past perfect</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">WILLBE_TENSE</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax"> </span><span class="comment-syntax"> Future (not used in assertions or conditions)</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">CUSTOM1_TENSE</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">CUSTOM2_TENSE</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Linguistics::log_tense_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">InflectionDefns::log_tense_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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="plain-syntax"> </span><span class="reserved-syntax">switch</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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IS_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"IS_TENSE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WAS_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"WAS_TENSE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">IS_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"IS_TENSE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WAS_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"WAS_TENSE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">HASBEEN_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"HASBEEN_TENSE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">HADBEEN_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"HADBEEN_TENSE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WILLBE_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"WILLBE_TENSE"</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">5</span><span class="plain-syntax">: </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"CUSTOM1_TENSE"</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">6</span><span class="plain-syntax">: </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"CUSTOM2_TENSE"</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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"<invalid-tense>"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">WILLBE_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"WILLBE_TENSE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CUSTOM1_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"CUSTOM1_TENSE"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CUSTOM2_TENSE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"CUSTOM2_TENSE"</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="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"<invalid-tense>"</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>
|
||||
</pre>
|
||||
|
@ -146,15 +144,19 @@ in its run.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">English_language</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> until created, early in run</span>
|
||||
<span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">default_language_for_linguistics</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">Linguistics::default_nl</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">Linguistics::default_nl</span></span>:<br/>Name Clusters - <a href="2-nc.html#SP4_1_1">§4.1.1</a><br/>Article Inflection - <a href="3-ai.html#SP1">§1</a><br/>Declensions - <a href="3-dcl.html#SP3">§3</a><br/>Pluralisation - <a href="3-plr.html#SP4">§4</a><br/>Grading Adjectives - <a href="3-ga.html#SP2">§2</a>, <a href="3-ga.html#SP3">§3</a><br/>Past Participles - <a href="3-pp.html#SP2">§2</a><br/>Verb Conjugation - <a href="3-vc.html#SP4_2_1">§4.2.1</a></span></button><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">void</span><span class="plain-syntax"> </span><span class="function-syntax">InflectionDefns::set_default_nl</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="identifier-syntax">default_language_for_linguistics</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">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="function-syntax">InflectionDefns::default_nl</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">InflectionDefns::default_nl</span></span>:<br/>Article Inflection - <a href="3-ai.html#SP1">§1</a><br/>Declensions - <a href="3-dcl.html#SP2">§2</a>, <a href="3-dcl.html#SP3">§3</a><br/>Name Clusters - <a href="3-nc.html#SP3">§3</a>, <a href="3-nc.html#SP4">§4</a>, <a href="3-nc.html#SP4_1_1">§4.1.1</a><br/>Pluralisation - <a href="3-plr.html#SP3">§3</a>, <a href="3-plr.html#SP4">§4</a><br/>Grading Adjectives - <a href="3-ga.html#SP2">§2</a>, <a href="3-ga.html#SP3">§3</a>, <a href="3-ga.html#SP4">§4</a><br/>Past Participles - <a href="3-pp.html#SP2">§2</a><br/>Verb Conjugation - <a href="3-vc.html#SP2">§2</a>, <a href="3-vc.html#SP4_2_1">§4.2.1</a>, <a href="3-vc.html#SP14">§14</a></span></button><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">nl</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">English_language</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">default_language_for_linguistics</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="1-im.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresscurrent">ld</li><li class="progresssection"><a href="2-tai.html">tai</a></li><li class="progresssection"><a href="2-nc.html">nc</a></li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="2-tai.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="1-im.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="progresscurrentchapter">2</li><li class="progresscurrent">ld</li><li class="progresssection"><a href="2-tai.html">tai</a></li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="2-tai.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -83,7 +83,7 @@ the same as the original.
|
|||
</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">Inflections::suffix_inflection</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">Inflections::suffix_inflection</span></span>:<br/><a href="2-tai.html#SP2">§2</a><br/>Pluralisation - <a href="3-plr.html#SP4">§4</a><br/>Grading Adjectives - <a href="3-ga.html#SP2">§2</a>, <a href="3-ga.html#SP3">§3</a><br/>Past Participles - <a href="3-pp.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">match_avinue</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">from</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Inflections::suffix_inflection</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">Inflections::suffix_inflection</span></span>:<br/><a href="2-tai.html#SP2">§2</a><br/>Pluralisation - <a href="3-plr.html#SP4">§4</a><br/>Grading Adjectives - <a href="3-ga.html#SP2">§2</a>, <a href="3-ga.html#SP3">§3</a>, <a href="3-ga.html#SP4">§4</a><br/>Past Participles - <a href="3-pp.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">match_avinue</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">from</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Tries::search_avinue</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-tai.html#SP1" class="function-link"><span class="function-syntax">Inflections::follow_suffix_instruction</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">result</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -116,7 +116,7 @@ do more than simply fiddle with the final letters.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="function-syntax">Inflections::apply_trie_to_wa</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">Inflections::apply_trie_to_wa</span></span>:<br/>Name Clusters - <a href="2-nc.html#SP4_1_1">§4.1.1</a><br/>Verb Conjugation - <a href="3-vc.html#SP4_2_1">§4.2.1</a></span></button><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">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="function-syntax">Inflections::apply_trie_to_wa</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">Inflections::apply_trie_to_wa</span></span>:<br/>Name Clusters - <a href="3-nc.html#SP4_1_1">§4.1.1</a><br/>Verb Conjugation - <a href="3-vc.html#SP4_2_1">§4.2.1</a></span></button><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">match_avinue</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">vocabulary_entry</span><span class="plain-syntax"> **</span><span class="identifier-syntax">words</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">no_words</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WordAssemblages::as_array</span><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, &</span><span class="identifier-syntax">words</span><span class="plain-syntax">, &</span><span class="identifier-syntax">no_words</span><span class="plain-syntax">);</span>
|
||||
|
@ -139,7 +139,7 @@ do more than simply fiddle with the final letters.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-ld.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-ld.html">ld</a></li><li class="progresscurrent">tai</li><li class="progresssection"><a href="2-nc.html">nc</a></li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="2-nc.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-ld.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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-ld.html">ld</a></li><li class="progresscurrent">tai</li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-ai.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -58,9 +58,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">inflections</a></li><li><a href="index.html#3">Chapter 3: Grammatical Uses of Inflection</a></li><li><b>Article Inflection</b></li></ul></div>
|
||||
<p class="purpose">To inflect "a" into "an", and so forth.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-ai.html#SP1">§1. The indefinite article trie</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. The indefinite article trie. </b>Here we take text such as "UNESCO document" and put an article in front, to
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. </b>Here we take text such as "UNESCO document" and put an article in front, to
|
||||
get "a UNESCO document" (and not "an UNESCO document": these things are much
|
||||
trickier than they look).
|
||||
</p>
|
||||
|
@ -68,20 +66,20 @@ trickier than they look).
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">indef_trie</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ArticleInflection::preface_by_article</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">initial_text</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ArticleInflection::preface_by_article</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">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">initial_text</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">indef_trie</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">indef_trie</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><singular-noun-to-its-indefinite-article></span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_START</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">Linguistics::default_nl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><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">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Tries::search_avinue</span><span class="plain-syntax">(</span><span class="identifier-syntax">indef_trie</span><span class="plain-syntax">, </span><span class="identifier-syntax">initial_text</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">result</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="string-syntax">"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">"%w %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">result</span><span class="plain-syntax">, </span><span class="identifier-syntax">initial_text</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="2-nc.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">ai</li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-dcl.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-tai.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-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">ai</li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-nc.html">nc</a></li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-dcl.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -80,15 +80,15 @@ function togglePopup(material_id) {
|
|||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">declension</span><span class="plain-syntax"> </span><span class="function-syntax">Declensions::decline</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">Declensions::decline</span></span>:<br/>Name Clusters - <a href="2-nc.html#SP3">§3</a>, <a href="2-nc.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">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">gen</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">declension</span><span class="plain-syntax"> </span><span class="function-syntax">Declensions::decline</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">Declensions::decline</span></span>:<br/>Name Clusters - <a href="3-nc.html#SP3">§3</a>, <a href="3-nc.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">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">gen</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="plain-syntax"> </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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">declension</span><span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP3" class="function-link"><span class="function-syntax">Declensions::decline_inner</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">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">num</span><span class="plain-syntax">, </span><span class="function-syntax"><noun-declension></span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-dcl.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Fix the origin</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">declension</span><span class="plain-syntax"> </span><span class="function-syntax">Declensions::decline_article</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">nl</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gen</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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">declension</span><span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP3" class="function-link"><span class="function-syntax">Declensions::decline_inner</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">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">num</span><span class="plain-syntax">, </span><span class="function-syntax"><article-declension></span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-dcl.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Fix the origin</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">;</span>
|
||||
|
@ -110,7 +110,7 @@ function togglePopup(material_id) {
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">declension</span><span class="plain-syntax"> </span><span class="function-syntax">Declensions::decline_inner</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">Declensions::decline_inner</span></span>:<br/><a href="3-dcl.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="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">gen</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="identifier-syntax">nonterminal</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">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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">declension</span><span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">.</span><span class="element-syntax">within_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="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pl</span><span class="plain-syntax">) {</span>
|
||||
|
@ -189,7 +189,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">.</span><span class="element-syntax">within_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">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</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><span class="identifier-syntax">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">group_trie</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="identifier-syntax">gnt</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">, </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">Linguistics::default_nl</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="identifier-syntax">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">group_trie</span><span class="plain-syntax"> = </span><span class="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="identifier-syntax">gnt</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">, </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Tries::search_avinue</span><span class="plain-syntax">(</span><span class="identifier-syntax">group_trie</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">result</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
|
@ -248,7 +248,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">D</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">Declensions::in_case</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">Declensions::in_case</span></span>:<br/>Name Clusters - <a href="2-nc.html#SP6">§6</a>, <a href="2-nc.html#SP7">§7</a>, <a href="2-nc.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">declension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Declensions::in_case</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">Declensions::in_case</span></span>:<br/>Name Clusters - <a href="3-nc.html#SP6">§6</a>, <a href="3-nc.html#SP7">§7</a>, <a href="3-nc.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">declension</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</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="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">c</span><span class="plain-syntax"> >= </span><a href="3-dcl.html#SP3" class="function-link"><span class="function-syntax">Declensions::no_cases</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">-></span><span class="element-syntax">within_language</span><span class="plain-syntax">))) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"case out of range"</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">D</span><span class="plain-syntax">-></span><span class="element-syntax">name_cased</span><span class="plain-syntax">[</span><span class="identifier-syntax">c</span><span class="plain-syntax">];</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -293,7 +293,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-ai.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresscurrent">dcl</li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-plr.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-ai.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-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresscurrent">dcl</li><li class="progresssection"><a href="3-nc.html">nc</a></li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-nc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -59,9 +59,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">inflections</a></li><li><a href="index.html#3">Chapter 3: Grammatical Uses of Inflection</a></li><li><b>Grading Adjectives</b></li></ul></div>
|
||||
<p class="purpose">To inflect adjectives into comparative and superlative forms.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-ga.html#SP1">§1. Constructing comparatives</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Constructing comparatives. </b>In English, the comparative of an adjective can generally be formed by
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. </b>In English, the comparative of an adjective can generally be formed by
|
||||
suffixing the inflected form with "than"; thus, "big" to "bigger than".
|
||||
The following does the suffixing:
|
||||
</p>
|
||||
|
@ -71,7 +69,8 @@ The following does the suffixing:
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</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="SP2"></a><b>§2. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>This is essentially a wrapper function for the trie <adjective-to-comparative>.
|
||||
</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">Grading::make_comparative</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">nl</span><span class="plain-syntax">) {</span>
|
||||
|
@ -81,9 +80,10 @@ The following does the suffixing:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">comprised</span><span class="plain-syntax">, </span><span class="string-syntax">"some-long-text"</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_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">comprised</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">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">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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="identifier-syntax">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">comp_trie</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="function-syntax"><adjective-to-comparative></span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">, </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">Linguistics::default_nl</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="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="function-syntax"><adjective-to-comparative></span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tai.html#SP1" class="function-link"><span class="function-syntax">Inflections::suffix_inflection</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transformed</span><span class="plain-syntax">, </span><span class="identifier-syntax">comp_trie</span><span class="plain-syntax">, </span><span class="identifier-syntax">comprised</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">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">transformed</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">merged</span><span class="plain-syntax"> =</span>
|
||||
|
@ -95,7 +95,11 @@ The following does the suffixing:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">comprised</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">PW</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>This is essentially a wrapper function for the trie <adjective-to-superlative>.
|
||||
</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">Grading::make_superlative</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">nl</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">comprised</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">transformed</span><span class="plain-syntax">);</span>
|
||||
|
@ -103,9 +107,10 @@ The following does the suffixing:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">comprised</span><span class="plain-syntax">, </span><span class="string-syntax">"some-long-text"</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_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">comprised</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">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">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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="identifier-syntax">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">comp_trie</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="function-syntax"><adjective-to-superlative></span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">, </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">Linguistics::default_nl</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="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="function-syntax"><adjective-to-superlative></span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tai.html#SP1" class="function-link"><span class="function-syntax">Inflections::suffix_inflection</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transformed</span><span class="plain-syntax">, </span><span class="identifier-syntax">comp_trie</span><span class="plain-syntax">, </span><span class="identifier-syntax">comprised</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">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">transformed</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">CONSTRUCTED_PLURALS</span><span class="plain-syntax">, </span><span class="string-syntax">"[Superlative of %W is %W]\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">PW</span><span class="plain-syntax">);</span>
|
||||
|
@ -114,10 +119,10 @@ The following does the suffixing:
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">PW</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>There has to be a better term than "quiddity" for this grammatical construct,
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>This is essentially a wrapper function for the trie <adjective-to-quiddity>.
|
||||
There has to be a better term than "quiddity" for this grammatical concept,
|
||||
but what I mean is the property for which the given adjective makes a
|
||||
comparison: for instance, "tallness" for "tall", or "steeliness" for
|
||||
"steely".
|
||||
comparison: for instance, "tallness" for "tall", or "steeliness" for "steely".
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -128,9 +133,10 @@ comparison: for instance, "tallness" for "tall", or "steeliness" for
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">comprised</span><span class="plain-syntax">, </span><span class="string-syntax">"some-long-text"</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_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">comprised</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">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">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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="identifier-syntax">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">comp_trie</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="function-syntax"><adjective-to-quiddity></span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">, </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">Linguistics::default_nl</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="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="function-syntax"><adjective-to-quiddity></span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tai.html#SP1" class="function-link"><span class="function-syntax">Inflections::suffix_inflection</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">transformed</span><span class="plain-syntax">, </span><span class="identifier-syntax">comp_trie</span><span class="plain-syntax">, </span><span class="identifier-syntax">comprised</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">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">transformed</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">CONSTRUCTED_PLURALS</span><span class="plain-syntax">, </span><span class="string-syntax">"[Quiddity of %W is %W]\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">PW</span><span class="plain-syntax">);</span>
|
||||
|
@ -140,7 +146,7 @@ comparison: for instance, "tallness" for "tall", or "steeliness" for
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-plr.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresscurrent">ga</li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-pp.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-plr.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-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-nc.html">nc</a></li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresscurrent">ga</li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-pp.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -63,10 +63,10 @@ function togglePopup(material_id) {
|
|||
<main role="main">
|
||||
<!--Weave of 'Name Clusters' 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">inflections</a></li><li><a href="index.html#2">Chapter 2: Machinery</a></li><li><b>Name Clusters</b></li></ul></div>
|
||||
<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: Grammatical Uses of Inflection</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="2-nc.html#SP1">§1. Cluster</a></li><li><a href="2-nc.html#SP5">§5. Plural fixing</a></li><li><a href="2-nc.html#SP6">§6. Searching declensions</a></li><li><a href="2-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><li><a href="3-nc.html#SP9">§9. Meanings</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
|
||||
|
@ -82,7 +82,7 @@ with lingistic roles. For example, the cluster of names for the common noun
|
|||
|
||||
<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_cluster</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_name</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">listed</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">individual_name</span></span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">name_cluster</span><span class="plain-syntax">;</span>
|
||||
|
||||
|
@ -91,8 +91,7 @@ with lingistic roles. For example, the cluster of names for the common noun
|
|||
<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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name_language</span><span class="plain-syntax">; </span><span class="comment-syntax"> always non-null</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="identifier-syntax">next</span><span class="plain-syntax">; </span><span class="comment-syntax"> within its cluster</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">individual_name</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
|
@ -103,7 +102,7 @@ with lingistic roles. For example, the cluster of names for the common noun
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">name_cluster</span><span class="plain-syntax"> *</span><span class="function-syntax">Clusters::new</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">name_cluster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">names</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">name_cluster</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">names</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_name</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">names</span><span class="plain-syntax">-></span><span class="identifier-syntax">listed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">names</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -111,26 +110,28 @@ with lingistic roles. For example, the cluster of names for the common noun
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Clusters::add</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">Clusters::add</span></span>:<br/><a href="2-nc.html#SP3_1">§3.1</a>, <a href="2-nc.html#SP4">§4</a>, <a href="2-nc.html#SP4_1">§4.1</a>, <a href="2-nc.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">name_cluster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">names</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="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">pluralise</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Clusters::add_one</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">Clusters::add_one</span></span>:<br/><a href="3-nc.html#SP3_1">§3.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">name_cluster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">names</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="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="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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#SP2" class="function-link"><span class="function-syntax">Declensions::decline</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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">name_gender</span><span class="plain-syntax"> = </span><span class="identifier-syntax">gender</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">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">names</span><span class="plain-syntax">-></span><span class="element-syntax">first_name</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">names</span><span class="plain-syntax">-></span><span class="element-syntax">first_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="reserved-syntax">else</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">in2</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">in2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">names</span><span class="plain-syntax">-></span><span class="element-syntax">first_name</span><span class="plain-syntax">; ((</span><span class="identifier-syntax">in2</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">in2</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)); </span><span class="identifier-syntax">in2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">in2</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">in2</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">in</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">pluralise</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">number</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-nc.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Add plural names as well</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_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">names</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="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="function-syntax">Clusters::add</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">Clusters::add</span></span>:<br/><a href="3-nc.html#SP4">§4</a>, <a href="3-nc.html#SP4_1">§4.1</a>, <a href="3-nc.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">name_cluster</span><span class="plain-syntax"> *</span><span class="identifier-syntax">names</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="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">pluralise</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">NEW_LINKED_LIST</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="reserved-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><a href="3-nc.html#SP3" class="function-link"><span class="function-syntax">Clusters::add_one</span></a><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">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">ADD_TO_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">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">pluralise</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">number</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-nc.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Add plural names as well</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</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>The following makes all possible plurals and registers those too. (Note
|
||||
that every instance gets a plural name: even something palpably unique, like
|
||||
|
@ -150,13 +151,13 @@ so there may be any number of names registered: for instance, the kind
|
|||
<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">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pde</span><span class="plain-syntax"> = </span><a href="3-plr.html#SP3" class="function-link"><span class="function-syntax">Pluralisation::make</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, &</span><span class="identifier-syntax">PW</span><span class="plain-syntax">, </span><span class="identifier-syntax">pde</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::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTRUCTED_PLURALS</span><span class="plain-syntax">, </span><span class="string-syntax">"(%d) Reading plural of <%W> as <%W>\n"</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">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">PW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-nc.html#SP3" class="function-link"><span class="function-syntax">Clusters::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">names</span><span class="plain-syntax">, </span><span class="identifier-syntax">PW</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="constant-syntax">2</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONSTRUCTED_PLURALS</span><span class="plain-syntax">, </span><span class="string-syntax">"(%d) Plural of <%W>: <%W>\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">PW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><a href="3-nc.html#SP3" class="function-link"><span class="function-syntax">Clusters::add_one</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">names</span><span class="plain-syntax">, </span><span class="identifier-syntax">PW</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="constant-syntax">2</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_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">L</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pde</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-nc.html#SP3">§3</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-nc.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>The following is more suited to adjectives, or to words which are used
|
||||
adjectivally, such as past participles in French. This time we generate all
|
||||
possible gender and number agreements — except in English, where no variation
|
||||
|
@ -169,15 +170,14 @@ combinations. Here we only work through six, ignoring animation:
|
|||
</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::add_with_agreements</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="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">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-nc.html#SP3" class="function-link"><span class="function-syntax">Clusters::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cl</span><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="constant-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="constant-syntax">1</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">else</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">gna</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">gna</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">gna</span><span class="plain-syntax"> < </span><span class="constant-syntax">6</span><span class="plain-syntax">; </span><span class="identifier-syntax">gna</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-nc.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Generate agreement form in this GNA and add to the declension</span><span class="named-paragraph-number">4.1</span></a></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">Clusters::add_with_agreements</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="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> == </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="3-nc.html#SP3" class="function-link"><span class="function-syntax">Clusters::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cl</span><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="constant-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="constant-syntax">1</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">else</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gna</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">gna</span><span class="plain-syntax"> < </span><span class="constant-syntax">6</span><span class="plain-syntax">; </span><span class="identifier-syntax">gna</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-nc.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Generate agreement form in this GNA and add to the declension</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4_1"></a><b>§4.1. </b>We use tries to modify the base text, which is taken to be the neuter
|
||||
|
@ -206,10 +206,10 @@ singular form, into the other five forms.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span><span class="plain-syntax">: </span><span class="identifier-syntax">step1</span><span class="plain-syntax"> = </span><span class="function-syntax"><adjective-to-plural></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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">FW</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="named-paragraph-container code-font"><a href="2-nc.html#SP4_1_1" class="named-paragraph-link"><span class="named-paragraph">Process via the agreement trie in this pipeline</span><span class="named-paragraph-number">4.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="2-nc.html#SP3" class="function-link"><span class="function-syntax">Clusters::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cl</span><span class="plain-syntax">, </span><span class="identifier-syntax">FW</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="identifier-syntax">form_gender</span><span class="plain-syntax">, </span><span class="identifier-syntax">form_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-nc.html#SP4_1_1" class="named-paragraph-link"><span class="named-paragraph">Process via the agreement trie in this pipeline</span><span class="named-paragraph-number">4.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="3-nc.html#SP3" class="function-link"><span class="function-syntax">Clusters::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cl</span><span class="plain-syntax">, </span><span class="identifier-syntax">FW</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="identifier-syntax">form_gender</span><span class="plain-syntax">, </span><span class="identifier-syntax">form_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-nc.html#SP4">§4</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-nc.html#SP4">§4</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_1_1"></a><b>§4.1.1. </b>Not much of a pipeline, really: we start with the base case and work
|
||||
through one or two tries.
|
||||
</p>
|
||||
|
@ -221,13 +221,15 @@ through one or two tries.
|
|||
<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">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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">step1</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><a href="2-tai.html#SP2" class="function-link"><span class="function-syntax">Inflections::apply_trie_to_wa</span></a><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::define_trie</span><span class="plain-syntax">(</span><span class="identifier-syntax">step1</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">, </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">Linguistics::default_nl</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="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="identifier-syntax">step1</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">step2</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><a href="2-tai.html#SP2" class="function-link"><span class="function-syntax">Inflections::apply_trie_to_wa</span></a><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::define_trie</span><span class="plain-syntax">(</span><span class="identifier-syntax">step2</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">, </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">Linguistics::default_nl</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="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="identifier-syntax">step2</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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="identifier-syntax">FW</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>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-nc.html#SP4_1">§4.1</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-nc.html#SP4_1">§4.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. Plural fixing. </b>Less elegantly, we can force the plural of a name in a cluster to a given
|
||||
fixed text, overwriting it if it's already there. In practice this is done
|
||||
only when the built-in kinds are being given plural names; some of these
|
||||
|
@ -236,14 +238,15 @@ 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="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">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="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="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cl</span><span class="plain-syntax">-></span><span class="element-syntax">first_name</span><span class="plain-syntax">; </span><span class="identifier-syntax">in</span><span class="plain-syntax">; </span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">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">if</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="constant-syntax">2</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#SP2" class="function-link"><span class="function-syntax">Declensions::decline</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="constant-syntax">NEUTER_GENDER</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="2-nc.html#SP3" class="function-link"><span class="function-syntax">Clusters::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cl</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">NEUTER_GENDER</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="plain-syntax"> </span><a href="3-nc.html#SP3" class="function-link"><span class="function-syntax">Clusters::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cl</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">NEUTER_GENDER</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="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. Searching declensions. </b>These are always quite small, so there's no need for any efficient device
|
||||
|
@ -255,11 +258,11 @@ or plural):
|
|||
</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</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">Clusters::get_name</span></span>:<br/><a href="2-nc.html#SP7">§7</a></span></button><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</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">Clusters::get_name</span></span>:<br/><a href="3-nc.html#SP7">§7</a></span></button><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="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>
|
||||
<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="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cl</span><span class="plain-syntax">-></span><span class="element-syntax">first_name</span><span class="plain-syntax">; </span><span class="identifier-syntax">in</span><span class="plain-syntax">; </span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">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">if</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_sought</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-dcl.html#SP3" class="function-link"><span class="function-syntax">Declensions::in_case</span></a><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><span class="constant-syntax">NOMINATIVE_CASE</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>
|
||||
|
@ -270,15 +273,16 @@ 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">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nl</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_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="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>
|
||||
<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="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cl</span><span class="plain-syntax">-></span><span class="element-syntax">first_name</span><span class="plain-syntax">; </span><span class="identifier-syntax">in</span><span class="plain-syntax">; </span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">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">if</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_sought</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="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-dcl.html#SP3" class="function-link"><span class="function-syntax">Declensions::in_case</span></a><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><span class="constant-syntax">NOMINATIVE_CASE</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-nc.html#SP6" class="function-link"><span class="function-syntax">Clusters::get_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cl</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><a href="3-nc.html#SP6" class="function-link"><span class="function-syntax">Clusters::get_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cl</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural_flag</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b>A more specific search, which can optionally test for number and gender.
|
||||
|
@ -288,7 +292,7 @@ falling back on English if there's none registered:
|
|||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">Clusters::get_name_general</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="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">number_sought</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gender_sought</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="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cl</span><span class="plain-syntax">-></span><span class="element-syntax">first_name</span><span class="plain-syntax">; </span><span class="identifier-syntax">in</span><span class="plain-syntax">; </span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">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">if</span><span class="plain-syntax"> (((</span><span class="identifier-syntax">number_sought</span><span class="plain-syntax"> == -1) || (</span><span class="identifier-syntax">number_sought</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="plain-syntax"> ((</span><span class="identifier-syntax">gender_sought</span><span class="plain-syntax"> == -1) || (</span><span class="identifier-syntax">gender_sought</span><span class="plain-syntax"> == </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">name_gender</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>
|
||||
|
@ -308,12 +312,14 @@ to an <span class="extract"><span class="extract-syntax">excerpt_meaning</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cl</span><span class="plain-syntax">-></span><span class="element-syntax">first_name</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">cl</span><span class="plain-syntax">-></span><span class="element-syntax">first_name</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">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="2-tai.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-ld.html">ld</a></li><li class="progresssection"><a href="2-tai.html">tai</a></li><li class="progresscurrent">nc</li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-ai.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-dcl.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-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresscurrent">nc</li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-plr.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
|
@ -108,9 +108,9 @@ one not found in the dictionary).
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">plural_dictionary_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">Pluralisation::make</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">Pluralisation::make</span></span>:<br/>Name Clusters - <a href="2-nc.html#SP3_1">§3.1</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">wording</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PW</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">plural_dictionary_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">Pluralisation::make</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">Pluralisation::make</span></span>:<br/>Name Clusters - <a href="3-nc.html#SP3_1">§3.1</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">wording</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PW</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">plural_dictionary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">search_from</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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">plural_dictionary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pde</span><span class="plain-syntax">;</span>
|
||||
|
||||
|
@ -169,14 +169,15 @@ has a plural, and modifies it to the plural form.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Pluralisation::regular</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">Pluralisation::regular</span></span>:<br/><a href="3-plr.html#SP3_1">§3.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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="identifier-syntax">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">plural_trie</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="function-syntax"><singular-noun-to-its-plural></span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">, </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">Linguistics::default_nl</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="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="function-syntax"><singular-noun-to-its-plural></span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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">return</span><span class="plain-syntax"> </span><a href="2-tai.html#SP1" class="function-link"><span class="function-syntax">Inflections::suffix_inflection</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">plural_trie</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</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-dcl.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresscurrent">plr</li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-ga.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-nc.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-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-nc.html">nc</a></li><li class="progresscurrent">plr</li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-ga.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -104,12 +104,13 @@ above. It expects only a single word.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">PastParticiples::pasturise_text</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">PastParticiples::pasturise_text</span></span>:<br/><a href="3-pp.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">past_trie</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="function-syntax"><pasturise-participle></span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_START</span><span class="plain-syntax">, </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">Linguistics::default_nl</span></a><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">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="function-syntax"><pasturise-participle></span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_START</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><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><a href="2-tai.html#SP1" class="function-link"><span class="function-syntax">Inflections::suffix_inflection</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">past_trie</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</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-ga.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresscurrent">pp</li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-vc.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-ga.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-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-nc.html">nc</a></li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresscurrent">pp</li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="3-vc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -125,7 +125,7 @@ conjugation to another.
|
|||
|
||||
<span class="reserved-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="function-syntax">Conjugation::conjugate_with_overrides</span><span class="plain-syntax">(</span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">base_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">overrides</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_overrides</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">base_text</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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"No base text for verb conjugation"</span><span class="plain-syntax">);</span>
|
||||
|
||||
|
@ -516,7 +516,7 @@ example:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_forms</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</span><span class="plain-syntax">] =</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tai.html#SP2" class="function-link"><span class="function-syntax">Inflections::apply_trie_to_wa</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_forms</span><span class="plain-syntax">[</span><span class="constant-syntax">BASE_FORM_TYPE</span><span class="plain-syntax">],</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="identifier-syntax">content_token</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">, </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">Linguistics::default_nl</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="identifier-syntax">PreformUtilities::define_trie</span><span class="plain-syntax">(</span><span class="identifier-syntax">content_token</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRIE_END</span><span class="plain-syntax">, </span><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">content_token</span><span class="plain-syntax">-></span><span class="identifier-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_forms</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</span><span class="plain-syntax">] =</span>
|
||||
<span class="plain-syntax"> </span><a href="3-vc.html#SP6" class="function-link"><span class="function-syntax">Conjugation::expand_with_endings</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">content_token</span><span class="plain-syntax">-></span><span class="identifier-syntax">ve_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">verb_forms</span><span class="plain-syntax">);</span>
|
||||
|
@ -996,7 +996,7 @@ from our dictionary of 14,000 or so present and past participles.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Conjugation::test_participle</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>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">verb_conjugation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vc</span><span class="plain-syntax"> = </span><a href="3-vc.html#SP2" class="function-link"><span class="function-syntax">Conjugation::conjugate</span></a><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="identifier-syntax">English_language</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><a href="2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><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">vc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"Failed test\n"</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><a href="3-vc.html#SP14" class="function-link"><span class="function-syntax">Conjugation::write_participle</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">vc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DESTROY</span><span class="plain-syntax">(</span><span class="identifier-syntax">vc</span><span class="plain-syntax">, </span><span class="reserved-syntax">verb_conjugation</span><span class="plain-syntax">);</span>
|
||||
|
@ -1022,7 +1022,7 @@ as markers in verb conjugations.
|
|||
</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>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-pp.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresscurrent">vc</li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="4-ei.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-pp.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-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-nc.html">nc</a></li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresscurrent">vc</li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="4-ei.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -59,76 +59,9 @@
|
|||
<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#4">Chapter 4: Default Language</a></li><li><b>English Inflections</b></li></ul></div>
|
||||
<p class="purpose">To define how English nouns and verbs are inflected.</p>
|
||||
|
||||
<ul class="toc"><li><a href="4-ei.html#SP1">§1. Preface</a></li><li><a href="4-ei.html#SP3">§3. Noun inflections</a></li><li><a href="4-ei.html#SP7">§7. Plural inflections</a></li><li><a href="4-ei.html#SP16">§16. Verb inflections</a></li><li><a href="4-ei.html#SP47">§47. Present to past participles</a></li><li><a href="4-ei.html#SP48">§48. Adjective agreements</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-ei.html#SP1">§1. Noun inflections</a></li><li><a href="4-ei.html#SP5">§5. Plural inflections</a></li><li><a href="4-ei.html#SP14">§14. Verb inflections</a></li><li><a href="4-ei.html#SP45">§45. Present to past participles</a></li><li><a href="4-ei.html#SP46">§46. Adjective agreements</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Preface. </b>Inflections are modifications of words — usually word endings or beginnings —
|
||||
for different circumstances. English is often called an uninflected language,
|
||||
but this is an exaggeration. For example, we spell the word "tree" as
|
||||
"trees" if it refers to more than one of them. Inform sometimes needs
|
||||
to take text in one form and change it to another — for example, to turn
|
||||
a singular noun into a plural one — and ordinary Preform parsing isn't good
|
||||
enough to express this.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Inform uses a data structure called a "trie" as an efficient way to match
|
||||
prefix and/or suffix patterns in words, and then to modify them. These tries
|
||||
are created using the same notation as for Preform grammar, which is
|
||||
convenient in many ways, but also a little misleading — they are parsed quite
|
||||
differently. The rules are as follows:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>(a) A nonterminal in trie grammar can either be a list of other tries, or it
|
||||
can be a list of inflection rules. Mixtures of the two are not allowed. For
|
||||
example <span class="extract"><span class="extract-syntax"><singular-noun-to-its-indefinite-article></span></span> is a list of other tries, while
|
||||
<span class="extract"><span class="extract-syntax"><en-trie-indef-a></span></span> contains actual rules.
|
||||
</li><li>(b) In a list of tries, each production consists only of a single nonterminal
|
||||
identifying the trie to make use of. One exception: writing <span class="extract"><span class="extract-syntax">...</span></span> before the
|
||||
trie's name makes it work on the end of a word instead of the beginning.
|
||||
Inform attempts to find a match using each trie in turn, until a match is
|
||||
found.
|
||||
</li><li>(c) In a list of inflection rules, each production consists of two words. The
|
||||
first word is what to match; the second gives instructions on what to turn
|
||||
it into. An asterisk is used to mean "any string of 0 or more letters";
|
||||
a digit in the replacement text means "truncate by this many letters and
|
||||
add...". (As a special case, the replacement text "0" means: make no
|
||||
change.) Some examples:
|
||||
</li></ul>
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">lead gold</span></span> turns "lead" into "gold"
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">codex codices</span></span> turns "codex" to "codices"
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">*mouse 5mice</span></span> turns "mouse" to "mice", or "fieldmouse" to "fieldmice"
|
||||
</p>
|
||||
|
||||
<p class="commentary">Designing a trie is not quite as easy as it looks. It looks as if this is a
|
||||
sequence of tests to perform in succession, but it's better to think of the
|
||||
rules all being performed at once. In general, if you need one inflection
|
||||
rule to take precedence over another, put it in an earlier trie, rather than
|
||||
putting it earlier in the same trie.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>Tries are highly language specific and should not be translated as such:
|
||||
instead, an appropriate version needs to be written for every language.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Except at the very top level, translators are free to created new tries
|
||||
and name them as they please. For example, the Spanish implementation of
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><singular-noun-to-its-indefinite-article></span>
|
||||
</pre>
|
||||
<p class="commentary">may look entirely unlike its English version, but at the top level it still
|
||||
has to have that name.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Lower-level tries used in the implementation should have names beginning
|
||||
with a language code: hence the names "en-" used below.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. Noun inflections. </b>The following trie looks at the start of a word, which we assume to be a
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Noun inflections. </b>The following trie looks at the start of a word, which we assume to be a
|
||||
noun, and decides whether to use the indefinite article "a" or "an".
|
||||
This is much more complicated than simply looking for a vowel as the first
|
||||
letter, as people often think until they try a few cases.
|
||||
|
@ -145,7 +78,7 @@ dictionary and the "Official Scrabble Wordlist".
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-indef-c></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>Exceptions to the exceptions:
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>Exceptions to the exceptions:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -158,7 +91,7 @@ dictionary and the "Official Scrabble Wordlist".
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">uvarovite*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> a rare emerald-green garnet, Ca3Cr2(SiO4)3</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>Then the exceptions:
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>Then the exceptions:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -228,7 +161,7 @@ dictionary and the "Official Scrabble Wordlist".
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">uvu*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>And finally the basic rules:
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>And finally the basic rules:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -288,7 +221,7 @@ dictionary and the "Official Scrabble Wordlist".
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">yw*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. Plural inflections. </b>The following takes a single word, assumes it to be a noun which meaningfully
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. Plural inflections. </b>The following takes a single word, assumes it to be a noun which meaningfully
|
||||
has a plural, and modifies it to the plural form. ("Golf" is a noun which
|
||||
doesn't sensibly have a plural; the algorithm here would return "golves".)
|
||||
</p>
|
||||
|
@ -334,7 +267,7 @@ of a sibilant plus "o" suffix to include an "e", so that Conway produces
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-plural-append-s></span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b>See Conway's table A.2. The following nouns, mostly names of kinds of animal,
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>See Conway's table A.2. The following nouns, mostly names of kinds of animal,
|
||||
have the same plural as singular form: for example, chamois, salmon, goldfish.
|
||||
</p>
|
||||
|
||||
|
@ -392,7 +325,7 @@ have the same plural as singular form: for example, chamois, salmon, goldfish.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">pincers</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</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. </b>We may as well pluralise pronouns while we're at it.
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b>We may as well pluralise pronouns while we're at it.
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -421,7 +354,7 @@ have the same plural as singular form: for example, chamois, salmon, goldfish.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">oneself</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">oneselves</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="SP10"></a><b>§10. </b>We now reach Conway step 4. These are irregular plurals mostly coming
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b>We now reach Conway step 4. These are irregular plurals mostly coming
|
||||
from archaisms.
|
||||
</p>
|
||||
|
||||
|
@ -442,7 +375,7 @@ from archaisms.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">trilby</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">trilbys</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. </b>Step 5. Now we reach a batch of irregular but fairly general inflected
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>Step 5. Now we reach a batch of irregular but fairly general inflected
|
||||
endings; for example, protozoon to protozoa, or metamorphosis to metamorphoses.
|
||||
Note that we differ from Conway in pluralizing blouse as blouses, not blice.
|
||||
</p>
|
||||
|
@ -462,7 +395,7 @@ Note that we differ from Conway in pluralizing blouse as blouses, not blice.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*xis</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3xes</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="SP12"></a><b>§12. </b>Step 6. These are inflections from Latin and Greek which have survived
|
||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b>Step 6. These are inflections from Latin and Greek which have survived
|
||||
into modern English:
|
||||
</p>
|
||||
|
||||
|
@ -494,7 +427,7 @@ into modern English:
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ovum</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ova</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. </b>Step 11a. (We're not implementing Conway's steps in sequence: see below.)
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. </b>Step 11a. (We're not implementing Conway's steps in sequence: see below.)
|
||||
These -o endings are mostly loan words from Romance languages whose original
|
||||
inflections are assimilated.
|
||||
</p>
|
||||
|
@ -535,7 +468,7 @@ inflections are assimilated.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">tempo</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">tempos</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. </b>Conway steps 8 to 11. These are regular inflections depending only on
|
||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. </b>Conway steps 8 to 11. These are regular inflections depending only on
|
||||
word endings.
|
||||
</p>
|
||||
|
||||
|
@ -621,7 +554,7 @@ word endings.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*zo</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0s</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. </b>Lastly, the fallback if none of the above cases match: append an -s, of
|
||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. </b>Lastly, the fallback if none of the above cases match: append an -s, of
|
||||
course.
|
||||
</p>
|
||||
|
||||
|
@ -630,7 +563,7 @@ course.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0s</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> Step 13</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. Verb inflections. </b>"Le verbe est l'âme d'une langue" (attributed to Georges Duhamel). And the
|
||||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. Verb inflections. </b>"Le verbe est l'âme d'une langue" (attributed to Georges Duhamel). And the
|
||||
care of the soul is, of course, complicated. For example, the source text can
|
||||
say something like this:
|
||||
</p>
|
||||
|
@ -666,7 +599,7 @@ of the possibilities we need to make, and write a trie to handle each one.
|
|||
is, how the different word forms map onto the possible tenses, persons,
|
||||
numbers, and so on.
|
||||
</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. </b>This gives us a certain amount of choice. What exactly is "too irregular"?
|
||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. </b>This gives us a certain amount of choice. What exactly is "too irregular"?
|
||||
In French, are all -er, -ir, and -re verbs "regular"? (Consider "aller",
|
||||
for example.) In English, it's possible to say that there are seven or so
|
||||
classes of verbs, all regular by their own standards; but most people say
|
||||
|
@ -701,7 +634,7 @@ example, to set has just three distinct forms — to set, he sets, he set, h
|
|||
had set, setting.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP18"></a><b>§18. </b>Form types are numbered from 0 up to, potentially, a constant
|
||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. </b>Form types are numbered from 0 up to, potentially, a constant
|
||||
called <span class="extract"><span class="Preform-extract-syntax">MAX_FORM_TYPES</span></span>. (This is so large that there shouldn't ever be need
|
||||
for more.) Form type 0 is always the original text, and is used as the basis
|
||||
from which the others are generated. For English verbs Inform always sets form
|
||||
|
@ -728,7 +661,7 @@ each language. English needs two: the present (5) and past (6) forms.
|
|||
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">ADJOINT_INFINITIVE_FORM_TYPE</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span>
|
||||
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">MAX_FORM_TYPES</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">123</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP19"></a><b>§19. </b>We're now ready to write the <span class="extract"><span class="Preform-extract-syntax"><verb-conjugation-instructions></span></span>. This is
|
||||
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. </b>We're now ready to write the <span class="extract"><span class="Preform-extract-syntax"><verb-conjugation-instructions></span></span>. This is
|
||||
a block which looks at the infinitive of the verb and decides which of
|
||||
several conjugations should be used. Badly irregular verbs get
|
||||
conjugations of their own, and others are grouped together. In French,
|
||||
|
@ -754,7 +687,7 @@ least one line, and the best way to ensure that is to finish up with <span class
|
|||
as the last pattern — this matches anything.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP20"></a><b>§20. </b>The instructions for English are quite concise, except for the presence
|
||||
<p class="commentary firstcommentary"><a id="SP18"></a><b>§18. </b>The instructions for English are quite concise, except for the presence
|
||||
of the awkward contracted informal forms of verbs. (These aren't used in
|
||||
Inform assertion sentences, but are needed for text substitutions.)
|
||||
</p>
|
||||
|
@ -788,7 +721,7 @@ Inform assertion sentences, but are needed for text substitutions.)
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><regular-verb-conjugation></span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP21"></a><b>§21. </b>We will start with two auxiliary verbs, that is, verbs used to construct
|
||||
<p class="commentary firstcommentary"><a id="SP19"></a><b>§19. </b>We will start with two auxiliary verbs, that is, verbs used to construct
|
||||
forms of other verbs. The first is "to have"; as we'll see, English uses
|
||||
this to construct perfect tenses:
|
||||
</p>
|
||||
|
@ -851,7 +784,7 @@ for "[have]".
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><to-have-tabulation></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="SP22"></a><b>§22. </b>Tabulations give instructions for how to construct 120 possible versions
|
||||
<p class="commentary firstcommentary"><a id="SP20"></a><b>§20. </b>Tabulations give instructions for how to construct 120 possible versions
|
||||
of the verb. These are divided up first into active and passive "moods":
|
||||
</p>
|
||||
|
||||
|
@ -990,7 +923,7 @@ are used for the six persons.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a2-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">had</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP23"></a><b>§23. </b>And this is an example of splitting into cases for the six persons,
|
||||
<p class="commentary firstcommentary"><a id="SP21"></a><b>§21. </b>And this is an example of splitting into cases for the six persons,
|
||||
1PS, 2PS, 3PS, 1PP, 2PP, 3PP. I have, you have, he has, we have, you have,
|
||||
they have. (This is more excitingly varied in other languages, of course.)
|
||||
</p>
|
||||
|
@ -1000,7 +933,7 @@ they have. (This is more excitingly varied in other languages, of course.)
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">has</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</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="SP24"></a><b>§24. </b>Next we have "to do", which is like "to have" in being fairly regular,
|
||||
<p class="commentary firstcommentary"><a id="SP22"></a><b>§22. </b>Next we have "to do", which is like "to have" in being fairly regular,
|
||||
as irregular verbs go. But we treat this as a special case because, again,
|
||||
we're going to need as an auxiliary verb when forming negatives ("Peter
|
||||
does not wear the hat" — note the "does not"). But this time we give
|
||||
|
@ -1066,7 +999,7 @@ may have to revisit this for languages other than English.)
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">does</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</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="SP25"></a><b>§25. </b>Regular English verbs, then, look like so. We will, for the first time,
|
||||
<p class="commentary firstcommentary"><a id="SP23"></a><b>§23. </b>Regular English verbs, then, look like so. We will, for the first time,
|
||||
make heavy use of our numbered verb forms: for example, for the verb
|
||||
"to take", they would be "take" (1), "taking" (2), "taken" (3),
|
||||
"takes" (5) and "took" (6). We start with the infinitive ("take")
|
||||
|
@ -1098,7 +1031,7 @@ to "grabs onto", "grabbing onto" and so on.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><regular-verb-tabulation></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="SP26"></a><b>§26. </b>Here we see our auxiliary verbs in use. For the negated present tense,
|
||||
<p class="commentary firstcommentary"><a id="SP24"></a><b>§24. </b>Here we see our auxiliary verbs in use. For the negated present tense,
|
||||
"Peter does not carry the ball"; for the negated past tense, "Peter did
|
||||
not carry the ball" — in both cases, this is "to do" plus the infinitive
|
||||
"take". For the perfect tenses, "to have" plus the past participle —
|
||||
|
@ -1122,7 +1055,7 @@ a bequest".)
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">p*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</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="SP27"></a><b>§27. </b>This looks odd, but what it says is that the present tense of a regular
|
||||
<p class="commentary firstcommentary"><a id="SP25"></a><b>§25. </b>This looks odd, but what it says is that the present tense of a regular
|
||||
English verb is always the infinitive (I take, you take, we take, and so on)
|
||||
except for third person singular (he takes), which is different. (It's usually
|
||||
what the plural of the infinitive would be if the infinitive were a noun,
|
||||
|
@ -1134,7 +1067,7 @@ as we'll see.)
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">5</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">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="SP28"></a><b>§28. </b>Now for our most irregular verb: "to be".
|
||||
<p class="commentary firstcommentary"><a id="SP26"></a><b>§26. </b>Now for our most irregular verb: "to be".
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -1160,7 +1093,7 @@ as we'll see.)
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">was</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">was</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</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="SP29"></a><b>§29. </b>Except for tense formation (Peter "will" take the ball), the most common
|
||||
<p class="commentary firstcommentary"><a id="SP27"></a><b>§27. </b>Except for tense formation (Peter "will" take the ball), the most common
|
||||
modal verb which can be used in Inform source text is "can". For example:
|
||||
</p>
|
||||
|
||||
|
@ -1199,7 +1132,7 @@ to elide, so we always pronounce it that way and the spelling now follows.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">will</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++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="SP30"></a><b>§30. </b>Inform has only a simple understanding of what "can" means, so it doesn't
|
||||
<p class="commentary firstcommentary"><a id="SP28"></a><b>§28. </b>Inform has only a simple understanding of what "can" means, so it doesn't
|
||||
allow the source text to use "can" in combination with arbitrary verbs.
|
||||
Instead, each legal combination has to be declared explicitly:
|
||||
</p>
|
||||
|
@ -1242,7 +1175,7 @@ Jane".
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">p</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</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="SP31"></a><b>§31. </b>The following handles the other English modal verbs ("might", "should"
|
||||
<p class="commentary firstcommentary"><a id="SP29"></a><b>§29. </b>The following handles the other English modal verbs ("might", "should"
|
||||
and so on) surprisingly easily. The notation <span class="extract"><span class="Preform-extract-syntax">++1</span></span> means that the verb
|
||||
being modified should appear in verb form 1, and so on: for example,
|
||||
"might not lead" as "might not" plus form 1 of "to lead", i.e., "lead".
|
||||
|
@ -1267,7 +1200,7 @@ being modified should appear in verb form 1, and so on: for example,
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++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="SP32"></a><b>§32. </b>That completes our basic kit of verbs nicely. What's left is used only
|
||||
<p class="commentary firstcommentary"><a id="SP30"></a><b>§30. </b>That completes our basic kit of verbs nicely. What's left is used only
|
||||
for generating text at run-time — for printing adaptive messages, that is;
|
||||
none of these oddball exceptional cases is otherwise used as a verb in
|
||||
Inform source text. None of them has any meaning to Inform.
|
||||
|
@ -1329,7 +1262,7 @@ dialects — and we aren't even going to try to cope with that.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">wasn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">wasn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</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="SP33"></a><b>§33. </b>And now "to 've", the contracted form of "to have". A subtle dialect
|
||||
<p class="commentary firstcommentary"><a id="SP31"></a><b>§31. </b>And now "to 've", the contracted form of "to have". A subtle dialect
|
||||
point here concerns the negated present tense:
|
||||
</p>
|
||||
|
||||
|
@ -1380,7 +1313,7 @@ go with those.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'s</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</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="SP34"></a><b>§34. </b>Now we come to "aren't", a negated form of "to be", but where the
|
||||
<p class="commentary firstcommentary"><a id="SP32"></a><b>§32. </b>Now we come to "aren't", a negated form of "to be", but where the
|
||||
contraction occurs between the verb and the "not" rather than between
|
||||
the subject and the verb.
|
||||
</p>
|
||||
|
@ -1418,7 +1351,7 @@ that option here.)
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">hasn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</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="SP35"></a><b>§35. </b>And finally: the contracted informal negatives of various modal verbs which
|
||||
<p class="commentary firstcommentary"><a id="SP33"></a><b>§33. </b>And finally: the contracted informal negatives of various modal verbs which
|
||||
it's useful to be able to print, like the "can't" in
|
||||
</p>
|
||||
|
||||
|
@ -1451,7 +1384,7 @@ of "modal" itself arguable. This is the best we can do.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">7</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">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="SP36"></a><b>§36. </b>Together with special rules for can't, which is inevitably slightly different:
|
||||
<p class="commentary firstcommentary"><a id="SP34"></a><b>§34. </b>Together with special rules for can't, which is inevitably slightly different:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -1469,7 +1402,7 @@ of "modal" itself arguable. This is the best we can do.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5+</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">won't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++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="SP37"></a><b>§37. </b>We have special tries just to list the forms of the cases we will
|
||||
<p class="commentary firstcommentary"><a id="SP35"></a><b>§35. </b>We have special tries just to list the forms of the cases we will
|
||||
deal with. Tries can do fancy things (see below), but here they act just as
|
||||
a look-up table: for example, "won't" has present "won't", past
|
||||
"wouldn't" and future "won't".
|
||||
|
@ -1517,7 +1450,7 @@ signs can be used if we absolutely have to introduce spaces.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">shouldn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">shouldn't</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="SP38"></a><b>§38. </b>That's the end of the conjugations — the easy part, it turns out. We now
|
||||
<p class="commentary firstcommentary"><a id="SP36"></a><b>§36. </b>That's the end of the conjugations — the easy part, it turns out. We now
|
||||
need to create the four tries to make verb forms out of the infinitive:
|
||||
the present participle, the past participle, the third-person singular
|
||||
present tense, and the past tense.
|
||||
|
@ -1560,7 +1493,7 @@ no easy way to tell. Consider deter to deterring (stress on second syllable
|
|||
of deter), but meter to metering (stress on first syllable of meter).
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP39"></a><b>§39. </b>The following algorithm is due to Toby Nelson, who produced it from a
|
||||
<p class="commentary firstcommentary"><a id="SP37"></a><b>§37. </b>The following algorithm is due to Toby Nelson, who produced it from a
|
||||
dictionary of 14,689 English verbs, some of them quite obscure (to torpefy,
|
||||
anyone? to spuilzie? to cachinnate?). It's essentially a more detailed
|
||||
version of Greenbaum's rules above.
|
||||
|
@ -1575,7 +1508,7 @@ version of Greenbaum's rules above.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-regular-c-present-participle></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="SP40"></a><b>§40. </b>First of all there are some irregular cases — some for the usual suspects,
|
||||
<p class="commentary firstcommentary"><a id="SP38"></a><b>§38. </b>First of all there are some irregular cases — some for the usual suspects,
|
||||
but others for oddball verbs where English breaks the normal phonetic rules
|
||||
for the sake of clarity. For example, the participle of "singe" ought to
|
||||
be "singing", but in fact we write "singeing", purely to make it different
|
||||
|
@ -1771,7 +1704,7 @@ from the act of producing a song.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">undersaye</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1ing</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="SP41"></a><b>§41. </b>Now some exceptional forms where consonant doubling doesn't occur:
|
||||
<p class="commentary firstcommentary"><a id="SP39"></a><b>§39. </b>Now some exceptional forms where consonant doubling doesn't occur:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -1792,7 +1725,7 @@ from the act of producing a song.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*daub</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> daubing, bedaubing</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="SP42"></a><b>§42. </b>And now rules for consonant doubling:
|
||||
<p class="commentary firstcommentary"><a id="SP40"></a><b>§40. </b>And now rules for consonant doubling:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -1844,7 +1777,7 @@ from the act of producing a song.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*iz</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0zing</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="SP43"></a><b>§43. </b>Finally:
|
||||
<p class="commentary firstcommentary"><a id="SP41"></a><b>§41. </b>Finally:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -1858,7 +1791,7 @@ from the act of producing a song.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ing</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="SP44"></a><b>§44. </b>Next the past participle. As noted above, for most verbs this is the same
|
||||
<p class="commentary firstcommentary"><a id="SP42"></a><b>§42. </b>Next the past participle. As noted above, for most verbs this is the same
|
||||
as the past (e.g., he agreed and it was agreed); but there's a list of
|
||||
exceptions for Anglo-Saxon survivals (e.g., he chose and it was chosen).
|
||||
The exceptional cases were derived from Wikipedia's catalogue of irregular
|
||||
|
@ -2025,7 +1958,7 @@ removed.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">write</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">written</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="SP45"></a><b>§45. </b>That's the mandatory participles sorted out; so now we move on to the two
|
||||
<p class="commentary firstcommentary"><a id="SP43"></a><b>§43. </b>That's the mandatory participles sorted out; so now we move on to the two
|
||||
additional verb forms used by English. First, the present form: a curiosity
|
||||
of English is that this is almost always formed as if it were the plural of the
|
||||
infinitive — thus "touch" becomes "touches". There are just a handful
|
||||
|
@ -2043,7 +1976,7 @@ of exceptions to this.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">does</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="SP46"></a><b>§46. </b>Second, the past. This is harder. Once again we have a catalogue of
|
||||
<p class="commentary firstcommentary"><a id="SP44"></a><b>§44. </b>Second, the past. This is harder. Once again we have a catalogue of
|
||||
Anglo-Saxon past forms (e.g., he chose, not he chooses); and after those
|
||||
are out of the way, the rules are the same as for the present participle,
|
||||
except for adding -ed instead of -ing. The tricky part, again, is spotting
|
||||
|
@ -2676,7 +2609,7 @@ when to double the consonant, which again depends on stress.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ed</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="SP47"></a><b>§47. Present to past participles. </b>Sentences like
|
||||
<p class="commentary firstcommentary"><a id="SP45"></a><b>§45. Present to past participles. </b>Sentences like
|
||||
</p>
|
||||
|
||||
<blockquote>
|
||||
|
@ -3185,7 +3118,7 @@ cases followed by two general rules.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3ed</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> e.g., "smashing" to "smashed"</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="SP48"></a><b>§48. Adjective agreements. </b>English doesn't inflect adjectives at all (let's not argue about "blond"
|
||||
<p class="commentary firstcommentary"><a id="SP46"></a><b>§46. Adjective agreements. </b>English doesn't inflect adjectives at all (let's not argue about "blond"
|
||||
and "blonde"), so the following are just stubs.
|
||||
</p>
|
||||
|
||||
|
@ -3206,7 +3139,7 @@ and "blonde"), so the following are just stubs.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</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="SP49"></a><b>§49. </b>Grading of adjectives is more interesting. These spelling rules are taken
|
||||
<p class="commentary firstcommentary"><a id="SP47"></a><b>§47. </b>Grading of adjectives is more interesting. These spelling rules are taken
|
||||
from the Oxford English Grammar at 4.24, "Gradability and comparison".
|
||||
Something we can't easily implement is that a final vowel plus consonant
|
||||
doesn't result in doubling the consonant (in the way that "big" becomes
|
||||
|
@ -3238,7 +3171,7 @@ rare in English adjectives.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0est</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="SP50"></a><b>§50. </b>To the best of my knowledge there's no technical term for "the noun which
|
||||
<p class="commentary firstcommentary"><a id="SP48"></a><b>§48. </b>To the best of my knowledge there's no technical term for "the noun which
|
||||
is formed from an adjective to refer to the quality it measures", so the
|
||||
Inform source code calls this the "quiddity". English permits several
|
||||
competing forms of these to be constructed, depending on the adjective's
|
||||
|
@ -3258,7 +3191,7 @@ sometimes less elegant, but never means the wrong thing.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ness</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="SP51"></a><b>§51. </b>English has almost no noun cases at all, with the only exceptions being
|
||||
<p class="commentary firstcommentary"><a id="SP49"></a><b>§49. </b>English has almost no noun cases at all, with the only exceptions being
|
||||
Anglo-Saxon pronouns (thus we distinguish "they" and "them" as nominative
|
||||
and accusative, for example); and pronouns we handle separately in any
|
||||
case. We won't bother to distinguish gender:
|
||||
|
@ -3272,7 +3205,7 @@ case. We won't bother to distinguish gender:
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-noun-declension-group></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-noun-declension-tables></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="SP52"></a><b>§52. </b>And the sorting into groups sorts everything into "group 1", the only group:
|
||||
<p class="commentary firstcommentary"><a id="SP50"></a><b>§50. </b>And the sorting into groups sorts everything into "group 1", the only group:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -3283,7 +3216,7 @@ case. We won't bother to distinguish gender:
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-noun-declension-uninflected></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="SP53"></a><b>§53. </b>And in this single group, nominative and accusative forms are identical
|
||||
<p class="commentary firstcommentary"><a id="SP51"></a><b>§51. </b>And in this single group, nominative and accusative forms are identical
|
||||
to the stem in both singular and plural.
|
||||
</p>
|
||||
|
||||
|
@ -3293,7 +3226,7 @@ to the stem in both singular and plural.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</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="SP54"></a><b>§54. </b>English articles only inflect slightly, to show indefinite plurals; they
|
||||
<p class="commentary firstcommentary"><a id="SP52"></a><b>§52. </b>English articles only inflect slightly, to show indefinite plurals; they
|
||||
don't distinguish nominative from accusative.
|
||||
</p>
|
||||
|
||||
|
@ -3309,7 +3242,7 @@ don't distinguish nominative from accusative.
|
|||
</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>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-vc.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">ei</li><li class="progressnextoff">❯</li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-vc.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-ld.html">2</a></li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">ei</li><li class="progressnextoff">❯</li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
99
docs/inflections-module/P-htitm.html
Normal file
99
docs/inflections-module/P-htitm.html
Normal file
|
@ -0,0 +1,99 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>How To Include This Module</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
||||
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class="commentary-font">
|
||||
<nav role="navigation">
|
||||
<h1><a href="../index.html">
|
||||
<img src="../docs-assets/Inform.png" height=72">
|
||||
</a></h1>
|
||||
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
||||
<li><a href="../other.html">other tools</a></li>
|
||||
<li><a href="../extensions.html">extensions and kits</a></li>
|
||||
<li><a href="../units.html">unit test tools</a></li>
|
||||
</ul><h2>Compiler Webs</h2><ul>
|
||||
<li><a href="../inbuild/index.html">inbuild</a></li>
|
||||
<li><a href="../inform7/index.html">inform7</a></li>
|
||||
<li><a href="../inter/index.html">inter</a></li>
|
||||
</ul><h2>Inbuild Modules</h2><ul>
|
||||
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
||||
</ul><h2>Inform7 Modules</h2><ul>
|
||||
<li><a href="../core-module/index.html">core</a></li>
|
||||
<li><a href="../kinds-module/index.html">kinds</a></li>
|
||||
<li><a href="../if-module/index.html">if</a></li>
|
||||
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
||||
<li><a href="../index-module/index.html">index</a></li>
|
||||
</ul><h2>Inter Modules</h2><ul>
|
||||
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
||||
<li><a href="../building-module/index.html">building</a></li>
|
||||
<li><a href="../codegen-module/index.html">codegen</a></li>
|
||||
</ul><h2>Services</h2><ul>
|
||||
<li><a href="../arch-module/index.html">arch</a></li>
|
||||
<li><a href="../syntax-module/index.html">syntax</a></li>
|
||||
<li><a href="../words-module/index.html">words</a></li>
|
||||
<li><a href="../html-module/index.html">html</a></li>
|
||||
<li><a href="index.html"><span class="selectedlink">inflections</span></a></li>
|
||||
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
||||
<li><a href="../problems-module/index.html">problems</a></li>
|
||||
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'How To Include This Module' 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">inflections</a></li><li><a href="index.html#P">Preliminaries</a></li><li><b>How To Include This Module</b></li></ul></div>
|
||||
<p class="purpose">What to do to make use of the inflections module in a new command-line tool.</p>
|
||||
|
||||
<ul class="toc"><li><a href="P-htitm.html#SP1">§1. Status</a></li><li><a href="P-htitm.html#SP2">§2. Importing the module</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Status. </b>The inflections module is provided as one of the "services" suite of modules,
|
||||
which means that it was built with a view to potential incorporation in
|
||||
multiple tools. It can be found, for example, in <a href="../inform7/index.html" class="internal">inform7</a> and
|
||||
<a href="../inflections-test/index.html" class="internal">inflections-test</a>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">By convention, the modules considered as "services" have no dependencies on
|
||||
other modules except for <a href="../../../inweb/docs/foundation-module/index.html" class="internal">foundation</a> and other "services" modules.
|
||||
</p>
|
||||
|
||||
<p class="commentary">A tool can import <a href="index.html" class="internal">inflections</a> only if it also imports <a href="../../../inweb/docs/foundation-module/index.html" class="internal">foundation</a>,
|
||||
<a href="../words-module/index.html" class="internal">words</a> and <a href="../syntax-module/index.html" class="internal">syntax</a>.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. Importing the module. </b>We'll use the term "parent" to mean the tool which is importing <a href="index.html" class="internal">inflections</a>,
|
||||
that is, which will include its code and be able to use it. As with any
|
||||
imported module,
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● The contents page of the parent's web must identify and locate the
|
||||
module:
|
||||
</li></ul>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="element-syntax">Import</span><span class="plain-syntax">:</span><span class="string-syntax"> somepath/inflections</span>
|
||||
</pre>
|
||||
<ul class="items"><li>● The parent must call <span class="extract"><span class="extract-syntax">InflectionsModule::start()</span></span> just after it starts up, and
|
||||
<span class="extract"><span class="extract-syntax">InflectionsModule::end()</span></span> just before it shuts down. (But just after, and just
|
||||
before, the corresponding calls to <a href="../../../inweb/docs/foundation-module/index.html" class="internal">foundation</a>.)
|
||||
</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="P-wtmd.html">❮</a></li><li class="progresscurrentchapter">P</li><li class="progresssection"><a href="P-wtmd.html">wtmd</a></li><li class="progresscurrent">htitm</li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="1-im.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
191
docs/inflections-module/P-wtmd.html
Normal file
191
docs/inflections-module/P-wtmd.html
Normal file
|
@ -0,0 +1,191 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>What This Module Does</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
||||
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class="commentary-font">
|
||||
<nav role="navigation">
|
||||
<h1><a href="../index.html">
|
||||
<img src="../docs-assets/Inform.png" height=72">
|
||||
</a></h1>
|
||||
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
||||
<li><a href="../other.html">other tools</a></li>
|
||||
<li><a href="../extensions.html">extensions and kits</a></li>
|
||||
<li><a href="../units.html">unit test tools</a></li>
|
||||
</ul><h2>Compiler Webs</h2><ul>
|
||||
<li><a href="../inbuild/index.html">inbuild</a></li>
|
||||
<li><a href="../inform7/index.html">inform7</a></li>
|
||||
<li><a href="../inter/index.html">inter</a></li>
|
||||
</ul><h2>Inbuild Modules</h2><ul>
|
||||
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
||||
</ul><h2>Inform7 Modules</h2><ul>
|
||||
<li><a href="../core-module/index.html">core</a></li>
|
||||
<li><a href="../kinds-module/index.html">kinds</a></li>
|
||||
<li><a href="../if-module/index.html">if</a></li>
|
||||
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
||||
<li><a href="../index-module/index.html">index</a></li>
|
||||
</ul><h2>Inter Modules</h2><ul>
|
||||
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
||||
<li><a href="../building-module/index.html">building</a></li>
|
||||
<li><a href="../codegen-module/index.html">codegen</a></li>
|
||||
</ul><h2>Services</h2><ul>
|
||||
<li><a href="../arch-module/index.html">arch</a></li>
|
||||
<li><a href="../syntax-module/index.html">syntax</a></li>
|
||||
<li><a href="../words-module/index.html">words</a></li>
|
||||
<li><a href="../html-module/index.html">html</a></li>
|
||||
<li><a href="index.html"><span class="selectedlink">inflections</span></a></li>
|
||||
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
||||
<li><a href="../problems-module/index.html">problems</a></li>
|
||||
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'What This Module Does' 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">inflections</a></li><li><a href="index.html#P">Preliminaries</a></li><li><b>What This Module Does</b></li></ul></div>
|
||||
<p class="purpose">An overview of the inflections module's role and abilities.</p>
|
||||
|
||||
<ul class="toc"><li><a href="P-wtmd.html#SP1">§1. Prerequisites</a></li><li><a href="P-wtmd.html#SP2">§2. Inflections</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Prerequisites. </b>The inflections module is a part of the Inform compiler toolset. It is
|
||||
presented as a literate program or "web". Before diving in:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>(a) It helps to have some experience of reading webs: see <a href="../../../inweb/docs/index.html" class="internal">inweb</a> for more.
|
||||
</li><li>(b) The module is written in C, in fact ANSI C99, but this is disguised by the
|
||||
fact that it uses some extension syntaxes provided by the <a href="../../../inweb/docs/index.html" class="internal">inweb</a> literate
|
||||
programming tool, making it a dialect of C called InC. See <a href="../../../inweb/docs/index.html" class="internal">inweb</a> for
|
||||
full details, but essentially: it's C without predeclarations or header files,
|
||||
and where functions have names like <span class="extract"><span class="extract-syntax">Tags::add_by_name</span></span> rather than <span class="extract"><span class="extract-syntax">add_by_name</span></span>.
|
||||
</li><li>(c) This module uses other modules drawn from the <a href="../compiler.html" class="internal">compiler</a>, and also
|
||||
uses a module of utility functions called <a href="../../../inweb/docs/foundation-module/index.html" class="internal">foundation</a>.
|
||||
For more, see <a href="../../../inweb/docs/foundation-module/P-abgtf.html" class="internal">A Brief Guide to Foundation (in foundation)</a>.
|
||||
</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. Inflections. </b>Inflections are modifications of words — usually word endings or beginnings —
|
||||
for different circumstances. English is often called an uninflected language,
|
||||
but this is an exaggeration. For example, we spell the word "tree" as
|
||||
"trees" when we refer to more than one of them. Inform sometimes needs
|
||||
to take text in one form and change it to another — for example, to turn
|
||||
a singular noun into a plural one — and ordinary Preform parsing isn't good
|
||||
enough to express this.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Inform uses a data structure called a "trie" as an efficient way to match
|
||||
prefix and/or suffix patterns in words, and then to modify them.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Tries are provided as basic data structures by <a href="../../../inweb/docs/foundation-module/4-taa.html" class="internal">Tries and Avinues (in foundation)</a>,
|
||||
and the code for initialising them from Preform grammar is provided by
|
||||
<a href="../words-module/4-pu.html" class="internal">Preform Utilities (in words)</a>.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>Though tries are, as just mentioned, created from Preform grammar, they're
|
||||
parsed quite differently. The rules are as follows:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>(a) A nonterminal in trie grammar can either be a list of other tries, or it
|
||||
can be a list of inflection rules. Mixtures of the two are not allowed. For
|
||||
example <singular-noun-to-its-indefinite-article> is a list of other tries,
|
||||
while <en-trie-indef-a> contains actual rules.
|
||||
</li><li>(b) In a list of tries, each production consists only of a single nonterminal
|
||||
identifying the trie to make use of. One exception: writing <span class="extract"><span class="extract-syntax">...</span></span> before the
|
||||
trie's name makes it work on the end of a word instead of the beginning.
|
||||
Inform attempts to find a match using each trie in turn, until a match is
|
||||
found. For example:
|
||||
</li></ul>
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><fiddle-with-words></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><fiddle-with-exceptions></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><fiddle-with-irregular-endings></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><fiddle-with-regular-endings></span>
|
||||
</pre>
|
||||
<p class="commentary">means try <fiddle-with-exceptions> first (on the whole word), then
|
||||
<fiddle-with-irregular-endings> (on the tail), and finally <fiddle-with-regular-endings>
|
||||
(also on the tail).
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>(c) In a list of inflection rules, each production consists of two words. The
|
||||
first word is what to match; the second gives instructions on what to turn
|
||||
it into. An asterisk is used to mean "any string of 0 or more letters";
|
||||
a digit in the replacement text means "truncate by this many letters and
|
||||
add...". (As a special case, the replacement text "0" means: make no
|
||||
change.) Some examples:
|
||||
</li></ul>
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><pluralise></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">lead</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">lead</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">codex</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">codices</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*mouse</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">5mice</span>
|
||||
</pre>
|
||||
<p class="commentary">This would pluralise "lead" as "lead", "codex" as "codices", "mouse" as "mice",
|
||||
and "fieldmouse" as "fieldmice".
|
||||
</p>
|
||||
|
||||
<p class="commentary">Designing a trie is not quite as easy as it looks. It looks as if this is a
|
||||
sequence of tests to perform in succession, but it's better to think of the
|
||||
rules all being performed at once. In general, if you need one inflection
|
||||
rule to take precedence over another, put it in an earlier trie, rather than
|
||||
putting it earlier in the same trie.
|
||||
</p>
|
||||
|
||||
<p class="commentary">For the implementation of these rules, see <a href="2-tai.html" class="internal">Tries and Inflections</a>.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>Once we have that general inflection machinery, most of what we need to
|
||||
do becomes a simple matter of writing wrapper functions for tries.
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● <a href="3-ai.html#SP1" class="internal">ArticleInflection::preface_by_article</a> handles the variation of articles:
|
||||
for example, mutating "a" to "an" when it comes before "orange", thus making
|
||||
"an orange" rather than "a orange".
|
||||
</li><li>● <a href="3-ga.html#SP2" class="internal">Grading::make_comparative</a> turns "tall" into "taller".
|
||||
</li><li>● <a href="3-ga.html#SP3" class="internal">Grading::make_superlative</a> turns "tall" into "tallest".
|
||||
</li><li>● <a href="3-ga.html#SP4" class="internal">Grading::make_quiddity</a> turns "tall" into "tallness".
|
||||
</li><li>● <a href="3-pp.html#SP1" class="internal">PastParticiples::pasturise_wording</a> turns "looking away" to "looked away".
|
||||
</li><li>● <a href="3-plr.html#SP3" class="internal">Pluralisation::make</a> produces a series of allowable plurals for a
|
||||
word, using a combination of a trie to handle regular pluralisation (for
|
||||
English, we use Conway's algorithm) and a dictionary of user-supplied
|
||||
exceptions.
|
||||
</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>Tries are highly language specific and should not be translated as such:
|
||||
instead, an appropriate version needs to be written for every language.
|
||||
The tries for English are in <a href="4-ei.html" class="internal">English Inflections</a>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Except at the very top level, translators are free to created new tries
|
||||
and name them as they please. For example, the Spanish implementation of
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><singular-noun-to-its-indefinite-article></span>
|
||||
</pre>
|
||||
<p class="commentary">may look entirely unlike its English version, but at the top level it still
|
||||
has to have that name.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Lower-level tries used in the implementation should have names beginning
|
||||
with a language code: hence the names "en-" used in <a href="4-ei.html" class="internal">English Inflections</a>.
|
||||
</p>
|
||||
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprevoff">❮</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresssection"><a href="P-htitm.html">htitm</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="P-htitm.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -56,6 +56,22 @@
|
|||
<hr>
|
||||
<div class="contentspage">
|
||||
<ul class="chapterlist">
|
||||
<li>
|
||||
<p class="chapterentry"><a name="P"></a>
|
||||
<span class="chaptertitle">Preliminaries</span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p class="sectionentry"><a href="P-wtmd.html">
|
||||
<spon class="sectiontitle">What This Module Does</span></a> -
|
||||
<span class="sectionpurpose">An overview of the inflections module's role and abilities.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="P-htitm.html">
|
||||
<spon class="sectiontitle">How To Include This Module</span></a> -
|
||||
<span class="sectionpurpose">What to do to make use of the inflections module in a new command-line tool.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a name="1"></a>
|
||||
<span class="chaptertitle">Chapter 1: Starting Up</span></p>
|
||||
|
@ -81,11 +97,6 @@
|
|||
<spon class="sectiontitle">Tries and Inflections</span></a> -
|
||||
<span class="sectionpurpose">Using tries to inflect word endings.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="2-nc.html">
|
||||
<spon class="sectiontitle">Name Clusters</span></a> -
|
||||
<span class="sectionpurpose">Name clusters are sets of noun or adjective forms, perhaps multiple or in multiple languages, which have in common that they share a meaning.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
|
@ -102,6 +113,11 @@
|
|||
<spon class="sectiontitle">Declensions</span></a> -
|
||||
<span class="sectionpurpose">Declensions are sets of inflected variations of a common stem according to grammatical case.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-nc.html">
|
||||
<spon class="sectiontitle">Name Clusters</span></a> -
|
||||
<span class="sectionpurpose">Name clusters are sets of noun or adjective forms, perhaps multiple or in multiple languages, which have in common that they share a meaning.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-plr.html">
|
||||
<spon class="sectiontitle">Pluralisation</span></a> -
|
||||
|
|
|
@ -65,9 +65,9 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../words-module/3-lxr.html#SP20" class="function-link"><span class="function-syntax">Lexer::word</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="identifier-syntax">PARBREAK_V</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><a href="../words-module/3-wrd.html#SP6" class="function-link"><span class="function-syntax">Wordings::one_word</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">PRINT</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><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"comparative: %W, "</span><span class="plain-syntax">, </span><a href="../inflections-module/3-ga.html#SP2" class="function-link"><span class="function-syntax">Grading::make_comparative</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"superlative: %W, "</span><span class="plain-syntax">, </span><a href="../inflections-module/3-ga.html#SP2" class="function-link"><span class="function-syntax">Grading::make_superlative</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"quiddity: %W\n"</span><span class="plain-syntax">, </span><a href="../inflections-module/3-ga.html#SP3" class="function-link"><span class="function-syntax">Grading::make_quiddity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"comparative: %W, "</span><span class="plain-syntax">, </span><a href="../inflections-module/3-ga.html#SP2" class="function-link"><span class="function-syntax">Grading::make_comparative</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><a href="../inflections-module/2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><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">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"superlative: %W, "</span><span class="plain-syntax">, </span><a href="../inflections-module/3-ga.html#SP3" class="function-link"><span class="function-syntax">Grading::make_superlative</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><a href="../inflections-module/2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><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">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"quiddity: %W\n"</span><span class="plain-syntax">, </span><a href="../inflections-module/3-ga.html#SP4" class="function-link"><span class="function-syntax">Grading::make_quiddity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><a href="../inflections-module/2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -86,7 +86,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</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><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">AT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../inflections-module/3-ai.html#SP1" class="function-link"><span class="function-syntax">ArticleInflection::preface_by_article</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">AT</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../inflections-module/3-ai.html#SP1" class="function-link"><span class="function-syntax">ArticleInflection::preface_by_article</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">AT</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><a href="../inflections-module/2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><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">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"%S --> %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">AT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">AT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">);</span>
|
||||
|
@ -113,12 +113,12 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../words-module/3-lxr.html#SP20" class="function-link"><span class="function-syntax">Lexer::word</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="identifier-syntax">f_V</span><span class="plain-syntax">) { </span><span class="identifier-syntax">gen</span><span class="plain-syntax"> = </span><span class="constant-syntax">FEMININE_GENDER</span><span class="plain-syntax">; </span><span class="reserved-syntax">continue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../words-module/3-lxr.html#SP20" class="function-link"><span class="function-syntax">Lexer::word</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">) == </span><span class="identifier-syntax">n_V</span><span class="plain-syntax">) { </span><span class="identifier-syntax">gen</span><span class="plain-syntax"> = </span><span class="constant-syntax">NEUTER_GENDER</span><span class="plain-syntax">; </span><span class="reserved-syntax">continue</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><a href="../words-module/3-wrd.html#SP6" class="function-link"><span class="function-syntax">Wordings::one_word</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">declension</span><span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><a href="../inflections-module/3-dcl.html#SP2" class="function-link"><span class="function-syntax">Declensions::decline</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</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">declension</span><span class="plain-syntax"> </span><span class="identifier-syntax">AD</span><span class="plain-syntax"> = </span><a href="../inflections-module/3-dcl.html#SP2" class="function-link"><span class="function-syntax">Declensions::decline_article</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</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">declension</span><span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><a href="../inflections-module/3-dcl.html#SP2" class="function-link"><span class="function-syntax">Declensions::decline</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><a href="../inflections-module/2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">), </span><span class="identifier-syntax">gen</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">declension</span><span class="plain-syntax"> </span><span class="identifier-syntax">AD</span><span class="plain-syntax"> = </span><a href="../inflections-module/3-dcl.html#SP2" class="function-link"><span class="function-syntax">Declensions::decline_article</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">, </span><a href="../inflections-module/2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">), </span><span class="identifier-syntax">gen</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">PRINT</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><a href="../inflections-module/3-dcl.html#SP3" class="function-link"><span class="function-syntax">Declensions::writer</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">, &</span><span class="identifier-syntax">D</span><span class="plain-syntax">, &</span><span class="identifier-syntax">AD</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><a href="../inflections-module/3-dcl.html#SP2" class="function-link"><span class="function-syntax">Declensions::decline</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">AD</span><span class="plain-syntax"> = </span><a href="../inflections-module/3-dcl.html#SP2" class="function-link"><span class="function-syntax">Declensions::decline_article</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">, </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><a href="../inflections-module/3-dcl.html#SP2" class="function-link"><span class="function-syntax">Declensions::decline</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><a href="../inflections-module/2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">), </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">AD</span><span class="plain-syntax"> = </span><a href="../inflections-module/3-dcl.html#SP2" class="function-link"><span class="function-syntax">Declensions::decline_article</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">, </span><a href="../inflections-module/2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">), </span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"pl --> "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../inflections-module/3-dcl.html#SP3" class="function-link"><span class="function-syntax">Declensions::writer</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">, &</span><span class="identifier-syntax">D</span><span class="plain-syntax">, &</span><span class="identifier-syntax">AD</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
||||
|
@ -157,7 +157,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">G</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">G</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><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">ASAGIG</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../inflections-module/3-plr.html#SP4" class="function-link"><span class="function-syntax">Pluralisation::regular</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ASAGIG</span><span class="plain-syntax">, </span><span class="identifier-syntax">G</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../inflections-module/3-plr.html#SP4" class="function-link"><span class="function-syntax">Pluralisation::regular</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ASAGIG</span><span class="plain-syntax">, </span><span class="identifier-syntax">G</span><span class="plain-syntax">, </span><a href="../inflections-module/2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><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">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"%S --> %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">G</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASAGIG</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">ASAGIG</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">G</span><span class="plain-syntax">);</span>
|
||||
|
@ -180,7 +180,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</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">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Verb %W -->\n"</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">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../inflections-module/3-vc.html#SP13" class="function-link"><span class="function-syntax">Conjugation::test</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">English_language</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="../inflections-module/3-vc.html#SP13" class="function-link"><span class="function-syntax">Conjugation::test</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><a href="../inflections-module/2-ld.html#SP7" class="function-link"><span class="function-syntax">InflectionDefns::default_nl</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="../../../inweb/docs/foundation-module/4-pm.html#SP14" class="function-link"><span class="function-syntax">Regexp::replace</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"%^"</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"\n"</span><span class="plain-syntax">, </span><span class="constant-syntax">REP_REPEATING</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"%S\n"</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">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -599,7 +599,7 @@ so on. For example:
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::Textual::write_articled</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-dk.html#SP24" class="function-link"><span class="function-syntax">Kinds::Textual::write_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><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="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ArticleInflection::preface_by_article</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ArticleInflection::preface_by_article</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">InflectionDefns::default_nl</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">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -184,9 +184,10 @@ we add a new one.
|
|||
<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="3-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">individual_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</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">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="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">in</span><span class="plain-syntax">; </span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</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="reserved-syntax">excerpt_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">em</span><span class="plain-syntax"> = </span><a href="2-em.html#SP15" class="function-link"><span class="function-syntax">ExcerptMeanings::register</span></a><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>
|
||||
|
|
|
@ -139,7 +139,7 @@ time".
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">": <invalid-units>"</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tp</span><span class="plain-syntax">-></span><span class="element-syntax">tense</span><span class="plain-syntax"> != </span><span class="identifier-syntax">IS_TENSE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">": "</span><span class="plain-syntax">); </span><span class="identifier-syntax">Linguistics::log_tense_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">tp</span><span class="plain-syntax">-></span><span class="element-syntax">tense</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">": "</span><span class="plain-syntax">); </span><span class="identifier-syntax">InflectionDefns::log_tense_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">tp</span><span class="plain-syntax">-></span><span class="element-syntax">tense</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">">"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -449,7 +449,7 @@ list, with lower priority numbers before higher ones.
|
|||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">VerbUsages::is_foreign</span><span class="plain-syntax">(</span><span class="reserved-syntax">verb_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vu</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-></span><span class="element-syntax">verb_used</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-></span><span class="element-syntax">verb_used</span><span class="plain-syntax">-></span><span class="element-syntax">conjugation</span><span class="plain-syntax">-></span><span class="identifier-syntax">defined_in</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-></span><span class="element-syntax">verb_used</span><span class="plain-syntax">-></span><span class="element-syntax">conjugation</span><span class="plain-syntax">-></span><span class="identifier-syntax">defined_in</span><span class="plain-syntax"> != </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-></span><span class="element-syntax">verb_used</span><span class="plain-syntax">-></span><span class="element-syntax">conjugation</span><span class="plain-syntax">-></span><span class="identifier-syntax">defined_in</span><span class="plain-syntax"> != </span><span class="identifier-syntax">InflectionDefns::default_nl</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">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -115,7 +115,7 @@ any text but then fail.
|
|||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><stock></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">verb</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></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]; *XP = Conjugation::conjugate(WordAssemblages::from_wording(FW[1]), English_language);</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">verb</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></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]; *XP = Conjugation::conjugate(WordAssemblages::from_wording(FW[1]), InflectionDefns::default_nl(NULL));</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. Syntax tree. </b></p>
|
||||
|
|
|
@ -184,7 +184,7 @@ detect the language of play for a story file without actually running it.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Languages::write_ISO_code</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">inform_language</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">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">L</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">English_language</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">L</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InflectionDefns::default_nl</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> </span><span class="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">L</span><span class="plain-syntax">-></span><span class="element-syntax">language_field</span><span class="plain-syntax">[</span><span class="constant-syntax">ISO_639_CODE_LFIELD</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">L</span><span class="plain-syntax">-></span><span class="element-syntax">language_field</span><span class="plain-syntax">[</span><span class="constant-syntax">ISO_639_CODE_LFIELD</span><span class="plain-syntax">]);</span>
|
||||
|
|
368
docs/words-module/4-pu.html
Normal file
368
docs/words-module/4-pu.html
Normal file
|
@ -0,0 +1,368 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Preform Utilities</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
||||
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<script>
|
||||
function togglePopup(material_id) {
|
||||
var popup = document.getElementById(material_id);
|
||||
popup.classList.toggle("show");
|
||||
}
|
||||
</script>
|
||||
|
||||
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class="commentary-font">
|
||||
<nav role="navigation">
|
||||
<h1><a href="../index.html">
|
||||
<img src="../docs-assets/Inform.png" height=72">
|
||||
</a></h1>
|
||||
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
||||
<li><a href="../other.html">other tools</a></li>
|
||||
<li><a href="../extensions.html">extensions and kits</a></li>
|
||||
<li><a href="../units.html">unit test tools</a></li>
|
||||
</ul><h2>Compiler Webs</h2><ul>
|
||||
<li><a href="../inbuild/index.html">inbuild</a></li>
|
||||
<li><a href="../inform7/index.html">inform7</a></li>
|
||||
<li><a href="../inter/index.html">inter</a></li>
|
||||
</ul><h2>Inbuild Modules</h2><ul>
|
||||
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
||||
</ul><h2>Inform7 Modules</h2><ul>
|
||||
<li><a href="../core-module/index.html">core</a></li>
|
||||
<li><a href="../kinds-module/index.html">kinds</a></li>
|
||||
<li><a href="../if-module/index.html">if</a></li>
|
||||
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
||||
<li><a href="../index-module/index.html">index</a></li>
|
||||
</ul><h2>Inter Modules</h2><ul>
|
||||
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
||||
<li><a href="../building-module/index.html">building</a></li>
|
||||
<li><a href="../codegen-module/index.html">codegen</a></li>
|
||||
</ul><h2>Services</h2><ul>
|
||||
<li><a href="../arch-module/index.html">arch</a></li>
|
||||
<li><a href="../syntax-module/index.html">syntax</a></li>
|
||||
<li><a href="index.html"><span class="selectedlink">words</span></a></li>
|
||||
<li><a href="../html-module/index.html">html</a></li>
|
||||
<li><a href="../inflections-module/index.html">inflections</a></li>
|
||||
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
||||
<li><a href="../problems-module/index.html">problems</a></li>
|
||||
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'Preform Utilities' 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">words</a></li><li><a href="index.html#4">Chapter 4: Parsing</a></li><li><b>Preform Utilities</b></li></ul></div>
|
||||
<p class="purpose">Other uses for Preform grammar, including the generation of adaptive text, and word inflection.</p>
|
||||
|
||||
<ul class="toc"><li><a href="4-pu.html#SP1">§1. Specifying generated text</a></li><li><a href="4-pu.html#SP4">§4. Specifying replacements</a></li><li><a href="4-pu.html#SP5">§5. Lexicon entry</a></li><li><a href="4-pu.html#SP6">§6. Making tries</a></li><li><a href="4-pu.html#SP8">§8. Errors</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Specifying generated text. </b>Our main operation here is a "merge". This extracts the text from a production,
|
||||
substituting the ingredient text in place of any <span class="extract"><span class="extract-syntax">...</span></span> it finds. (Other
|
||||
wildcards and nonterminals are ignored.) For example, merging the production
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">fried</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">tomatoes</span>
|
||||
</pre>
|
||||
<p class="commentary">with "orange" results in "fried orange tomatoes".
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="function-syntax">PreformUtilities::merge</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">PreformUtilities::merge</span></span>:<br/><a href="4-pu.html#SP2">§2</a>, <a href="4-pu.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</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">pnum</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">ingredient</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">next_pl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">first_pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">next_pr</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax"> == </span><span class="identifier-syntax">pnum</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><a href="2-wa.html#SP5" class="function-link"><span class="function-syntax">WordAssemblages::lit_0</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</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">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_pt</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><a href="2-wa.html#SP6" class="function-link"><span class="function-syntax">WordAssemblages::join</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><a href="2-wa.html#SP5" class="function-link"><span class="function-syntax">WordAssemblages::lit_1</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">MULTIPLE_WILDCARD_PTC</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><a href="2-wa.html#SP6" class="function-link"><span class="function-syntax">WordAssemblages::join</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">ingredient</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">wa</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-wa.html#SP5" class="function-link"><span class="function-syntax">WordAssemblages::lit_0</span></a><span class="plain-syntax">(); </span><span class="comment-syntax"> give up, in other words</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>Thus we can simply extract the wording by performing a merge with the empty
|
||||
ingredient text:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="function-syntax">PreformUtilities::wording</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</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">pnum</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-pu.html#SP1" class="function-link"><span class="function-syntax">PreformUtilities::merge</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pnum</span><span class="plain-syntax">, </span><a href="2-wa.html#SP5" class="function-link"><span class="function-syntax">WordAssemblages::lit_0</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>And here we take just one word:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">PreformUtilities::word</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</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">pnum</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = </span><a href="4-pu.html#SP1" class="function-link"><span class="function-syntax">PreformUtilities::merge</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pnum</span><span class="plain-syntax">, </span><a href="2-wa.html#SP5" class="function-link"><span class="function-syntax">WordAssemblages::lit_0</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> **</span><span class="identifier-syntax">words</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">num_words</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="2-wa.html#SP9" class="function-link"><span class="function-syntax">WordAssemblages::as_array</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, &</span><span class="identifier-syntax">words</span><span class="plain-syntax">, &</span><span class="identifier-syntax">num_words</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">num_words</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">words</span><span class="plain-syntax">[0];</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. Specifying replacements. </b>The following looks for a word in one nonterminal and returns the
|
||||
corresponding word in another. If the word isn't found, it's left unchanged.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="function-syntax">PreformUtilities::find_corresponding_word</span><span class="plain-syntax">(</span><span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ve</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt_from</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt_to</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt_from</span><span class="plain-syntax">-></span><span class="element-syntax">first_pl</span><span class="plain-syntax">, *</span><span class="identifier-syntax">pl_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt_to</span><span class="plain-syntax">-></span><span class="element-syntax">first_pl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">pl_from</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pl_to</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pl_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl_from</span><span class="plain-syntax">-></span><span class="element-syntax">next_pl</span><span class="plain-syntax">, </span><span class="identifier-syntax">pl_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl_to</span><span class="plain-syntax">-></span><span class="element-syntax">next_pl</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl_from</span><span class="plain-syntax">-></span><span class="element-syntax">first_pr</span><span class="plain-syntax">, *</span><span class="identifier-syntax">pr_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl_to</span><span class="plain-syntax">-></span><span class="element-syntax">first_pr</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">pr_from</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pr_to</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr_from</span><span class="plain-syntax">-></span><span class="element-syntax">next_pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr_to</span><span class="plain-syntax">-></span><span class="element-syntax">next_pr</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr_from</span><span class="plain-syntax">-></span><span class="element-syntax">first_pt</span><span class="plain-syntax">, *</span><span class="identifier-syntax">pt_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr_to</span><span class="plain-syntax">-></span><span class="element-syntax">first_pt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">pt_from</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt_to</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pt_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt_from</span><span class="plain-syntax">-></span><span class="element-syntax">next_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt_to</span><span class="plain-syntax">-></span><span class="element-syntax">next_pt</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pt_from</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">pt_to</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ve</span><span class="plain-syntax"> == </span><span class="identifier-syntax">pt_from</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</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">pt_to</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</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">ve</span><span class="plain-syntax">; </span><span class="comment-syntax"> no change, in other words</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. Lexicon entry. </b>This is only a convenience for putting particles into the Lexicon:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">PreformUtilities::enter_lexicon</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</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">pos</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">category</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gloss</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">next_pl</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">first_pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">next_pr</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_pt</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_ptoken</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Index::Lexicon::new_entry_with_details</span><span class="plain-syntax">(</span><span class="constant-syntax">EMPTY_WORDING</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-wa.html#SP5" class="function-link"><span class="function-syntax">WordAssemblages::lit_1</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</span><span class="plain-syntax">), </span><span class="identifier-syntax">category</span><span class="plain-syntax">, </span><span class="identifier-syntax">gloss</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. Making tries. </b>Properly speaking, we make "avinues". Note that we expect to make a different
|
||||
avinue for each natural language; this matters so that we can pluralise words
|
||||
correctly in both English and French in the same run of Inform, for example.
|
||||
But we are going to need to use these avinues frequently, so we cache them once
|
||||
created.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">match_avinue</span><span class="plain-syntax"> *</span><span class="function-syntax">PreformUtilities::define_trie</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">PreformUtilities::define_trie</span></span>:<br/><a href="4-pu.html#SP6_1_1_2">§6.1.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</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">end</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-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="identifier-syntax">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ave</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">next_pl</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">definition_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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">as_avinue</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">as_avinue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pu.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Construct a new avinue from this nonterminal</span><span class="named-paragraph-number">6.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">as_avinue</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ave</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">ave</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6_1"></a><b>§6.1. </b>The grammar for this nonterminal is either a "list grammar", meaning that it
|
||||
lists other nonterminals which each define avinues, and we have to string those
|
||||
together into one long avinue; or else it contains the actual content of a
|
||||
single avinue.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Construct a new avinue from this nonterminal</span><span class="named-paragraph-number">6.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">list_grammar</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">; </span><span class="comment-syntax"> i.e., we don't know yet</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">first_pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">next_pr</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_pt</span><span 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</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">-></span><span class="element-syntax">next_pt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">second</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">second</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><a href="4-ins.html#SP11" class="function-link"><span class="function-syntax">Instrumentation::log_production</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-pu.html#SP8" class="function-link"><span class="function-syntax">PreformUtilities::production_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"trie line with more than 2 words"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pu.html#SP6_1_1" class="named-paragraph-link"><span class="named-paragraph">Consider the one- or two-token production in this nonterminal</span><span class="named-paragraph-number">6.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-pu.html#SP6">§6</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6_1_1"></a><b>§6.1.1. </b>Each production contains one or two tokens. There are four possibilities for
|
||||
the production:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> (1) ... <some-nonterminal></span>
|
||||
<span class="plain-syntax"> (2) <some-nonterminal> ...</span>
|
||||
<span class="plain-syntax"> (3) <some-nonterminal></span>
|
||||
<span class="plain-syntax"> (4) pattern-word instructions-word</span>
|
||||
</pre>
|
||||
<p class="commentary">Cases (1), (2) and (3) are allowed only in list grammars; case (4) is allowed
|
||||
only in content grammars. The <span class="extract"><span class="extract-syntax">...</span></span> indicates whether the trie in the named
|
||||
nonterminal will act on the start or end of a word — this is needed only to
|
||||
override the normal convention.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Consider the one- or two-token production in this nonterminal</span><span class="named-paragraph-number">6.1.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">this_end</span><span class="plain-syntax"> = </span><span class="identifier-syntax">end</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">first</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">MULTIPLE_WILDCARD_PTC</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">second</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">second</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">NONTERMINAL_PTC</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">second</span><span class="plain-syntax">; </span><span class="identifier-syntax">this_end</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRIE_END</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">first</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">NONTERMINAL_PTC</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">second</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">second</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">MULTIPLE_WILDCARD_PTC</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">; </span><span class="identifier-syntax">this_end</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRIE_START</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">first</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">NONTERMINAL_PTC</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">second</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">entry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</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">entry</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">list_grammar</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-pu.html#SP6_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Throw problem for a mixed trie nonterminal</span><span class="named-paragraph-number">6.1.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pu.html#SP6_1_1_2" class="named-paragraph-link"><span class="named-paragraph">Recurse to make an avinue from the nonterminal named here, and add it to our result</span><span class="named-paragraph-number">6.1.1.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">list_grammar</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">list_grammar</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="4-pu.html#SP6_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Throw problem for a mixed trie nonterminal</span><span class="named-paragraph-number">6.1.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">second</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="4-pu.html#SP8" class="function-link"><span class="function-syntax">PreformUtilities::production_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"there should be two words here, a pattern and an instruction"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-pu.html#SP6_1_1_3" class="named-paragraph-link"><span class="named-paragraph">Add this pattern and instruction to the trie, creating it if necessary</span><span class="named-paragraph-number">6.1.1.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">list_grammar</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-pu.html#SP6_1">§6.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6_1_1_1"></a><b>§6.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Throw problem for a mixed trie nonterminal</span><span class="named-paragraph-number">6.1.1.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><a href="4-pu.html#SP8" class="function-link"><span class="function-syntax">PreformUtilities::production_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"this should either be a list of other nonterminals, or a list of patterns "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"and instructions, but not a mixture"</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-pu.html#SP6_1_1">§6.1.1</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6_1_1_2"></a><b>§6.1.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Recurse to make an avinue from the nonterminal named here, and add it to our result</span><span class="named-paragraph-number">6.1.1.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_mt</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Tries::duplicate_avinue</span><span class="plain-syntax">(</span><a href="4-pu.html#SP6" class="function-link"><span class="function-syntax">PreformUtilities::define_trie</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">entry</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">this_end</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">ave</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">ave</span><span class="plain-syntax"> = </span><span class="identifier-syntax">next_mt</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">match_avinue</span><span class="plain-syntax"> *</span><span class="identifier-syntax">m</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ave</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax">) </span><span class="identifier-syntax">m</span><span class="plain-syntax"> = </span><span class="identifier-syntax">m</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">m</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">next_mt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-pu.html#SP6_1_1">§6.1.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6_1_1_3"></a><b>§6.1.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Add this pattern and instruction to the trie, creating it if necessary</span><span class="named-paragraph-number">6.1.1.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ave</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">ave</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Tries::new_avinue</span><span class="plain-syntax">(</span><span class="identifier-syntax">end</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">from</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">from</span><span class="plain-syntax">, </span><span class="string-syntax">"%V"</span><span class="plain-syntax">, </span><span class="identifier-syntax">first</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Tries::add_to_avinue</span><span class="plain-syntax">(</span><span class="identifier-syntax">ave</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><a href="2-vcb.html#SP7" class="function-link"><span class="function-syntax">Vocabulary::get_exemplar</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">second</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</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">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="4-pu.html#SP6_1_1">§6.1.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b>The following may be useful for debugging:
|
||||
</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">PreformUtilities::log_avinues</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">nonterminal</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">nonterminal</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">next_pl</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">as_avinue</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\n%V ($J)\n%a"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">definition_language</span><span class="plain-syntax">, </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">as_avinue</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. Errors. </b>People are going to get their tries wrong; it's a very hard notation
|
||||
to learn. No end users of Inform will ever write them at all — this is a
|
||||
low-level feature for translators only — but translators need all the help
|
||||
they can get, so we'll try to provide good problem messages.
|
||||
</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">PreformUtilities::production_error</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">PreformUtilities::production_error</span></span>:<br/><a href="4-pu.html#SP6_1">§6.1</a>, <a href="4-pu.html#SP6_1_1">§6.1.1</a>, <a href="4-pu.html#SP6_1_1_1">§6.1.1.1</a><br/>Loading Preform - <a href="4-lp.html#SP7">§7</a>, <a href="4-lp.html#SP7_1">§7.1</a>, <a href="4-lp.html#SP7_2">§7.2</a>, <a href="4-lp.html#SP7_3">§7.3</a>, <a href="4-lp.html#SP14_1_1_1">§14.1.1.1</a>, <a href="4-lp.html#SP14_1_2">§14.1.2</a>, <a href="4-lp.html#SP14_1_3">§14.1.3</a>, <a href="4-lp.html#SP14_1_4">§14.1.4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="4-pu.html#SP9" class="function-link"><span class="function-syntax">PreformUtilities::error</span></a><span class="plain-syntax">(</span><a href="2-wa.html#SP5" class="function-link"><span class="function-syntax">WordAssemblages::lit_0</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>Some tools using this module will want to push simple error messages out to
|
||||
the command line; others will want to translate them into elaborate problem
|
||||
texts in HTML. So the client is allowed to define <span class="extract"><span class="extract-syntax">PREFORM_ERROR_WORDS_CALLBACK</span></span>
|
||||
to some routine of her own, gazumping this 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">PreformUtilities::error</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">PreformUtilities::error</span></span>:<br/><a href="4-pu.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">base_text</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</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">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</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">PREFORM_ERROR_WORDS_CALLBACK</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PREFORM_ERROR_WORDS_CALLBACK</span><span class="plain-syntax">(</span><span class="identifier-syntax">base_text</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREFORM_ERROR_WORDS_CALLBACK</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="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"The production at fault is:\n"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="4-ins.html#SP11" class="function-link"><span class="function-syntax">Instrumentation::log_production</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</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">"\n"</span><span class="plain-syntax">);</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">ERM</span><span 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="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ERM</span><span class="plain-syntax">, </span><span class="string-syntax">"(no nonterminal)"</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_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ERM</span><span class="plain-syntax">, </span><span class="string-syntax">"nonterminal %w"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="2-vcb.html#SP7" class="function-link"><span class="function-syntax">Vocabulary::get_exemplar</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ERM</span><span class="plain-syntax">, </span><span class="string-syntax">": "</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-wa.html#SP9" class="function-link"><span class="function-syntax">WordAssemblages::nonempty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">base_text</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">ERM</span><span class="plain-syntax">, </span><span class="string-syntax">"can't conjugate verb '%A': "</span><span class="plain-syntax">, &</span><span class="identifier-syntax">base_text</span><span 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="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_pt</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="4-ins.html#SP13" class="function-link"><span class="function-syntax">Instrumentation::write_ptoken</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_pt</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="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">ERM</span><span class="plain-syntax">, </span><span class="string-syntax">"line %d ('%S'): "</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">match_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEMP</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">TEMP</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">ERM</span><span class="plain-syntax">, </span><span class="string-syntax">"%s"</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Errors::with_text</span><span class="plain-syntax">(</span><span class="string-syntax">"Preform error: %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ERM</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">ERM</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="4-ins.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresssection"><a href="4-le.html">le</a></li><li class="progresssection"><a href="4-ni.html">ni</a></li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progresssection"><a href="4-ins.html">ins</a></li><li class="progresscurrent">pu</li><li class="progressnextoff">❯</li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -107,7 +107,7 @@ detect the language of play for a story file without actually running it.
|
|||
=
|
||||
void Languages::write_ISO_code(OUTPUT_STREAM, inform_language *L) {
|
||||
#ifdef CORE_MODULE
|
||||
if (L == NULL) L = English_language;
|
||||
if (L == NULL) L = InflectionDefns::default_nl(NULL);
|
||||
#endif
|
||||
if (Wordings::nonempty(L->language_field[ISO_639_CODE_LFIELD]))
|
||||
WRITE("%+W", L->language_field[ISO_639_CODE_LFIELD]);
|
||||
|
|
|
@ -64,7 +64,7 @@ int Task::carry_out(build_step *S) {
|
|||
inform7_task->stage_of_compilation = -1;
|
||||
inform7_task->next_resource_number = 3;
|
||||
|
||||
English_language = Projects::get_language_of_syntax(project);
|
||||
InflectionDefns::set_default_nl(Projects::get_language_of_syntax(project));
|
||||
|
||||
int rv = Sequence::carry_out(TargetVMs::debug_enabled(inform7_task->task->for_vm));
|
||||
inform7_task = NULL;
|
||||
|
|
|
@ -33,7 +33,7 @@ int Plurals::plural_SMF(int task, parse_node *V, wording *NPs) {
|
|||
wording P = Node::get_text(V->next->next);
|
||||
@<Forbid plural declarations containing quoted text@>;
|
||||
if (Assertions::Creator::vet_name_for_noun(P) == FALSE) return TRUE;
|
||||
Pluralisation::register(S, P, English_language);
|
||||
Pluralisation::register(S, P, InflectionDefns::default_nl(NULL));
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -1283,7 +1283,7 @@ prefaced "(of a rulebook)", "(of an activity)", and so on.
|
|||
|
||||
=
|
||||
<adaptive-adjective> internal {
|
||||
if (Projects::get_language_of_play(Task::project()) == English_language) return FALSE;
|
||||
if (Projects::get_language_of_play(Task::project()) == InflectionDefns::default_nl(NULL)) return FALSE;
|
||||
adjectival_phrase *aph;
|
||||
LOOP_OVER(aph, adjectival_phrase) {
|
||||
wording AW = Clusters::get_name_general(aph->adjective_names, Projects::get_language_of_play(Task::project()), 1, -1);
|
||||
|
@ -1298,7 +1298,7 @@ prefaced "(of a rulebook)", "(of an activity)", and so on.
|
|||
|
||||
=
|
||||
void Adjectives::Meanings::agreements(void) {
|
||||
if (Projects::get_language_of_play(Task::project()) == English_language) return;
|
||||
if (Projects::get_language_of_play(Task::project()) == InflectionDefns::default_nl(NULL)) return;
|
||||
adjectival_phrase *aph;
|
||||
LOOP_OVER(aph, adjectival_phrase) {
|
||||
wording PW = Clusters::get_name_general(aph->adjective_names, Projects::get_language_of_play(Task::project()), 1, -1);
|
||||
|
|
|
@ -108,7 +108,7 @@ void UseNouns::nl_translates(parse_node *pn) {
|
|||
inform_language *nl = Node::get_defn_language(pn->next->next);
|
||||
int g = Annotations::read_int(pn->next->next, gender_reference_ANNOT);
|
||||
if (nl == NULL) internal_error("No such NL");
|
||||
if (nl == English_language) {
|
||||
if (nl == InflectionDefns::default_nl(NULL)) {
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_CantTranslateIntoEnglish),
|
||||
"you can't translate into English",
|
||||
"only out of it.");
|
||||
|
|
|
@ -89,7 +89,7 @@ as the object.
|
|||
=
|
||||
<verb-implies-sentence-subject> ::=
|
||||
in <natural-language> <infinitive-declaration> | ==> R[2]; <<inform_language:nl>> = (inform_language *) (RP[1]);
|
||||
<infinitive-declaration> ==> R[1]; <<inform_language:nl>> = English_language;
|
||||
<infinitive-declaration> ==> R[1]; <<inform_language:nl>> = InflectionDefns::default_nl(NULL);
|
||||
|
||||
<infinitive-declaration> ::=
|
||||
to <infinitive-usage> ( ... ) | ==> R[1]; <<giving-parts>> = TRUE
|
||||
|
@ -552,7 +552,7 @@ foreign verbs (4).
|
|||
binary_predicate *bp = VerbMeanings::get_relational_meaning(&vm);
|
||||
if (bp == a_has_b_predicate) p = 1;
|
||||
if (bp == R_equality) p = 2;
|
||||
if ((nl) && (nl != English_language)) p = 5;
|
||||
if ((nl) && (nl != InflectionDefns::default_nl(NULL))) p = 5;
|
||||
++new_verb_sequence_count;
|
||||
vi = Verbs::new_verb(vc, FALSE);
|
||||
vc->vc_conjugates = vi;
|
||||
|
@ -634,13 +634,13 @@ void NewVerbs::bootstrap(void) {
|
|||
NewVerbs::declare_sm(Sentences::VPs::omit_from_SMF, I"omit-from", 4);
|
||||
|
||||
word_assemblage infinitive = PreformUtilities::wording(<bootstrap-verb>, 0);
|
||||
verb_conjugation *vc = Conjugation::conjugate(infinitive, English_language);
|
||||
verb_conjugation *vc = Conjugation::conjugate(infinitive, InflectionDefns::default_nl(NULL));
|
||||
verb_identity *vi = Verbs::new_verb(vc, TRUE);
|
||||
vc->vc_conjugates = vi;
|
||||
VerbUsages::register_all_usages_of_verb(vi, FALSE, 2);
|
||||
|
||||
infinitive = PreformUtilities::wording(<bootstrap-verb>, 1);
|
||||
vc = Conjugation::conjugate(infinitive, English_language);
|
||||
vc = Conjugation::conjugate(infinitive, InflectionDefns::default_nl(NULL));
|
||||
vi = Verbs::new_verb(vc, FALSE);
|
||||
vc->vc_conjugates = vi;
|
||||
VerbUsages::register_all_usages_of_verb(vi, FALSE, 3);
|
||||
|
@ -1135,7 +1135,7 @@ void NewVerbs::log(verb_usage *vu) {
|
|||
if (vu == NULL) { LOG("(null verb usage)"); return; }
|
||||
LOG("VU: $f ", &(vu->vu_text));
|
||||
if (vu->negated_form_of_verb) LOG("(negated) ");
|
||||
Linguistics::log_tense_number(DL, vu->tensed);
|
||||
InflectionDefns::log_tense_number(DL, vu->tensed);
|
||||
}
|
||||
|
||||
void NewVerbs::log_all(void) {
|
||||
|
|
|
@ -189,7 +189,7 @@ from sentences, and this can include I6 properties with no I7 analogue.
|
|||
this_is_named_for_something_with_a_printed_name = TRUE;
|
||||
@<Issue problem message if the name contains a comma@>;
|
||||
if (this_has_a_printed_name == FALSE) @<Assert the printed name property@>;
|
||||
if (Projects::get_language_of_play(Task::project()) != English_language)
|
||||
if (Projects::get_language_of_play(Task::project()) != InflectionDefns::default_nl(NULL))
|
||||
@<Assert male, female, neuter adjectives from grammatical gender@>;
|
||||
}
|
||||
|
||||
|
|
|
@ -468,7 +468,7 @@ void Kinds::Textual::write_plural(OUTPUT_STREAM, kind *K) {
|
|||
void Kinds::Textual::write_articled(OUTPUT_STREAM, kind *K) {
|
||||
TEMPORARY_TEXT(TEMP);
|
||||
Kinds::Textual::write_inner(TEMP, K, FALSE, TRUE);
|
||||
ArticleInflection::preface_by_article(OUT, TEMP, English_language);
|
||||
ArticleInflection::preface_by_article(OUT, TEMP, InflectionDefns::default_nl(NULL));
|
||||
DISCARD_TEXT(TEMP);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[Linguistics::] Linguistic Definitions.
|
||||
[InflectionDefns::] Linguistic Definitions.
|
||||
|
||||
Some basic linguistic constants are defined.
|
||||
|
||||
|
@ -6,11 +6,13 @@ Some basic linguistic constants are defined.
|
|||
First, we support three genders:
|
||||
|
||||
@d NO_KNOWN_GENDERS 3
|
||||
@d NEUTER_GENDER 1 /* can be used as Scandinavian "common gender" */
|
||||
@d NEUTER_GENDER 1 /* or can be used as Scandinavian "common gender" */
|
||||
@d MASCULINE_GENDER 2
|
||||
@d FEMININE_GENDER 3
|
||||
|
||||
@ There are six "persons":
|
||||
@ There are six "persons". The sequence corresponds to the defined constants
|
||||
in the English Language extension, which we assume will be followed by other
|
||||
languages.
|
||||
|
||||
@d NO_KNOWN_PERSONS 6
|
||||
@d FIRST_PERSON_SINGULAR 0
|
||||
|
@ -32,14 +34,9 @@ First, we support three genders:
|
|||
@d ACTIVE_MOOD 0
|
||||
@d PASSIVE_MOOD 1
|
||||
|
||||
@ 25 cases ought to be plenty, though some languages are pretty scary this
|
||||
way: Hungarian, for example, has 18. We only require one case to exist, the
|
||||
nominative, which is required to be case 0.
|
||||
|
||||
But this covers a pretty decent selection. Note that, as with the
|
||||
persons above, the sequence corresponds to the defined constants in the
|
||||
English Language extension, which we assume will be followed by other
|
||||
languages.
|
||||
@ 25 cases sounds like plenty, but some languages are pretty scary this
|
||||
way: Hungarian has 18. We only require one case to exist, the nominative,
|
||||
which is required to be case 0.
|
||||
|
||||
@d MAX_GRAMMATICAL_CASES 25
|
||||
@d NOMINATIVE_CASE 0
|
||||
|
@ -54,18 +51,20 @@ tense 5 for the past historic.
|
|||
@d HASBEEN_TENSE 2 /* Present perfect */
|
||||
@d HADBEEN_TENSE 3 /* Past perfect */
|
||||
@d WILLBE_TENSE 4 /* Future (not used in assertions or conditions) */
|
||||
@d CUSTOM1_TENSE 5
|
||||
@d CUSTOM2_TENSE 6
|
||||
|
||||
=
|
||||
void Linguistics::log_tense_number(OUTPUT_STREAM, int t) {
|
||||
void InflectionDefns::log_tense_number(OUTPUT_STREAM, int t) {
|
||||
switch (t) {
|
||||
case IS_TENSE: WRITE("IS_TENSE"); break;
|
||||
case WAS_TENSE: WRITE("WAS_TENSE"); break;
|
||||
case IS_TENSE: WRITE("IS_TENSE"); break;
|
||||
case WAS_TENSE: WRITE("WAS_TENSE"); break;
|
||||
case HASBEEN_TENSE: WRITE("HASBEEN_TENSE"); break;
|
||||
case HADBEEN_TENSE: WRITE("HADBEEN_TENSE"); break;
|
||||
case WILLBE_TENSE: WRITE("WILLBE_TENSE"); break;
|
||||
case 5: WRITE("CUSTOM1_TENSE"); break;
|
||||
case 6: WRITE("CUSTOM2_TENSE"); break;
|
||||
default: WRITE("<invalid-tense>"); break;
|
||||
case WILLBE_TENSE: WRITE("WILLBE_TENSE"); break;
|
||||
case CUSTOM1_TENSE: WRITE("CUSTOM1_TENSE"); break;
|
||||
case CUSTOM2_TENSE: WRITE("CUSTOM2_TENSE"); break;
|
||||
default: WRITE("<invalid-tense>"); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -74,9 +73,13 @@ The following is in effect also a constant; Inform sets it to English early
|
|||
in its run.
|
||||
|
||||
=
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *English_language = NULL; /* until created, early in run */
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *default_language_for_linguistics = NULL;
|
||||
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *Linguistics::default_nl(NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
if (nl) return nl;
|
||||
return English_language;
|
||||
void InflectionDefns::set_default_nl(NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
default_language_for_linguistics = nl;
|
||||
}
|
||||
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *InflectionDefns::default_nl(NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
if (nl) return nl;
|
||||
return default_language_for_linguistics;
|
||||
}
|
||||
|
|
|
@ -2,21 +2,20 @@
|
|||
|
||||
To inflect "a" into "an", and so forth.
|
||||
|
||||
@h The indefinite article trie.
|
||||
Here we take text such as "UNESCO document" and put an article in front, to
|
||||
@ Here we take text such as "UNESCO document" and put an article in front, to
|
||||
get "a UNESCO document" (and not "an UNESCO document": these things are much
|
||||
trickier than they look).
|
||||
|
||||
=
|
||||
match_avinue *indef_trie = NULL;
|
||||
|
||||
void ArticleInflection::preface_by_article(OUTPUT_STREAM, text_stream *initial_text,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
void ArticleInflection::preface_by_article(OUTPUT_STREAM,
|
||||
text_stream *initial_text, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
if (indef_trie == NULL)
|
||||
indef_trie =
|
||||
PreformUtilities::define_trie(
|
||||
<singular-noun-to-its-indefinite-article>, TRIE_START,
|
||||
Linguistics::default_nl(NULL));
|
||||
InflectionDefns::default_nl(NULL));
|
||||
wchar_t *result = Tries::search_avinue(indef_trie, initial_text);
|
||||
if (result == NULL) result = L"a";
|
||||
WRITE("%w %S", result, initial_text);
|
||||
|
|
|
@ -13,14 +13,14 @@ typedef struct declension {
|
|||
|
||||
@ =
|
||||
declension Declensions::decline(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl, int gen, int num) {
|
||||
if (nl == NULL) nl = English_language;
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
declension D = Declensions::decline_inner(W, nl, gen, num, <noun-declension>);
|
||||
@<Fix the origin@>;
|
||||
return D;
|
||||
}
|
||||
|
||||
declension Declensions::decline_article(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl, int gen, int num) {
|
||||
if (nl == NULL) nl = English_language;
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
declension D = Declensions::decline_inner(W, nl, gen, num, <article-declension>);
|
||||
@<Fix the origin@>;
|
||||
return D;
|
||||
|
@ -36,7 +36,7 @@ declension Declensions::decline_article(wording W, NATURAL_LANGUAGE_WORDS_TYPE *
|
|||
|
||||
@ =
|
||||
declension Declensions::decline_inner(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl, int gen, int num, nonterminal *nt) {
|
||||
if (nl == NULL) nl = English_language;
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
declension D;
|
||||
D.within_language = nl;
|
||||
for (production_list *pl = nt->first_pl; pl; pl = pl->next_pl) {
|
||||
|
@ -115,7 +115,7 @@ declension Declensions::decline_from_groups(wording W, NATURAL_LANGUAGE_WORDS_TY
|
|||
D.within_language = nl;
|
||||
TEMPORARY_TEXT(from);
|
||||
WRITE_TO(from, "%+W", W);
|
||||
match_avinue *group_trie = PreformUtilities::define_trie(gnt, TRIE_END, Linguistics::default_nl(nl));
|
||||
match_avinue *group_trie = PreformUtilities::define_trie(gnt, TRIE_END, InflectionDefns::default_nl(nl));
|
||||
wchar_t *result = Tries::search_avinue(group_trie, from);
|
||||
DISCARD_TEXT(from);
|
||||
if (result == NULL) {
|
||||
|
|
|
@ -2,8 +2,7 @@
|
|||
|
||||
To inflect adjectives into comparative and superlative forms.
|
||||
|
||||
@h Constructing comparatives.
|
||||
In English, the comparative of an adjective can generally be formed by
|
||||
@ In English, the comparative of an adjective can generally be formed by
|
||||
suffixing the inflected form with "than"; thus, "big" to "bigger than".
|
||||
The following does the suffixing:
|
||||
|
||||
|
@ -11,7 +10,9 @@ The following does the suffixing:
|
|||
<comparative-construction> ::=
|
||||
... than
|
||||
|
||||
@ =
|
||||
@ This is essentially a wrapper function for the trie <adjective-to-comparative>.
|
||||
|
||||
=
|
||||
wording Grading::make_comparative(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
TEMPORARY_TEXT(comprised);
|
||||
TEMPORARY_TEXT(transformed);
|
||||
|
@ -19,9 +20,10 @@ wording Grading::make_comparative(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
|||
WRITE_TO(comprised, "some-long-text");
|
||||
else
|
||||
WRITE_TO(comprised, "%N", Wordings::first_wn(W));
|
||||
if (nl == NULL) nl = English_language;
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
match_avinue *comp_trie =
|
||||
PreformUtilities::define_trie(<adjective-to-comparative>, TRIE_END, Linguistics::default_nl(nl));
|
||||
PreformUtilities::define_trie(<adjective-to-comparative>, TRIE_END,
|
||||
InflectionDefns::default_nl(nl));
|
||||
Inflections::suffix_inflection(transformed, comp_trie, comprised);
|
||||
wording PW = Feeds::feed_text(transformed);
|
||||
word_assemblage merged =
|
||||
|
@ -34,6 +36,9 @@ wording Grading::make_comparative(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
|||
return PW;
|
||||
}
|
||||
|
||||
@ This is essentially a wrapper function for the trie <adjective-to-superlative>.
|
||||
|
||||
=
|
||||
wording Grading::make_superlative(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
TEMPORARY_TEXT(comprised);
|
||||
TEMPORARY_TEXT(transformed);
|
||||
|
@ -41,9 +46,10 @@ wording Grading::make_superlative(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
|||
WRITE_TO(comprised, "some-long-text");
|
||||
else
|
||||
WRITE_TO(comprised, "%N", Wordings::first_wn(W));
|
||||
if (nl == NULL) nl = English_language;
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
match_avinue *comp_trie =
|
||||
PreformUtilities::define_trie(<adjective-to-superlative>, TRIE_END, Linguistics::default_nl(nl));
|
||||
PreformUtilities::define_trie(<adjective-to-superlative>, TRIE_END,
|
||||
InflectionDefns::default_nl(nl));
|
||||
Inflections::suffix_inflection(transformed, comp_trie, comprised);
|
||||
wording PW = Feeds::feed_text(transformed);
|
||||
LOGIF(CONSTRUCTED_PLURALS, "[Superlative of %W is %W]\n", W, PW);
|
||||
|
@ -52,10 +58,10 @@ wording Grading::make_superlative(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
|||
return PW;
|
||||
}
|
||||
|
||||
@ There has to be a better term than "quiddity" for this grammatical construct,
|
||||
@ This is essentially a wrapper function for the trie <adjective-to-quiddity>.
|
||||
There has to be a better term than "quiddity" for this grammatical concept,
|
||||
but what I mean is the property for which the given adjective makes a
|
||||
comparison: for instance, "tallness" for "tall", or "steeliness" for
|
||||
"steely".
|
||||
comparison: for instance, "tallness" for "tall", or "steeliness" for "steely".
|
||||
|
||||
=
|
||||
wording Grading::make_quiddity(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
|
@ -65,9 +71,10 @@ wording Grading::make_quiddity(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
|||
WRITE_TO(comprised, "some-long-text");
|
||||
else
|
||||
WRITE_TO(comprised, "%N", Wordings::first_wn(W));
|
||||
if (nl == NULL) nl = English_language;
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
match_avinue *comp_trie =
|
||||
PreformUtilities::define_trie(<adjective-to-quiddity>, TRIE_END, Linguistics::default_nl(nl));
|
||||
PreformUtilities::define_trie(<adjective-to-quiddity>, TRIE_END,
|
||||
InflectionDefns::default_nl(nl));
|
||||
Inflections::suffix_inflection(transformed, comp_trie, comprised);
|
||||
wording PW = Feeds::feed_text(transformed);
|
||||
LOGIF(CONSTRUCTED_PLURALS, "[Quiddity of %W is %W]\n", W, PW);
|
||||
|
|
|
@ -14,7 +14,7 @@ with lingistic roles. For example, the cluster of names for the common noun
|
|||
|
||||
=
|
||||
typedef struct name_cluster {
|
||||
struct individual_name *first_name;
|
||||
struct linked_list *listed; /* of |individual_name| */
|
||||
CLASS_DEFINITION
|
||||
} name_cluster;
|
||||
|
||||
|
@ -23,8 +23,7 @@ typedef struct individual_name {
|
|||
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 */
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *name_language; /* always non-null */
|
||||
struct individual_name *next; /* within its cluster */
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *name_language;
|
||||
CLASS_DEFINITION
|
||||
} individual_name;
|
||||
|
||||
|
@ -33,32 +32,34 @@ typedef struct individual_name {
|
|||
=
|
||||
name_cluster *Clusters::new(void) {
|
||||
name_cluster *names = CREATE(name_cluster);
|
||||
names->first_name = NULL;
|
||||
names->listed = NEW_LINKED_LIST(individual_name);
|
||||
return names;
|
||||
}
|
||||
|
||||
@ The following can add either a single name, or a name and its plural(s):
|
||||
|
||||
=
|
||||
individual_name *Clusters::add(name_cluster *names, wording W,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl, int gender, int number, int pluralise) {
|
||||
if (nl == NULL) nl = English_language;
|
||||
individual_name *Clusters::add_one(name_cluster *names, wording W,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl, int gender, int number) {
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
individual_name *in = CREATE(individual_name);
|
||||
in->principal_meaning = NULL_GENERAL_POINTER;
|
||||
in->name = Declensions::decline(W, nl, gender, number);
|
||||
in->name_language = nl;
|
||||
in->name_number = number;
|
||||
in->name_gender = gender;
|
||||
in->next = NULL;
|
||||
if (names->first_name == NULL) names->first_name = in;
|
||||
else {
|
||||
individual_name *in2;
|
||||
for (in2 = names->first_name; ((in2) && (in2->next)); in2 = in2->next) ;
|
||||
in2->next = in;
|
||||
}
|
||||
ADD_TO_LINKED_LIST(in, individual_name, names->listed);
|
||||
return in;
|
||||
}
|
||||
|
||||
linked_list *Clusters::add(name_cluster *names, wording W,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl, int gender, int number, int pluralise) {
|
||||
linked_list *L = NEW_LINKED_LIST(individual_name);
|
||||
individual_name *in = Clusters::add_one(names, W, nl, gender, number);
|
||||
ADD_TO_LINKED_LIST(in, individual_name, L);
|
||||
if ((pluralise) && (number == 1))
|
||||
@<Add plural names as well@>;
|
||||
return in;
|
||||
return L;
|
||||
}
|
||||
|
||||
@ The following makes all possible plurals and registers those too. (Note
|
||||
|
@ -75,9 +76,9 @@ so there may be any number of names registered: for instance, the kind
|
|||
wording PW = EMPTY_WORDING;
|
||||
pde = Pluralisation::make(W, &PW, pde, nl);
|
||||
if (Wordings::nonempty(PW)) {
|
||||
LOGIF(CONSTRUCTED_PLURALS, "(%d) Reading plural of <%W> as <%W>\n", k,
|
||||
W, PW);
|
||||
Clusters::add(names, PW, nl, gender, 2, FALSE);
|
||||
LOGIF(CONSTRUCTED_PLURALS, "(%d) Plural of <%W>: <%W>\n", k, W, PW);
|
||||
individual_name *in = Clusters::add_one(names, PW, nl, gender, 2);
|
||||
ADD_TO_LINKED_LIST(in, individual_name, L);
|
||||
}
|
||||
} while (pde);
|
||||
|
||||
|
@ -91,15 +92,14 @@ At run time, it's an integer from 0 to 11 which encodes all possible
|
|||
combinations. Here we only work through six, ignoring animation:
|
||||
|
||||
=
|
||||
void Clusters::add_with_agreements(name_cluster *cl, wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
if (nl == NULL) nl = English_language;
|
||||
if (nl == English_language) {
|
||||
void Clusters::add_with_agreements(name_cluster *cl, wording W,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
if (nl == InflectionDefns::default_nl(NULL))
|
||||
Clusters::add(cl, W, nl, NEUTER_GENDER, 1, FALSE);
|
||||
} else {
|
||||
int gna;
|
||||
for (gna = 0; gna < 6; gna++)
|
||||
else
|
||||
for (int gna = 0; gna < 6; gna++)
|
||||
@<Generate agreement form in this GNA and add to the declension@>;
|
||||
}
|
||||
}
|
||||
|
||||
@ We use tries to modify the base text, which is taken to be the neuter
|
||||
|
@ -134,10 +134,12 @@ through one or two tries.
|
|||
word_assemblage wa = WordAssemblages::from_wording(W);
|
||||
if (step1)
|
||||
wa = Inflections::apply_trie_to_wa(wa,
|
||||
PreformUtilities::define_trie(step1, TRIE_END, Linguistics::default_nl(nl)));
|
||||
PreformUtilities::define_trie(step1, TRIE_END,
|
||||
InflectionDefns::default_nl(nl)));
|
||||
if (step2)
|
||||
wa = Inflections::apply_trie_to_wa(wa,
|
||||
PreformUtilities::define_trie(step2, TRIE_END, Linguistics::default_nl(nl)));
|
||||
PreformUtilities::define_trie(step2, TRIE_END,
|
||||
InflectionDefns::default_nl(nl)));
|
||||
FW = WordAssemblages::to_wording(&wa);
|
||||
|
||||
@h Plural fixing.
|
||||
|
@ -148,9 +150,10 @@ 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, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
void Clusters::set_plural_name(name_cluster *cl, wording W,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
individual_name *in;
|
||||
for (in = cl->first_name; in; in = in->next)
|
||||
LOOP_OVER_LINKED_LIST(in, individual_name, cl->listed)
|
||||
if (in->name_number == 2) {
|
||||
in->name = Declensions::decline(W, nl, NEUTER_GENDER, 2);
|
||||
return;
|
||||
|
@ -170,7 +173,7 @@ wording Clusters::get_name(name_cluster *cl, int plural_flag) {
|
|||
int number_sought = 1;
|
||||
if (plural_flag) number_sought = 2;
|
||||
individual_name *in;
|
||||
for (in = cl->first_name; in; in = in->next)
|
||||
LOOP_OVER_LINKED_LIST(in, individual_name, cl->listed)
|
||||
if (in->name_number == number_sought)
|
||||
return Declensions::in_case(&(in->name), NOMINATIVE_CASE);
|
||||
return EMPTY_WORDING;
|
||||
|
@ -180,11 +183,12 @@ 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, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
wording Clusters::get_name_in_play(name_cluster *cl, int plural_flag,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
int number_sought = 1;
|
||||
if (plural_flag) number_sought = 2;
|
||||
individual_name *in;
|
||||
for (in = cl->first_name; in; in = in->next)
|
||||
LOOP_OVER_LINKED_LIST(in, individual_name, cl->listed)
|
||||
if ((in->name_number == number_sought) &&
|
||||
(in->name_language == nl))
|
||||
return Declensions::in_case(&(in->name), NOMINATIVE_CASE);
|
||||
|
@ -197,7 +201,7 @@ wording Clusters::get_name_in_play(name_cluster *cl, int plural_flag, NATURAL_LA
|
|||
wording Clusters::get_name_general(name_cluster *cl,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl, int number_sought, int gender_sought) {
|
||||
individual_name *in;
|
||||
for (in = cl->first_name; in; in = in->next)
|
||||
LOOP_OVER_LINKED_LIST(in, individual_name, cl->listed)
|
||||
if (((number_sought == -1) || (number_sought == in->name_number)) &&
|
||||
((gender_sought == -1) || (gender_sought == in->name_gender)) &&
|
||||
(in->name_language == nl))
|
||||
|
@ -217,6 +221,8 @@ void Clusters::set_principal_meaning(individual_name *in, general_pointer meanin
|
|||
}
|
||||
|
||||
general_pointer Clusters::get_principal_meaning(name_cluster *cl) {
|
||||
if (cl->first_name == NULL) return NULL_GENERAL_POINTER;
|
||||
return cl->first_name->principal_meaning;
|
||||
individual_name *in;
|
||||
LOOP_OVER_LINKED_LIST(in, individual_name, cl->listed)
|
||||
return in->principal_meaning;
|
||||
return NULL_GENERAL_POINTER;
|
||||
}
|
|
@ -38,6 +38,7 @@ above. It expects only a single word.
|
|||
=
|
||||
int PastParticiples::pasturise_text(OUTPUT_STREAM, text_stream *from) {
|
||||
match_avinue *past_trie =
|
||||
PreformUtilities::define_trie(<pasturise-participle>, TRIE_START, Linguistics::default_nl(NULL));
|
||||
PreformUtilities::define_trie(<pasturise-participle>, TRIE_START,
|
||||
InflectionDefns::default_nl(NULL));
|
||||
return Inflections::suffix_inflection(OUT, past_trie, from);
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ one not found in the dictionary).
|
|||
=
|
||||
plural_dictionary_entry *Pluralisation::make(wording W, wording *PW,
|
||||
plural_dictionary_entry *search_from, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
if (nl == NULL) nl = English_language;
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
|
||||
plural_dictionary_entry *pde;
|
||||
|
||||
|
@ -95,8 +95,9 @@ has a plural, and modifies it to the plural form.
|
|||
|
||||
=
|
||||
int Pluralisation::regular(OUTPUT_STREAM, text_stream *from, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
if (nl == NULL) nl = English_language;
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
match_avinue *plural_trie =
|
||||
PreformUtilities::define_trie(<singular-noun-to-its-plural>, TRIE_END, Linguistics::default_nl(nl));
|
||||
PreformUtilities::define_trie(<singular-noun-to-its-plural>, TRIE_END,
|
||||
InflectionDefns::default_nl(nl));
|
||||
return Inflections::suffix_inflection(OUT, plural_trie, from);
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ verb_conjugation *Conjugation::conjugate(word_assemblage base_text,
|
|||
|
||||
verb_conjugation *Conjugation::conjugate_with_overrides(word_assemblage base_text,
|
||||
word_assemblage *overrides, int no_overrides, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
if (nl == NULL) nl = English_language;
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
if (WordAssemblages::nonempty(base_text) == FALSE)
|
||||
internal_error("No base text for verb conjugation");
|
||||
|
||||
|
@ -378,7 +378,7 @@ example:
|
|||
verb_forms[n] =
|
||||
Inflections::apply_trie_to_wa(
|
||||
verb_forms[BASE_FORM_TYPE],
|
||||
PreformUtilities::define_trie(content_token->nt_pt, TRIE_END, Linguistics::default_nl(nl)));
|
||||
PreformUtilities::define_trie(content_token->nt_pt, TRIE_END, InflectionDefns::default_nl(nl)));
|
||||
else if (content_token->ptoken_category == FIXED_WORD_PTC)
|
||||
verb_forms[n] =
|
||||
Conjugation::expand_with_endings(content_token->ve_pt, verb_forms);
|
||||
|
@ -804,7 +804,7 @@ from our dictionary of 14,000 or so present and past participles.
|
|||
=
|
||||
void Conjugation::test_participle(OUTPUT_STREAM, wording W) {
|
||||
verb_conjugation *vc = Conjugation::conjugate(
|
||||
WordAssemblages::from_wording(W), English_language);
|
||||
WordAssemblages::from_wording(W), InflectionDefns::default_nl(NULL));
|
||||
if (vc == NULL) { WRITE("Failed test\n"); return; }
|
||||
Conjugation::write_participle(OUT, vc);
|
||||
DESTROY(vc, verb_conjugation);
|
||||
|
|
|
@ -2,65 +2,6 @@
|
|||
|
||||
To define how English nouns and verbs are inflected.
|
||||
|
||||
@h Preface.
|
||||
Inflections are modifications of words -- usually word endings or beginnings --
|
||||
for different circumstances. English is often called an uninflected language,
|
||||
but this is an exaggeration. For example, we spell the word "tree" as
|
||||
"trees" if it refers to more than one of them. Inform sometimes needs
|
||||
to take text in one form and change it to another -- for example, to turn
|
||||
a singular noun into a plural one -- and ordinary Preform parsing isn't good
|
||||
enough to express this.
|
||||
|
||||
Inform uses a data structure called a "trie" as an efficient way to match
|
||||
prefix and/or suffix patterns in words, and then to modify them. These tries
|
||||
are created using the same notation as for Preform grammar, which is
|
||||
convenient in many ways, but also a little misleading -- they are parsed quite
|
||||
differently. The rules are as follows:
|
||||
|
||||
(a) A nonterminal in trie grammar can either be a list of other tries, or it
|
||||
can be a list of inflection rules. Mixtures of the two are not allowed. For
|
||||
example |<singular-noun-to-its-indefinite-article>| is a list of other tries, while
|
||||
|<en-trie-indef-a>| contains actual rules.
|
||||
|
||||
(b) In a list of tries, each production consists only of a single nonterminal
|
||||
identifying the trie to make use of. One exception: writing |...| before the
|
||||
trie's name makes it work on the end of a word instead of the beginning.
|
||||
Inform attempts to find a match using each trie in turn, until a match is
|
||||
found.
|
||||
|
||||
(c) In a list of inflection rules, each production consists of two words. The
|
||||
first word is what to match; the second gives instructions on what to turn
|
||||
it into. An asterisk is used to mean "any string of 0 or more letters";
|
||||
a digit in the replacement text means "truncate by this many letters and
|
||||
add...". (As a special case, the replacement text "0" means: make no
|
||||
change.) Some examples:
|
||||
|
||||
|lead gold| turns "lead" into "gold"
|
||||
|
||||
|codex codices| turns "codex" to "codices"
|
||||
|
||||
|*mouse 5mice| turns "mouse" to "mice", or "fieldmouse" to "fieldmice"
|
||||
|
||||
Designing a trie is not quite as easy as it looks. It looks as if this is a
|
||||
sequence of tests to perform in succession, but it's better to think of the
|
||||
rules all being performed at once. In general, if you need one inflection
|
||||
rule to take precedence over another, put it in an earlier trie, rather than
|
||||
putting it earlier in the same trie.
|
||||
|
||||
@ Tries are highly language specific and should not be translated as such:
|
||||
instead, an appropriate version needs to be written for every language.
|
||||
|
||||
Except at the very top level, translators are free to created new tries
|
||||
and name them as they please. For example, the Spanish implementation of
|
||||
= (text as InC)
|
||||
<singular-noun-to-its-indefinite-article>
|
||||
=
|
||||
may look entirely unlike its English version, but at the top level it still
|
||||
has to have that name.
|
||||
|
||||
Lower-level tries used in the implementation should have names beginning
|
||||
with a language code: hence the names "en-" used below.
|
||||
|
||||
@h Noun inflections.
|
||||
The following trie looks at the start of a word, which we assume to be a
|
||||
noun, and decides whether to use the indefinite article "a" or "an".
|
||||
|
|
|
@ -4,17 +4,21 @@ Purpose: A library for adapting words or short phrases for linguistic purposes.
|
|||
Language: InC
|
||||
Licence: Artistic License 2.0
|
||||
|
||||
Preliminaries
|
||||
What This Module Does
|
||||
How To Include This Module
|
||||
|
||||
Chapter 1: Starting Up
|
||||
Inflections Module
|
||||
|
||||
Chapter 2: Machinery
|
||||
Linguistic Definitions
|
||||
Tries and Inflections
|
||||
Name Clusters
|
||||
|
||||
Chapter 3: Grammatical Uses of Inflection
|
||||
Article Inflection
|
||||
Declensions
|
||||
Name Clusters
|
||||
Pluralisation
|
||||
Grading Adjectives
|
||||
Past Participles
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
How To Include This Module.
|
||||
|
||||
What to do to make use of the inflections module in a new command-line tool.
|
||||
|
||||
@h Status.
|
||||
The inflections module is provided as one of the "services" suite of modules,
|
||||
which means that it was built with a view to potential incorporation in
|
||||
multiple tools. It can be found, for example, in //inform7// and
|
||||
//inflections-test//.
|
||||
|
||||
By convention, the modules considered as "services" have no dependencies on
|
||||
other modules except for //foundation// and other "services" modules.
|
||||
|
||||
A tool can import //inflections// only if it also imports //foundation//,
|
||||
//words// and //syntax//.
|
||||
|
||||
@h Importing the module.
|
||||
We'll use the term "parent" to mean the tool which is importing //inflections//,
|
||||
that is, which will include its code and be able to use it. As with any
|
||||
imported module,
|
||||
(*) The contents page of the parent's web must identify and locate the
|
||||
module:
|
||||
= (text as Inweb)
|
||||
Import: somepath/inflections
|
||||
=
|
||||
(*) The parent must call |InflectionsModule::start()| just after it starts up, and
|
||||
|InflectionsModule::end()| just before it shuts down. (But just after, and just
|
||||
before, the corresponding calls to //foundation//.)
|
|
@ -0,0 +1,113 @@
|
|||
What This Module Does.
|
||||
|
||||
An overview of the inflections module's role and abilities.
|
||||
|
||||
@h Prerequisites.
|
||||
The inflections module is a part of the Inform compiler toolset. It is
|
||||
presented as a literate program or "web". Before diving in:
|
||||
(a) It helps to have some experience of reading webs: see //inweb// for more.
|
||||
(b) The module is written in C, in fact ANSI C99, but this is disguised by the
|
||||
fact that it uses some extension syntaxes provided by the //inweb// literate
|
||||
programming tool, making it a dialect of C called InC. See //inweb// for
|
||||
full details, but essentially: it's C without predeclarations or header files,
|
||||
and where functions have names like |Tags::add_by_name| rather than |add_by_name|.
|
||||
(c) This module uses other modules drawn from the //compiler//, and also
|
||||
uses a module of utility functions called //foundation//.
|
||||
For more, see //foundation: A Brief Guide to Foundation//.
|
||||
|
||||
@h Inflections.
|
||||
Inflections are modifications of words -- usually word endings or beginnings --
|
||||
for different circumstances. English is often called an uninflected language,
|
||||
but this is an exaggeration. For example, we spell the word "tree" as
|
||||
"trees" when we refer to more than one of them. Inform sometimes needs
|
||||
to take text in one form and change it to another -- for example, to turn
|
||||
a singular noun into a plural one -- and ordinary Preform parsing isn't good
|
||||
enough to express this.
|
||||
|
||||
Inform uses a data structure called a "trie" as an efficient way to match
|
||||
prefix and/or suffix patterns in words, and then to modify them.
|
||||
|
||||
Tries are provided as basic data structures by //foundation: Tries and Avinues//,
|
||||
and the code for initialising them from Preform grammar is provided by
|
||||
//words: Preform Utilities//.
|
||||
|
||||
@ Though tries are, as just mentioned, created from Preform grammar, they're
|
||||
parsed quite differently. The rules are as follows:
|
||||
|
||||
(a) A nonterminal in trie grammar can either be a list of other tries, or it
|
||||
can be a list of inflection rules. Mixtures of the two are not allowed. For
|
||||
example <singular-noun-to-its-indefinite-article> is a list of other tries,
|
||||
while <en-trie-indef-a> contains actual rules.
|
||||
|
||||
(b) In a list of tries, each production consists only of a single nonterminal
|
||||
identifying the trie to make use of. One exception: writing |...| before the
|
||||
trie's name makes it work on the end of a word instead of the beginning.
|
||||
Inform attempts to find a match using each trie in turn, until a match is
|
||||
found. For example:
|
||||
= (text as Preform)
|
||||
<fiddle-with-words> ::=
|
||||
<fiddle-with-exceptions> |
|
||||
... <fiddle-with-irregular-endings> |
|
||||
... <fiddle-with-regular-endings>
|
||||
=
|
||||
means try <fiddle-with-exceptions> first (on the whole word), then
|
||||
<fiddle-with-irregular-endings> (on the tail), and finally <fiddle-with-regular-endings>
|
||||
(also on the tail).
|
||||
|
||||
(c) In a list of inflection rules, each production consists of two words. The
|
||||
first word is what to match; the second gives instructions on what to turn
|
||||
it into. An asterisk is used to mean "any string of 0 or more letters";
|
||||
a digit in the replacement text means "truncate by this many letters and
|
||||
add...". (As a special case, the replacement text "0" means: make no
|
||||
change.) Some examples:
|
||||
= (text as Preform)
|
||||
<pluralise> ::=
|
||||
lead lead |
|
||||
codex codices |
|
||||
*mouse 5mice
|
||||
=
|
||||
This would pluralise "lead" as "lead", "codex" as "codices", "mouse" as "mice",
|
||||
and "fieldmouse" as "fieldmice".
|
||||
|
||||
Designing a trie is not quite as easy as it looks. It looks as if this is a
|
||||
sequence of tests to perform in succession, but it's better to think of the
|
||||
rules all being performed at once. In general, if you need one inflection
|
||||
rule to take precedence over another, put it in an earlier trie, rather than
|
||||
putting it earlier in the same trie.
|
||||
|
||||
For the implementation of these rules, see //Tries and Inflections//.
|
||||
|
||||
@ Once we have that general inflection machinery, most of what we need to
|
||||
do becomes a simple matter of writing wrapper functions for tries.
|
||||
|
||||
(*) //ArticleInflection::preface_by_article// handles the variation of articles:
|
||||
for example, mutating "a" to "an" when it comes before "orange", thus making
|
||||
"an orange" rather than "a orange".
|
||||
|
||||
(*) //Grading::make_comparative// turns "tall" into "taller".
|
||||
|
||||
(*) //Grading::make_superlative// turns "tall" into "tallest".
|
||||
|
||||
(*) //Grading::make_quiddity// turns "tall" into "tallness".
|
||||
|
||||
(*) //PastParticiples::pasturise_wording// turns "looking away" to "looked away".
|
||||
|
||||
(*) //Pluralisation::make// produces a series of allowable plurals for a
|
||||
word, using a combination of a trie to handle regular pluralisation (for
|
||||
English, we use Conway's algorithm) and a dictionary of user-supplied
|
||||
exceptions.
|
||||
|
||||
@ Tries are highly language specific and should not be translated as such:
|
||||
instead, an appropriate version needs to be written for every language.
|
||||
The tries for English are in //English Inflections//.
|
||||
|
||||
Except at the very top level, translators are free to created new tries
|
||||
and name them as they please. For example, the Spanish implementation of
|
||||
= (text as InC)
|
||||
<singular-noun-to-its-indefinite-article>
|
||||
=
|
||||
may look entirely unlike its English version, but at the top level it still
|
||||
has to have that name.
|
||||
|
||||
Lower-level tries used in the implementation should have names beginning
|
||||
with a language code: hence the names "en-" used in //English Inflections//.
|
|
@ -14,9 +14,9 @@ void Unit::test_adjectives(text_stream *arg) {
|
|||
if (Lexer::word(i) == PARBREAK_V) continue;
|
||||
wording W = Wordings::one_word(i);
|
||||
PRINT("%W --> ", W);
|
||||
PRINT("comparative: %W, ", Grading::make_comparative(W, English_language));
|
||||
PRINT("superlative: %W, ", Grading::make_superlative(W, English_language));
|
||||
PRINT("quiddity: %W\n", Grading::make_quiddity(W, English_language));
|
||||
PRINT("comparative: %W, ", Grading::make_comparative(W, InflectionDefns::default_nl(NULL)));
|
||||
PRINT("superlative: %W, ", Grading::make_superlative(W, InflectionDefns::default_nl(NULL)));
|
||||
PRINT("quiddity: %W\n", Grading::make_quiddity(W, InflectionDefns::default_nl(NULL)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ void Unit::test_articles(text_stream *arg) {
|
|||
TEMPORARY_TEXT(T);
|
||||
WRITE_TO(T, "%W", W);
|
||||
TEMPORARY_TEXT(AT);
|
||||
ArticleInflection::preface_by_article(AT, T, English_language);
|
||||
ArticleInflection::preface_by_article(AT, T, InflectionDefns::default_nl(NULL));
|
||||
PRINT("%S --> %S\n", T, AT);
|
||||
DISCARD_TEXT(AT);
|
||||
DISCARD_TEXT(T);
|
||||
|
@ -62,12 +62,12 @@ void Unit::test_declensions(text_stream *arg) {
|
|||
if (Lexer::word(i) == f_V) { gen = FEMININE_GENDER; continue; }
|
||||
if (Lexer::word(i) == n_V) { gen = NEUTER_GENDER; continue; }
|
||||
wording W = Wordings::one_word(i);
|
||||
declension D = Declensions::decline(W, English_language, gen, 1);
|
||||
declension AD = Declensions::decline_article(PW, English_language, gen, 1);
|
||||
declension D = Declensions::decline(W, InflectionDefns::default_nl(NULL), gen, 1);
|
||||
declension AD = Declensions::decline_article(PW, InflectionDefns::default_nl(NULL), gen, 1);
|
||||
PRINT("%W --> ", W);
|
||||
Declensions::writer(STDOUT, &D, &AD);
|
||||
D = Declensions::decline(W, English_language, gen, 2);
|
||||
AD = Declensions::decline_article(PW, English_language, gen, 2);
|
||||
D = Declensions::decline(W, InflectionDefns::default_nl(NULL), gen, 2);
|
||||
AD = Declensions::decline_article(PW, InflectionDefns::default_nl(NULL), gen, 2);
|
||||
PRINT("pl --> ");
|
||||
Declensions::writer(STDOUT, &D, &AD);
|
||||
PRINT("\n");
|
||||
|
@ -106,7 +106,7 @@ void Unit::test_plurals(text_stream *arg) {
|
|||
TEMPORARY_TEXT(G);
|
||||
WRITE_TO(G, "%W", W);
|
||||
TEMPORARY_TEXT(ASAGIG);
|
||||
Pluralisation::regular(ASAGIG, G, English_language);
|
||||
Pluralisation::regular(ASAGIG, G, InflectionDefns::default_nl(NULL));
|
||||
PRINT("%S --> %S\n", G, ASAGIG);
|
||||
DISCARD_TEXT(ASAGIG);
|
||||
DISCARD_TEXT(G);
|
||||
|
@ -129,7 +129,7 @@ void Unit::test_verbs(text_stream *arg) {
|
|||
if (c++ < 10) {
|
||||
PRINT("Verb %W -->\n", W);
|
||||
TEMPORARY_TEXT(T);
|
||||
Conjugation::test(T, W, English_language);
|
||||
Conjugation::test(T, W, InflectionDefns::default_nl(NULL));
|
||||
Regexp::replace(T, L"%^", L"\n", REP_REPEATING);
|
||||
PRINT("%S\n", T);
|
||||
DISCARD_TEXT(T);
|
||||
|
|
|
@ -112,9 +112,10 @@ we add a new one.
|
|||
=
|
||||
individual_name *Nouns::add_to_noun_and_reg(noun *t,
|
||||
wording W, NATURAL_LANGUAGE_WORDS_TYPE *foreign_language, int gender, int number, int options) {
|
||||
individual_name *in = Clusters::add(t->names, W, foreign_language, gender, number,
|
||||
linked_list *L = Clusters::add(t->names, W, foreign_language, gender, number,
|
||||
(options & REGISTER_PLURAL_NTOPT)?TRUE:FALSE);
|
||||
for (; in; in = in->next)
|
||||
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 = ExcerptMeanings::register(
|
||||
t->registration_category,
|
||||
|
|
|
@ -70,7 +70,7 @@ void Occurrence::log(OUTPUT_STREAM, void *vtp) {
|
|||
default: WRITE(": <invalid-units>"); break;
|
||||
}
|
||||
if (tp->tense != IS_TENSE) {
|
||||
WRITE(": "); Linguistics::log_tense_number(OUT, tp->tense);
|
||||
WRITE(": "); InflectionDefns::log_tense_number(OUT, tp->tense);
|
||||
}
|
||||
WRITE(">");
|
||||
}
|
||||
|
|
|
@ -326,7 +326,7 @@ A usage is "foreign" if it belongs to a language other than English:
|
|||
int VerbUsages::is_foreign(verb_usage *vu) {
|
||||
if ((vu->verb_used) &&
|
||||
(vu->verb_used->conjugation->defined_in) &&
|
||||
(vu->verb_used->conjugation->defined_in != English_language)) {
|
||||
(vu->verb_used->conjugation->defined_in != InflectionDefns::default_nl(NULL))) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
|
|
@ -55,7 +55,7 @@ any text but then fail.
|
|||
|
||||
@ =
|
||||
<stock> ::=
|
||||
verb <cardinal-number> ... ==> R[1]; *XP = Conjugation::conjugate(WordAssemblages::from_wording(FW[1]), English_language);
|
||||
verb <cardinal-number> ... ==> R[1]; *XP = Conjugation::conjugate(WordAssemblages::from_wording(FW[1]), InflectionDefns::default_nl(NULL));
|
||||
|
||||
@h Syntax tree.
|
||||
|
||||
|
|
Loading…
Reference in a new issue