mirror of
https://github.com/ganelson/inform.git
synced 2024-06-16 23:30:44 +03:00
Completed inflections
This commit is contained in:
parent
eace688fea
commit
7e78952505
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
v10.1.0-alpha.1+6Q53 'Krypton' (23 May 2020)
|
||||
v10.1.0-alpha.1+6Q54 'Krypton' (24 May 2020)
|
||||
|
||||
## About Inform 7
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: alpha.1
|
||||
Build Date: 23 May 2020
|
||||
Build Number: 6Q53
|
||||
Build Date: 24 May 2020
|
||||
Build Number: 6Q54
|
||||
|
|
|
@ -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">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="identifier-syntax">DefaultLanguage::set</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">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">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">DefaultLanguage::get</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">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-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">DefaultLanguage::get</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">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="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">DefaultLanguage::get</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">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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> == </span><span class="identifier-syntax">DefaultLanguage::get</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>> = InflectionDefns::default_nl(NULL);</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>> = DefaultLanguage::get(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">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="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">DefaultLanguage::get</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">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_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">DefaultLanguage::get</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">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">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">DefaultLanguage::get</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>
|
||||
|
@ -1113,11 +1113,11 @@ foreign verbs (4).
|
|||
<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">vc</span><span class="plain-syntax">-></span><span class="identifier-syntax">tabulations</span><span class="plain-syntax">[</span><span class="identifier-syntax">ACTIVE_MOOD</span><span class="plain-syntax">].</span><span class="identifier-syntax">vc_text</span><span class="plain-syntax">[</span><span class="identifier-syntax">tense</span><span class="plain-syntax">][</span><span class="identifier-syntax">sense</span><span class="plain-syntax">][</span><span class="identifier-syntax">part</span><span class="plain-syntax">-1]);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::nonempty</span><span class="plain-syntax">(*</span><span class="identifier-syntax">wa</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">some_exist</span><span 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::compare</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">common</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">common</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">some_differ</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">part</span><span class="plain-syntax"> != </span><span class="constant-syntax">3</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">common_except_3PS</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">common_except_3PS</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wa</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::compare</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">common_except_3PS</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="identifier-syntax">common_except_3PS</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">some_except_3PS_differ</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">else</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">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">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">DefaultLanguage::get</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>
|
||||
|
|
|
@ -82,52 +82,21 @@ which use this module:
|
|||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>Like all modules, this one must define a <span class="extract"><span class="extract-syntax">start</span></span> and <span class="extract"><span class="extract-syntax">end</span></span> function:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">CONSTRUCTED_PAST_PARTICIPLES_DA</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">CONSTRUCTED_PLURALS_DA</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">InflectionsModule::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-im.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Register this module's stream writers</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-im.html#SP3_3" class="named-paragraph-link"><span class="named-paragraph">Register this module's debugging log aspects</span><span class="named-paragraph-number">3.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-im.html#SP3_4" class="named-paragraph-link"><span class="named-paragraph">Register this module's debugging log writers</span><span class="named-paragraph-number">3.4</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-im.html#SP3_5" class="named-paragraph-link"><span class="named-paragraph">Register this module's command line switches</span><span class="named-paragraph-number">3.5</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTRUCTED_PAST_PARTICIPLES_DA</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"constructed past participles"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTRUCTED_PLURALS_DA</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"constructed plurals"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InflectionsModule::end</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</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><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register this module's stream writers</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> ;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="1-im.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_2"></a><b>§3.2. </b></p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">CONSTRUCTED_PAST_PARTICIPLES_DA</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">CONSTRUCTED_PLURALS_DA</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3_3"></a><b>§3.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register this module's debugging log aspects</span><span class="named-paragraph-number">3.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTRUCTED_PAST_PARTICIPLES_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"constructed past participles"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTRUCTED_PLURALS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"constructed plurals"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="1-im.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_4"></a><b>§3.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register this module's debugging log writers</span><span class="named-paragraph-number">3.4</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> ;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="1-im.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3_5"></a><b>§3.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register this module's command line switches</span><span class="named-paragraph-number">3.5</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> ;</span>
|
||||
</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="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>
|
||||
<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-tai.html">2</a></li><li class="progresschapter"><a href="3-lc.html">3</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="2-tai.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
<main role="main">
|
||||
<!--Weave of 'Article Inflection' 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#3">Chapter 3: Grammatical Uses of Inflection</a></li><li><b>Article Inflection</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#2">Chapter 2: Simple Inflections</a></li><li><b>Article Inflection</b></li></ul></div>
|
||||
<p class="purpose">To inflect "a" into "an", and so forth.</p>
|
||||
|
||||
<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
|
||||
|
@ -72,14 +72,14 @@ trickier than they look).
|
|||
<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">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="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</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-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>
|
||||
<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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-tai.html">tai</a></li><li class="progresscurrent">ai</li><li class="progresssection"><a href="2-ga.html">ga</a></li><li class="progresssection"><a href="2-pp.html">pp</a></li><li class="progresssection"><a href="2-plr.html">plr</a></li><li class="progresschapter"><a href="3-lc.html">3</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="2-ga.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
|
@ -56,7 +56,7 @@
|
|||
<main role="main">
|
||||
<!--Weave of 'Grading Adjectives' 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#3">Chapter 3: Grammatical Uses of Inflection</a></li><li><b>Grading Adjectives</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#2">Chapter 2: Simple Inflections</a></li><li><b>Grading Adjectives</b></li></ul></div>
|
||||
<p class="purpose">To inflect adjectives into comparative and superlative forms.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. </b>In English, the comparative of an adjective can generally be formed by
|
||||
|
@ -80,11 +80,11 @@ 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="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">nl</span><span class="plain-syntax"> = </span><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="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>
|
||||
<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><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tai.html#SP1" class="function-link"><span class="function-syntax">Inflect::suffix</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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax"><comparative-construction></span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">,</span>
|
||||
|
@ -107,11 +107,11 @@ 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="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">nl</span><span class="plain-syntax"> = </span><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="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>
|
||||
<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><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tai.html#SP1" class="function-link"><span class="function-syntax">Inflect::suffix</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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">transformed</span><span class="plain-syntax">);</span>
|
||||
|
@ -133,11 +133,11 @@ comparison: for instance, "tallness" for "tall", or "steeliness" for "steely".
|
|||
<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="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">nl</span><span class="plain-syntax"> = </span><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="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>
|
||||
<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><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-tai.html#SP1" class="function-link"><span class="function-syntax">Inflect::suffix</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>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">transformed</span><span class="plain-syntax">);</span>
|
||||
|
@ -146,7 +146,7 @@ comparison: for instance, "tallness" for "tall", or "steeliness" for "steely".
|
|||
<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="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>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-tai.html">tai</a></li><li class="progresssection"><a href="2-ai.html">ai</a></li><li class="progresscurrent">ga</li><li class="progresssection"><a href="2-pp.html">pp</a></li><li class="progresssection"><a href="2-plr.html">plr</a></li><li class="progresschapter"><a href="3-lc.html">3</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="2-pp.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
|
@ -63,10 +63,10 @@ function togglePopup(material_id) {
|
|||
<main role="main">
|
||||
<!--Weave of 'Pluralisation' 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#3">Chapter 3: Grammatical Uses of Inflection</a></li><li><b>Pluralisation</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#2">Chapter 2: Simple Inflections</a></li><li><b>Pluralisation</b></li></ul></div>
|
||||
<p class="purpose">To form plurals of nouns.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-plr.html#SP1">§1. Dictionary</a></li><li><a href="3-plr.html#SP3">§3. Searching the plural dictionary</a></li><li><a href="3-plr.html#SP4">§4. The pluralizing trie</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-plr.html#SP1">§1. Dictionary</a></li><li><a href="2-plr.html#SP3">§3. Searching the plural dictionary</a></li><li><a href="2-plr.html#SP4">§4. The pluralizing trie</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Dictionary. </b>A modest dictionary of plurals is maintained to allow the user to record
|
||||
better plurals than the ones we would make ourselves. This assumes that a
|
||||
|
@ -110,7 +110,7 @@ one not found in the dictionary).
|
|||
<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="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="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">nl</span><span class="plain-syntax"> = </span><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">plural_dictionary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pde</span><span class="plain-syntax">;</span>
|
||||
|
||||
|
@ -126,7 +126,7 @@ one not found in the dictionary).
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">pde</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="3-plr.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Make a new plural by lexical writing back</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-plr.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Make a new plural by lexical writing back</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">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
@ -155,29 +155,30 @@ it can be rebuilt quickly whenever needed again.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pluralised</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">original</span><span class="plain-syntax">, </span><span class="string-syntax">"%+W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::one_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">last_wn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (*(</span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">last_wn</span><span class="plain-syntax">)) == </span><span class="character-syntax">'\"'</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">pluralised</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><a href="3-plr.html#SP4" class="function-link"><span class="function-syntax">Pluralisation::regular</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pluralised</span><span class="plain-syntax">, </span><span class="identifier-syntax">original</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">else</span><span class="plain-syntax"> </span><a href="2-plr.html#SP4" class="function-link"><span class="function-syntax">Pluralisation::regular</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pluralised</span><span class="plain-syntax">, </span><span class="identifier-syntax">original</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">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pluralised</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">PW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::end</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">original</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">pluralised</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">"[Constructing plural of %W as %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>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-plr.html#SP3">§3</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-plr.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. The pluralizing trie. </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.
|
||||
</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">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="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="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="2-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="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="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="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>
|
||||
<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><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-tai.html#SP1" class="function-link"><span class="function-syntax">Inflect::suffix</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-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>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-tai.html">tai</a></li><li class="progresssection"><a href="2-ai.html">ai</a></li><li class="progresssection"><a href="2-ga.html">ga</a></li><li class="progresssection"><a href="2-pp.html">pp</a></li><li class="progresscurrent">plr</li><li class="progresschapter"><a href="3-lc.html">3</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="3-lc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
|
@ -63,10 +63,10 @@ function togglePopup(material_id) {
|
|||
<main role="main">
|
||||
<!--Weave of 'Past Participles' 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#3">Chapter 3: Grammatical Uses of Inflection</a></li><li><b>Past Participles</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#2">Chapter 2: Simple Inflections</a></li><li><b>Past Participles</b></li></ul></div>
|
||||
<p class="purpose">To inflect present into past participles.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-pp.html#SP1">§1. Constructing past participles</a></li><li><a href="3-pp.html#SP2">§2. The pasturising trie</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-pp.html#SP1">§1. Constructing past participles</a></li><li><a href="2-pp.html#SP2">§2. The pasturising trie</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Constructing past participles. </b>For example, "turning away" to "turned away".
|
||||
</p>
|
||||
|
@ -80,7 +80,7 @@ function togglePopup(material_id) {
|
|||
<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">Wordings::one_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get_first_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">) == </span><span class="character-syntax">'\"'</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">pasturised</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-pp.html#SP2" class="function-link"><span class="function-syntax">PastParticiples::pasturise_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pasturised</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><a href="2-pp.html#SP2" class="function-link"><span class="function-syntax">PastParticiples::pasturise_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pasturised</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">i</span><span class="plain-syntax"> > </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">Feeds::feed_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::up_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">-1));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pasturised</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> < </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">Feeds::feed_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::from</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">+1));</span>
|
||||
|
@ -102,15 +102,15 @@ above. It expects only a single word.
|
|||
</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">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="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="2-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>
|
||||
<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><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">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">Inflect::suffix</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="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>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-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="progresscurrentchapter">2</li><li class="progresssection"><a href="2-tai.html">tai</a></li><li class="progresssection"><a href="2-ai.html">ai</a></li><li class="progresssection"><a href="2-ga.html">ga</a></li><li class="progresscurrent">pp</li><li class="progresssection"><a href="2-plr.html">plr</a></li><li class="progresschapter"><a href="3-lc.html">3</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="2-plr.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
|
@ -63,60 +63,85 @@ function togglePopup(material_id) {
|
|||
<main role="main">
|
||||
<!--Weave of 'Tries and Inflections' 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>Tries and Inflections</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#2">Chapter 2: Simple Inflections</a></li><li><b>Tries and Inflections</b></li></ul></div>
|
||||
<p class="purpose">Using tries to inflect word endings.</p>
|
||||
|
||||
<ul class="toc"><li><a href="2-tai.html#SP1">§1. Suffix inflections</a></li><li><a href="2-tai.html#SP2">§2. General tries</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-tai.html#SP1">§1. Suffix inflections</a></li><li><a href="2-tai.html#SP3">§3. General tries</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Suffix inflections. </b>The following inflects the ending of the supplied text. It does so by
|
||||
running the text through an avinue (a sequence of tries), whose result
|
||||
is an instruction on how to modify that text: for example, the result
|
||||
<span class="extract"><span class="extract-syntax">"3ize"</span></span> tells us to strike out the last 3 characters and add "ize".
|
||||
The special character <span class="extract"><span class="extract-syntax">+</span></span> means "duplicate the last character" and
|
||||
is useful for inflections which double consonants, such as "big" to
|
||||
"bigger", which can be done with the instruction <span class="extract"><span class="extract-syntax">"0+er"</span></span>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">If there's no initial digit, the result replaces the original entirely;
|
||||
if the result is null, i.e., if the avinue finds nothing, the result is
|
||||
the same as the original.
|
||||
running the text through an avinue: see <a href="../../../inweb/docs/foundation-module/4-taa.html" class="internal">Tries and Avinues (in foundation)</a>,
|
||||
which is where the asterisk notation is handled.
|
||||
</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>, <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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Inflect::suffix</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">Inflect::suffix</span></span>:<br/><a href="2-tai.html#SP3">§3</a><br/>Grading Adjectives - <a href="2-ga.html#SP2">§2</a>, <a href="2-ga.html#SP3">§3</a>, <a href="2-ga.html#SP4">§4</a><br/>Past Participles - <a href="2-pp.html#SP2">§2</a><br/>Pluralisation - <a href="2-plr.html#SP4">§4</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><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-tai.html#SP2" class="function-link"><span class="function-syntax">Inflect::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>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>The <a href="../../../inweb/docs/foundation-module/index.html" class="internal">foundation</a> code returns a <span class="extract"><span class="extract-syntax">result</span></span> which may be null, if no match
|
||||
was found. In that event, we leave the text unchanged, just as if the result
|
||||
had been <span class="extract"><span class="extract-syntax">0</span></span> — meaning "change nothing".
|
||||
</p>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Inflections::follow_suffix_instruction</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">Inflections::follow_suffix_instruction</span></span>:<br/>Declensions - <a href="3-dcl.html#SP3">§3</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">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">instruction</span><span class="plain-syntax">) {</span>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Inflect::follow_suffix_instruction</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">Inflect::follow_suffix_instruction</span></span>:<br/><a href="2-tai.html#SP1">§1</a><br/>Declensions - <a href="3-dcl.html#SP7">§7</a>, <a href="3-dcl.html#SP9">§9</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">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">instruction</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">success</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">instruction</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">success</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="identifier-syntax">instruction</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="string-syntax">"0"</span><span class="plain-syntax">; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">back</span><span class="plain-syntax"> = </span><span class="identifier-syntax">instruction</span><span class="plain-syntax">[0] - </span><span class="character-syntax">'0'</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">outcome</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">back</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">back</span><span class="plain-syntax"> > </span><span class="constant-syntax">9</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">outcome</span><span class="plain-syntax">, </span><span class="string-syntax">"%w"</span><span class="plain-syntax">, </span><span class="identifier-syntax">instruction</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">len</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">len</span><span class="plain-syntax">-</span><span class="identifier-syntax">back</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">outcome</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</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">instruction</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">] == </span><span class="character-syntax">'+'</span><span class="plain-syntax">) { </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">last</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">outcome</span><span class="plain-syntax">); </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">outcome</span><span class="plain-syntax">, </span><span class="identifier-syntax">last</span><span class="plain-syntax">); </span><span class="identifier-syntax">j</span><span class="plain-syntax">++; }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">instruction</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">outcome</span><span class="plain-syntax">, </span><span class="identifier-syntax">instruction</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">outcome</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">) == </span><span class="character-syntax">'+'</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="character-syntax">' '</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">PUT</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tai.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Modify the original according to the instruction</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-tai.html#SP2_2" class="named-paragraph-link"><span class="named-paragraph">Write the output, interpreting plus signs as word breaks</span><span class="named-paragraph-number">2.2</span></a></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">outcome</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">success</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. General tries. </b>Here we take a word assemblage and apply suffix inflection to the first word
|
||||
alone, preserving the rest. However, if the result of this inflection contains
|
||||
any <span class="extract"><span class="extract-syntax">+</span></span> signs, those become word boundaries. This allows for inflections which
|
||||
do more than simply fiddle with the final letters.
|
||||
<p class="commentary firstcommentary"><a id="SP2_1"></a><b>§2.1. </b>In general the result either has an initial digit, in which case it removes
|
||||
that many terminal letters, or does not, in which case it removes all the
|
||||
letters (and thus the result text replaces the original entirely).
|
||||
The special character <span class="extract"><span class="extract-syntax">+</span></span> after a digit means "duplicate the last character";
|
||||
in other contexts it means "break words here".
|
||||
</p>
|
||||
|
||||
<p class="commentary">For example, the result <span class="extract"><span class="extract-syntax">3ize</span></span> tells us to strike out the last 3 characters and
|
||||
add "ize".
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Modify the original according to the instruction</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">back</span><span class="plain-syntax"> = </span><span class="identifier-syntax">instruction</span><span class="plain-syntax">[0] - </span><span class="character-syntax">'0'</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">back</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">back</span><span class="plain-syntax"> > </span><span class="constant-syntax">9</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">outcome</span><span class="plain-syntax">, </span><span class="string-syntax">"%w"</span><span class="plain-syntax">, </span><span class="identifier-syntax">instruction</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">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">len</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">); </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="identifier-syntax">len</span><span class="plain-syntax">-</span><span class="identifier-syntax">back</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">outcome</span><span class="plain-syntax">, </span><span class="identifier-syntax">Str::get_at</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</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">instruction</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">] == </span><span class="character-syntax">'+'</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">last</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::get_last_char</span><span class="plain-syntax">(</span><span class="identifier-syntax">outcome</span><span class="plain-syntax">); </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">outcome</span><span class="plain-syntax">, </span><span class="identifier-syntax">last</span><span class="plain-syntax">); </span><span class="identifier-syntax">j</span><span class="plain-syntax">++;</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">instruction</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">outcome</span><span class="plain-syntax">, </span><span class="identifier-syntax">instruction</span><span class="plain-syntax">[</span><span class="identifier-syntax">j</span><span class="plain-syntax">]);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-tai.html#SP2">§2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2_2"></a><b>§2.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Write the output, interpreting plus signs as word breaks</span><span class="named-paragraph-number">2.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">outcome</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">) == </span><span class="character-syntax">'+'</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">(</span><span class="character-syntax">' '</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">PUT</span><span class="plain-syntax">(</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">));</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="2-tai.html#SP2">§2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. General tries. </b>Here we take a word assemblage and apply suffix inflection to the first word
|
||||
alone, preserving the rest: for example, "make the tea" might become "making
|
||||
the tea". However, if the result of this inflection contains any <span class="extract"><span class="extract-syntax">+</span></span> signs,
|
||||
those once again become word boundaries.
|
||||
</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">Inflect::first_word</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">Inflect::first_word</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#SP8_2_1">§8.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>
|
||||
|
@ -125,7 +150,7 @@ do more than simply fiddle with the final letters.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">unsuffixed</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">suffixed</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">unsuffixed</span><span class="plain-syntax">, </span><span class="string-syntax">"%V"</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</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">suffixed</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">unsuffixed</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><a href="2-tai.html#SP1" class="function-link"><span class="function-syntax">Inflect::suffix</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">suffixed</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">unsuffixed</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">s</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">unsuffixed</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">) == </span><span class="character-syntax">'+'</span><span class="plain-syntax">) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">suffixed</span><span class="plain-syntax">, </span><span class="character-syntax">' '</span><span class="plain-syntax">);</span>
|
||||
|
@ -139,7 +164,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="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>
|
||||
<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">tai</li><li class="progresssection"><a href="2-ai.html">ai</a></li><li class="progresssection"><a href="2-ga.html">ga</a></li><li class="progresssection"><a href="2-pp.html">pp</a></li><li class="progresssection"><a href="2-plr.html">plr</a></li><li class="progresschapter"><a href="3-lc.html">3</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="2-ai.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -20,6 +20,20 @@ function togglePopup(material_id) {
|
|||
</script>
|
||||
|
||||
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<script>
|
||||
MathJax = {
|
||||
tex: {
|
||||
inlineMath: '$', '$'], ['\\(', '\\)'
|
||||
},
|
||||
svg: {
|
||||
fontCache: 'global'
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" id="MathJax-script" async
|
||||
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
|
||||
</script>
|
||||
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
|
@ -63,12 +77,22 @@ function togglePopup(material_id) {
|
|||
<main role="main">
|
||||
<!--Weave of 'Declensions' 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#3">Chapter 3: Grammatical Uses of Inflection</a></li><li><b>Declensions</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: Declension and Conjugation</a></li><li><b>Declensions</b></li></ul></div>
|
||||
<p class="purpose">Declensions are sets of inflected variations of a common stem according to grammatical case.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-dcl.html#SP1">§1. Declension</a></li></ul><hr class="tocbar">
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. </b>The traditional term "declension" refers to the set of inflected forms of a
|
||||
word which does not serve as a verb: nouns, adjectives and pronouns all have
|
||||
"declensions". These forms generally vary according to gender, number and
|
||||
also "case", which expresses context.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Declension. </b></p>
|
||||
<p class="commentary">The <a href="index.html" class="internal">inflections</a> module uses the term "declension" in a more limited sense:
|
||||
it is just the set of variations by case. Variations by gender and number are
|
||||
taken care of by what are less elegantly called <a href="3-nc.html" class="internal">Name Clusters</a>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">At any rate, a <a href="3-dcl.html#SP1" class="internal">declension</a> object is a set of wordings, one for each case:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">declension</span><span class="plain-syntax"> {</span>
|
||||
|
@ -77,183 +101,11 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax">} </span><span class="reserved-syntax">declension</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure declension is private to this section.</li></ul>
|
||||
<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="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="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>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2_1"></a><b>§2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Fix the origin</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>Cases in a language are itemised in the special nonterminal <grammatical-case-names>:
|
||||
</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">nc</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">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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">c</span><span class="plain-syntax"> < </span><span class="identifier-syntax">nc</span><span class="plain-syntax">; </span><span class="identifier-syntax">c</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_WORDING</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</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><span class="identifier-syntax">Lexer::set_word_location</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Lexer::word_location</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)));</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-dcl.html#SP2">§2</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </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_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="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>
|
||||
<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="identifier-syntax">definition_language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="identifier-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">for</span><span class="plain-syntax"> (</span><span class="identifier-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="identifier-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="identifier-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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ptoken_category</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NONTERMINAL_PTC</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">"line in <noun-declension> malformed"</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">gender_letter</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Vocabulary::get_exemplar</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-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="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">gender_letter</span><span class="plain-syntax">[0] == </span><span class="character-syntax">'*'</span><span class="plain-syntax">) ||</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">gender_letter</span><span class="plain-syntax">[0] == </span><span class="character-syntax">'m'</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">gen</span><span class="plain-syntax"> == </span><span class="constant-syntax">MASCULINE_GENDER</span><span class="plain-syntax">)) ||</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">gender_letter</span><span class="plain-syntax">[0] == </span><span class="character-syntax">'f'</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="plain-syntax"> ((</span><span class="identifier-syntax">gender_letter</span><span class="plain-syntax">[0] == </span><span class="character-syntax">'n'</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="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">found</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">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gnt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</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">D</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP3" class="function-link"><span class="function-syntax">Declensions::decline_from_irregulars</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">gnt</span><span class="plain-syntax">, </span><span class="identifier-syntax">num</span><span class="plain-syntax">, &</span><span class="identifier-syntax">found</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ptoken_category</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NONTERMINAL_PTC</span><span class="plain-syntax">) ||</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"this line must end with two nonterminals"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tnt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_pt</span><span class="plain-syntax">;</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_from_groups</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">gnt</span><span class="plain-syntax">, </span><span class="identifier-syntax">tnt</span><span class="plain-syntax">, </span><span class="identifier-syntax">num</span><span class="plain-syntax">, &</span><span class="identifier-syntax">found</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">found</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="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</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 declension table terminated"</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_from_irregulars</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">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gnt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">num</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">found</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">found</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">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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">) == </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="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">gnt</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>
|
||||
<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="identifier-syntax">definition_language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="identifier-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">for</span><span class="plain-syntax"> (</span><span class="identifier-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="identifier-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="identifier-syntax">next_pr</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">stem</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ve_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">stem</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">nc</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">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">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="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_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="identifier-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="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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"nonterminals are not allowed in irregular declensions"</span><span 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</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> < </span><span class="identifier-syntax">nc</span><span class="plain-syntax">)) || ((</span><span class="identifier-syntax">num</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">nc</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">stem</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">result</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">stem</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="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">result</span><span class="plain-syntax">, </span><span class="identifier-syntax">stem</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Vocabulary::get_exemplar</span><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ve_pt</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">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="identifier-syntax">nc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">result</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">stem</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">result</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="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">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">nc</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too few cases in irregular declension"</span><span 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">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">nc</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too many cases in irregular declension"</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="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_from_groups</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">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gnt</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">num</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">found</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="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">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>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">found</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="identifier-syntax">found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="identifier-syntax">result</span><span class="plain-syntax">[0] - </span><span class="character-syntax">'0'</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">group</span><span class="plain-syntax"> <= </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">group</span><span class="plain-syntax"> > </span><span class="constant-syntax">9</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"noun declension nonterminal result not a group number"</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>
|
||||
<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="identifier-syntax">definition_language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="identifier-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">for</span><span class="plain-syntax"> (</span><span class="identifier-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="identifier-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="identifier-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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ptoken_category</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NONTERMINAL_PTC</span><span class="plain-syntax">) ||</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"noun declension nonterminal malformed"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (--</span><span class="identifier-syntax">group</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-dcl.html#SP3" class="function-link"><span class="function-syntax">Declensions::decline_from</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">num</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"noun declension nonterminal has too few groups"</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">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_from</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="identifier-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">num</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">nc</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">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>
|
||||
<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="identifier-syntax">definition_language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="identifier-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">for</span><span class="plain-syntax"> (</span><span class="identifier-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="identifier-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="identifier-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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"<noun-declension> too complex"</span><span 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="identifier-syntax">nc</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">num</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">)) || ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">nc</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">num</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">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">stem</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">result</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">stem</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="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">result</span><span class="plain-syntax">, </span><span class="identifier-syntax">stem</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Vocabulary::get_exemplar</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ve_pt</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">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="identifier-syntax">nc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">result</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">stem</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">result</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="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">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">nc</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too few cases in declension"</span><span 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">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">nc</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too many cases in declension"</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="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"declination unavailable"</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="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>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Declensions::no_cases</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">Declensions::no_cases</span></span>:<br/><a href="3-dcl.html#SP2_1">§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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Declensions::no_cases</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::no_cases</span></span>:<br/><a href="3-dcl.html#SP3">§3</a>, <a href="3-dcl.html#SP4">§4</a>, <a href="3-dcl.html#SP5_1">§5.1</a>, <a href="3-dcl.html#SP7">§7</a>, <a href="3-dcl.html#SP9">§9</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="identifier-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="function-syntax"><grammatical-case-names></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>
|
||||
<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="identifier-syntax">definition_language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="identifier-syntax">definition_language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">nl</span><span class="plain-syntax">)) {</span>
|
||||
|
@ -267,12 +119,17 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"<grammatical-case-names> not provided for this language"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>The following is 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">Declensions::writer</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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="reserved-syntax">declension</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">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> = </span><span class="function-syntax"><grammatical-case-names></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">nc</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="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">nc</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP2" 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="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>
|
||||
<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="identifier-syntax">definition_language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="identifier-syntax">definition_language</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="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="identifier-syntax">definition_language</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">pl</span><span class="plain-syntax">-></span><span class="identifier-syntax">definition_language</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="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">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="identifier-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="identifier-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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) ||</span>
|
||||
|
@ -292,8 +149,231 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"<grammatical-case-names> not provided for this language"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>And this function extracts the right form for a given case <span class="extract"><span class="extract-syntax">c</span></span>:
|
||||
</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">Declensions::in_case</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::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#SP2" 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="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>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>So much for using declensions; now to generate them. They are inflected from
|
||||
the stem by special Preform nonterminals:
|
||||
</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::of_noun</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::of_noun</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="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="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">declension</span><span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP6" 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#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Fix the origin</span><span class="named-paragraph-number">5.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::of_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="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="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">declension</span><span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP6" 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#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Fix the origin</span><span class="named-paragraph-number">5.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>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5_1"></a><b>§5.1. </b>If a word comes from a given file and line number in the source text, then
|
||||
we will say that so does any inflected form of it:
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Fix the origin</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </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#SP2" class="function-link"><span class="function-syntax">Declensions::no_cases</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">); </span><span class="identifier-syntax">c</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_WORDING</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</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><span class="identifier-syntax">Lexer::set_word_location</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lexer::word_location</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>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-dcl.html#SP5">§5</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>For the format of the table expressed by the nonterminal <span class="extract"><span class="extract-syntax">nt</span></span>, see
|
||||
<a href="P-wtmd.html" class="internal">What This Module Does</a>.
|
||||
</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_inner</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">Declensions::decline_inner</span></span>:<br/><a href="3-dcl.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="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="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">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>
|
||||
<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="identifier-syntax">definition_language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="identifier-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">for</span><span class="plain-syntax"> (</span><span class="identifier-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="identifier-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="identifier-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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ptoken_category</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NONTERMINAL_PTC</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">"line in <noun-declension> malformed"</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">gender_letter</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Vocabulary::get_exemplar</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-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="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">gender_letter</span><span class="plain-syntax">[0] == </span><span class="character-syntax">'*'</span><span class="plain-syntax">) ||</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">gender_letter</span><span class="plain-syntax">[0] == </span><span class="character-syntax">'m'</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">gen</span><span class="plain-syntax"> == </span><span class="constant-syntax">MASCULINE_GENDER</span><span class="plain-syntax">)) ||</span>
|
||||
<span class="plain-syntax"> ((</span><span class="identifier-syntax">gender_letter</span><span class="plain-syntax">[0] == </span><span class="character-syntax">'f'</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="plain-syntax"> ((</span><span class="identifier-syntax">gender_letter</span><span class="plain-syntax">[0] == </span><span class="character-syntax">'n'</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="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-dcl.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Decline according to this row in declension NT</span><span class="named-paragraph-number">6.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no declension table terminated"</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>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6_1"></a><b>§6.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Decline according to this row in declension NT</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">found</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">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gnt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</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">D</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP7" class="function-link"><span class="function-syntax">Declensions::decline_from_irregulars</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">gnt</span><span class="plain-syntax">, </span><span class="identifier-syntax">num</span><span class="plain-syntax">, &</span><span class="identifier-syntax">found</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ptoken_category</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NONTERMINAL_PTC</span><span class="plain-syntax">) ||</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"this line must end with two nonterminals"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tnt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_pt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP8" class="function-link"><span class="function-syntax">Declensions::decline_from_groups</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">gnt</span><span class="plain-syntax">, </span><span class="identifier-syntax">tnt</span><span class="plain-syntax">, </span><span class="identifier-syntax">num</span><span class="plain-syntax">, &</span><span class="identifier-syntax">found</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">found</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>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-dcl.html#SP6">§6</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b>This is for the two-token form of row, <span class="extract"><span class="extract-syntax">gender table</span></span>:
|
||||
</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_from_irregulars</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Declensions::decline_from_irregulars</span></span>:<br/><a href="3-dcl.html#SP6_1">§6.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">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">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gnt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">num</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">found</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">found</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">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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">) == </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="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">gnt</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>
|
||||
<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="identifier-syntax">definition_language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="identifier-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">for</span><span class="plain-syntax"> (</span><span class="identifier-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="identifier-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="identifier-syntax">next_pr</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">stem</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ve_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">stem</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">))) {</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">nc</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP2" class="function-link"><span class="function-syntax">Declensions::no_cases</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">for</span><span class="plain-syntax"> (</span><span class="identifier-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="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_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="identifier-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="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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"NTs are not allowed in irregular decs"</span><span 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</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> < </span><span class="identifier-syntax">nc</span><span class="plain-syntax">)) || ((</span><span class="identifier-syntax">num</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">nc</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">stem</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">result</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">stem</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="2-tai.html#SP2" class="function-link"><span class="function-syntax">Inflect::follow_suffix_instruction</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">result</span><span class="plain-syntax">, </span><span class="identifier-syntax">stem</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Vocabulary::get_exemplar</span><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ve_pt</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">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="identifier-syntax">nc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">result</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">stem</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">result</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="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">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">nc</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too few cases in irregular ded"</span><span 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">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">nc</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too many cases in irregular dec"</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="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>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b>And this is for the three-token form of row, <span class="extract"><span class="extract-syntax">gender grouper table</span></span>:
|
||||
</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_from_groups</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Declensions::decline_from_groups</span></span>:<br/><a href="3-dcl.html#SP6_1">§6.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">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">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gnt</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">num</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">found</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="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>
|
||||
<span class="plain-syntax"> </span><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="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>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">found</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="identifier-syntax">found</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">group</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-dcl.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Set the group number</span><span class="named-paragraph-number">8.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">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>
|
||||
<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="identifier-syntax">definition_language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="identifier-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">for</span><span class="plain-syntax"> (</span><span class="identifier-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="identifier-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="identifier-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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ptoken_category</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NONTERMINAL_PTC</span><span class="plain-syntax">) ||</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"noun declension nonterminal malformed"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (--</span><span class="identifier-syntax">group</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-dcl.html#SP9" class="function-link"><span class="function-syntax">Declensions::decline_from</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">nt_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">num</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"noun declension nonterminal has too few groups"</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">D</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8_1"></a><b>§8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set the group number</span><span class="named-paragraph-number">8.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="identifier-syntax">result</span><span class="plain-syntax">[0] - </span><span class="character-syntax">'0'</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">group</span><span class="plain-syntax"> <= </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">group</span><span class="plain-syntax"> > </span><span class="constant-syntax">9</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"noun declension grouper result not a group number"</span><span 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">[1]) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">u</span><span class="plain-syntax"> = </span><span class="identifier-syntax">result</span><span class="plain-syntax">[1] - </span><span class="character-syntax">'0'</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">u</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">u</span><span class="plain-syntax"> > </span><span class="constant-syntax">9</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"noun declension grouper result not a group number"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">group</span><span class="plain-syntax"> = </span><span class="identifier-syntax">group</span><span class="plain-syntax">*10 + </span><span class="identifier-syntax">u</span><span 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">[2]) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"noun declension grouper result too high"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-dcl.html#SP8">§8</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>We have now found the actual declension table NT; if there are \(N\) cases
|
||||
in the language, there will be \(2N\) productions in this table, each of which
|
||||
consists of a single word giving the rewriting instruction to use.
|
||||
</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_from</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Declensions::decline_from</span></span>:<br/><a href="3-dcl.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">NATURAL_LANGUAGE_WORDS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nl</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-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">num</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">nc</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP2" class="function-link"><span class="function-syntax">Declensions::no_cases</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>
|
||||
<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="identifier-syntax">definition_language</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="identifier-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">for</span><span class="plain-syntax"> (</span><span class="identifier-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="identifier-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="identifier-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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</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">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_pt</span><span class="plain-syntax"> != </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"<noun-declension> too complex"</span><span 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="identifier-syntax">nc</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">num</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">)) || ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">nc</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">num</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">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">stem</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">result</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">stem</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="2-tai.html#SP2" class="function-link"><span class="function-syntax">Inflect::follow_suffix_instruction</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">result</span><span class="plain-syntax">, </span><span class="identifier-syntax">stem</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Vocabulary::get_exemplar</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">ve_pt</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">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="identifier-syntax">nc</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">result</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">stem</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">result</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="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">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">nc</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too few cases in declension"</span><span 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">2</span><span class="plain-syntax">*</span><span class="identifier-syntax">nc</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too many cases in declension"</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="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"declination unavailable"</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>
|
||||
</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="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>
|
||||
<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-tai.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-lc.html">lc</a></li><li class="progresssection"><a href="3-nc.html">nc</a></li><li class="progresscurrent">dcl</li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="3-vc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Linguistic Definitions</title>
|
||||
<title>Linguistic Constants</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">
|
||||
|
@ -12,14 +12,6 @@
|
|||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<script>
|
||||
function togglePopup(material_id) {
|
||||
var popup = document.getElementById(material_id);
|
||||
popup.classList.toggle("show");
|
||||
}
|
||||
</script>
|
||||
|
||||
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
|
@ -61,12 +53,12 @@ function togglePopup(material_id) {
|
|||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'Linguistic Definitions' generated by Inweb-->
|
||||
<!--Weave of 'Linguistic Constants' 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>Linguistic Definitions</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: Declension and Conjugation</a></li><li><b>Linguistic Constants</b></li></ul></div>
|
||||
<p class="purpose">Some basic linguistic constants are defined.</p>
|
||||
|
||||
<ul class="toc"><li><a href="2-ld.html#SP1">§1. Constants</a></li><li><a href="2-ld.html#SP7">§7. A default language</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="3-lc.html#SP1">§1. Constants</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Constants. </b>First, we support three genders:
|
||||
</p>
|
||||
|
@ -116,12 +108,12 @@ in English. Some languages can use optional extras; French, for example, uses
|
|||
tense 5 for the past historic.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax"> </span><span class="constant-syntax">7</span><span class="plain-syntax"> </span><span class="comment-syntax"> allowing for two optional extras in non-English languages</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">IS_TENSE</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="comment-syntax"> Present</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">WAS_TENSE</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> Past</span>
|
||||
<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>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NO_KNOWN_TENSES</span><span class="plain-syntax"> </span><span class="constant-syntax">7</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">IS_TENSE</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax"> </span><span class="comment-syntax"> Present</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">WAS_TENSE</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> Past</span>
|
||||
<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>
|
||||
|
@ -139,24 +131,8 @@ tense 5 for the past historic.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. A default language. </b>The following is in effect also a constant; Inform sets it to English early
|
||||
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">default_language_for_linguistics</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">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">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="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>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="2-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-tai.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresscurrent">lc</li><li class="progresssection"><a href="3-nc.html">nc</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="3-nc.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
|
@ -63,7 +63,7 @@ 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#3">Chapter 3: Grammatical Uses of Inflection</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: Declension and Conjugation</a></li><li><b>Name Clusters</b></li></ul></div>
|
||||
<p class="purpose">Name clusters are sets of noun or adjective forms, perhaps multiple or in multiple languages, which have in common that they share a meaning.</p>
|
||||
|
||||
<ul class="toc"><li><a href="3-nc.html#SP1">§1. Cluster</a></li><li><a href="3-nc.html#SP5">§5. Plural fixing</a></li><li><a href="3-nc.html#SP6">§6. Searching declensions</a></li><li><a href="3-nc.html#SP9">§9. Meanings</a></li></ul><hr class="tocbar">
|
||||
|
@ -112,10 +112,10 @@ 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">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="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">individual_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">individual_name</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">principal_meaning</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL_GENERAL_POINTER</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><a href="3-dcl.html#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</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP5" class="function-link"><span class="function-syntax">Declensions::of_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="identifier-syntax">gender</span><span class="plain-syntax">, </span><span class="identifier-syntax">number</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">name_language</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">name_number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">number</span><span class="plain-syntax">;</span>
|
||||
<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>
|
||||
|
@ -149,7 +149,7 @@ so there may be any number of names registered: for instance, the kind
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">do</span><span class="plain-syntax"> {</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">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="identifier-syntax">pde</span><span class="plain-syntax"> = </span><a href="2-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) 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>
|
||||
|
@ -172,8 +172,8 @@ combinations. Here we only work through six, ignoring animation:
|
|||
<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="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><span class="identifier-syntax">nl</span><span class="plain-syntax"> = </span><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nl</span><span class="plain-syntax"> == </span><a href="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">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>
|
||||
|
@ -220,13 +220,13 @@ through one or two tries.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<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">wa</span><span class="plain-syntax"> = </span><a href="2-tai.html#SP3" class="function-link"><span class="function-syntax">Inflect::first_word</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>
|
||||
<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="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">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">wa</span><span class="plain-syntax"> = </span><a href="2-tai.html#SP3" class="function-link"><span class="function-syntax">Inflect::first_word</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>
|
||||
<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="4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nl</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><span class="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="3-nc.html#SP4_1">§4.1</a>.</li></ul>
|
||||
|
@ -243,7 +243,7 @@ and wouldn't pass through the pluralising tries intact.
|
|||
<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">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="identifier-syntax">in</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><a href="3-dcl.html#SP5" class="function-link"><span class="function-syntax">Declensions::of_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">nl</span><span class="plain-syntax">, </span><span class="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="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>
|
||||
|
@ -264,7 +264,7 @@ or plural):
|
|||
<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">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><a href="3-dcl.html#SP4" 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>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -281,7 +281,7 @@ falling back on English if there's none registered:
|
|||
<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="3-dcl.html#SP4" 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="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>
|
||||
|
@ -296,7 +296,7 @@ falling back on English if there's none registered:
|
|||
<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>
|
||||
<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="3-dcl.html#SP4" 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>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -319,7 +319,7 @@ to an <span class="extract"><span class="extract-syntax">excerpt_meaning</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="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>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="3-lc.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-tai.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-lc.html">lc</a></li><li class="progresscurrent">nc</li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-vc.html">vc</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="3-dcl.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
File diff suppressed because it is too large
Load diff
91
docs/inflections-module/4-dl.html
Normal file
91
docs/inflections-module/4-dl.html
Normal file
|
@ -0,0 +1,91 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Default Language</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">
|
||||
|
||||
</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 'Default Language' 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#4">Chapter 4: English</a></li><li><b>Default Language</b></li></ul></div>
|
||||
<p class="purpose">To keep track of what the default natural language is.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. </b>The following mechanism may become more sophisticated later.
|
||||
</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">default_language_for_linguistics</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">DefaultLanguage::set</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">DefaultLanguage::get</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">DefaultLanguage::get</span></span>:<br/>Article Inflection - <a href="2-ai.html#SP1">§1</a><br/>Grading Adjectives - <a href="2-ga.html#SP2">§2</a>, <a href="2-ga.html#SP3">§3</a>, <a href="2-ga.html#SP4">§4</a><br/>Past Participles - <a href="2-pp.html#SP2">§2</a><br/>Pluralisation - <a href="2-plr.html#SP3">§3</a>, <a href="2-plr.html#SP4">§4</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/>Declensions - <a href="3-dcl.html#SP5">§5</a>, <a href="3-dcl.html#SP6">§6</a>, <a href="3-dcl.html#SP8">§8</a><br/>Verb Conjugation - <a href="3-vc.html#SP6">§6</a>, <a href="3-vc.html#SP8_2_1">§8.2.1</a>, <a href="3-vc.html#SP18">§18</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">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="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-tai.html">2</a></li><li class="progresschapter"><a href="3-lc.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">dl</li><li class="progresssection"><a href="4-ei.html">ei</a></li><li class="progressnext"><a href="4-ei.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -89,8 +89,11 @@ module:
|
|||
<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>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>This module has no callback functions to modify its behaviour.
|
||||
</p>
|
||||
|
||||
<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>
|
||||
<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-tai.html">2</a></li><li class="progresschapter"><a href="3-lc.html">3</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="1-im.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -59,7 +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#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">
|
||||
<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><li><a href="P-wtmd.html#SP7">§7. Declensions</a></li><li><a href="P-wtmd.html#SP11">§11. Verb conjugations</a></li><li><a href="P-wtmd.html#SP12">§12. Naming conventions</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:
|
||||
|
@ -93,41 +93,47 @@ 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 class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>Though tries are, as just mentioned, created from Preform grammar, they are
|
||||
parsed quite differently.
|
||||
</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
|
||||
<p class="commentary">In trie grammar, a NT must be either a list of other tries, which are tested
|
||||
in sequence until one matches, or must be a list of inflection rules. These
|
||||
cannot be mixed within the same NT.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>In a list of tries, each production consists only of a single nonterminal
|
||||
identifying the trie to make use of. One exception: the token <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>
|
||||
For example:
|
||||
</p>
|
||||
|
||||
<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
|
||||
<p class="commentary">means try <fiddle-with-exceptions> first (on the whole text), 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
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>In a list of inflection rules, each production consists of two tokens. The
|
||||
first token 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>
|
||||
a digit at the start of the replacement text means "truncate by this many
|
||||
letters and add...". The simplest possible instruction is <span class="extract"><span class="Preform-extract-syntax">0</span></span> alone, which
|
||||
means "truncate 0 letters and add nothing", and therefore leaves the text
|
||||
unchanged.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Some examples:
|
||||
</p>
|
||||
|
||||
<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">lead</span><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">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>
|
||||
|
@ -135,54 +141,200 @@ change.) Some examples:
|
|||
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 class="commentary">The special character <span class="extract"><span class="Preform-extract-syntax">+</span></span> after a digit means "double the last letter", so
|
||||
that, for example, <span class="extract"><span class="Preform-extract-syntax">0+er</span></span> turns "big" to "bigger". In other positions, <span class="extract"><span class="Preform-extract-syntax">+</span></span>
|
||||
means "add another word", so for example <span class="extract"><span class="Preform-extract-syntax">0+er+still</span></span> turns "big" to "bigger
|
||||
still".
|
||||
</p>
|
||||
|
||||
<p class="commentary">Designing a list of inflection rules is not quite as easy as it looks, because
|
||||
these rules are not applied in succession: it's better to think of the rules
|
||||
as all being performed at once. In general, if you need one inflection
|
||||
rule to take precedence over another, put it in an earlier trie (in the list
|
||||
of tries which includes this one), 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 class="commentary firstcommentary"><a id="SP6"></a><b>§6. </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, and these
|
||||
occupy the rest of <a href="2-tai.html" class="internal">Chapter 2: Simple Inflections</a>.
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● <a href="3-ai.html#SP1" class="internal">ArticleInflection::preface_by_article</a> handles the variation of articles:
|
||||
<ul class="items"><li>● <a href="2-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
|
||||
</li><li>● <a href="2-ga.html#SP2" class="internal">Grading::make_comparative</a> turns "tall" into "taller".
|
||||
</li><li>● <a href="2-ga.html#SP3" class="internal">Grading::make_superlative</a> turns "tall" into "tallest".
|
||||
</li><li>● <a href="2-ga.html#SP4" class="internal">Grading::make_quiddity</a> turns "tall" into "tallness".
|
||||
</li><li>● <a href="2-pp.html#SP1" class="internal">PastParticiples::pasturise_wording</a> turns "looking away" to "looked away".
|
||||
</li><li>● <a href="2-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 class="commentary firstcommentary"><a id="SP7"></a><b>§7. Declensions. </b><a href="3-dcl.html" class="internal">Declensions</a> are sets of inflected forms of a noun or adjective according
|
||||
to their grammatical case. A language should list its cases in a special
|
||||
nonterminal called <grammatical-case-names>, in which "nominative" or its
|
||||
equivalent should always come first. For example:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><grammatical-case-names></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">nominative</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">vocative</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">accusative</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">dative</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">genetive</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ablative</span>
|
||||
</pre>
|
||||
<p class="commentary">The function <a href="3-dcl.html#SP2" class="internal">Declensions::no_cases</a> returns a count of these for a given
|
||||
natural language. The actual names of cases are only needed by the function
|
||||
<a href="3-dcl.html#SP3" class="internal">Declensions::writer</a>, which prints out tables of declensions for debugging
|
||||
purposes.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b><a href="3-dcl.html#SP5" class="internal">Declensions::of_noun</a> and <a href="3-dcl.html#SP5" class="internal">Declensions::of_article</a> are functions to
|
||||
generate declensions, with one form for each case, from a given stem word.
|
||||
These are done with Preform NTs called <noun-declension> and <article-declension>
|
||||
respectively; these are currently the only two "declension NTs".
|
||||
</p>
|
||||
|
||||
<p class="commentary">The rule for a "declension NT" is that it must provide a list of possibilities
|
||||
in the form either <span class="extract"><span class="Preform-extract-syntax">gender table</span></span> or <span class="extract"><span class="Preform-extract-syntax">gender grouper table</span></span>, where <span class="extract"><span class="Preform-extract-syntax">gender</span></span> is:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>● the letter <span class="extract"><span class="Preform-extract-syntax">m</span></span> for masculine,
|
||||
</li><li>● the letter <span class="extract"><span class="Preform-extract-syntax">f</span></span> for feminine,
|
||||
</li><li>● the letter <span class="extract"><span class="Preform-extract-syntax">n</span></span> for neuter/common,
|
||||
</li><li>● the asterisk <span class="extract"><span class="Preform-extract-syntax">*</span></span> for "any gender".
|
||||
</li></ul>
|
||||
<p class="commentary">In the two-token form <span class="extract"><span class="Preform-extract-syntax">gender table</span></span>, the <span class="extract"><span class="Preform-extract-syntax">table</span></span> is a nonterminal for
|
||||
irregular forms; if the three-token form <span class="extract"><span class="Preform-extract-syntax">gender grouper table</span></span>, the <span class="extract"><span class="Preform-extract-syntax">grouper</span></span>
|
||||
is a nonterminal which works out which "group" the word falls into — groups
|
||||
are numbered, so perhaps, e.g., the word "device" falls into group 1 — and
|
||||
then the <span class="extract"><span class="Preform-extract-syntax">table</span></span> provides declensions for the different groups needed.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>A simple example of using the irregular forms table is provided by the
|
||||
English language definition of <article-declension>:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><article-declension></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-article-declension></span>
|
||||
|
||||
<span class="Preform-function-syntax"><en-article-declension></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">some</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">some</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span>
|
||||
</pre>
|
||||
<p class="commentary">Here the declension NT is <article-declension> and contains only one possibility,
|
||||
applying to all genders (hence the <span class="extract"><span class="Preform-extract-syntax">*</span></span>). The <span class="extract"><span class="Preform-extract-syntax">table</span></span> of irregular forms is then
|
||||
<en-article-declension>. Each production begins with the possibility against
|
||||
which the stem is matched — here, it's going to have to be "a" or "the". There
|
||||
are then one possibility for each case (nominative and accusative) in each of
|
||||
the two numbers (singular and plural), making four forms in all. English, of
|
||||
course, is not very inflected: this would be more interesting for French:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><article-declension></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">m</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><fr-masculine-article-declension></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">f</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><fr-feminine-article-declension></span>
|
||||
|
||||
<span class="Preform-function-syntax"><fr-masculine-article-declension></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">un</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">un</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">un</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">des</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">des</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">le</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">le</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">le</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">les</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">les</span>
|
||||
|
||||
<span class="Preform-function-syntax"><fr-feminine-article-declension></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">un</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">une</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">une</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">des</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">des</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">le</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">la</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">la</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">les</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">les</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b>So much for irregular forms. Grouped forms are useful for languages like
|
||||
German, which has about 12 groups of nouns, each with its own way of declining.
|
||||
For example, there's one group which goes something like:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kraft</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kraft</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kraft</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kraft</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kräfte</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kräfte</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kräften</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kräfte</span>
|
||||
</pre>
|
||||
<p class="commentary">and another which goes like:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kamera</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kamera</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kamera</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kamera</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kameras</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kameras</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kameras</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">Kameras</span>
|
||||
</pre>
|
||||
<p class="commentary">For German, we might then have
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><noun-declension></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><de-noun-grouper></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><de-noun-tables></span>
|
||||
|
||||
<span class="Preform-function-syntax"><de-noun-grouper></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">kraft</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">kamera</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">2</span>
|
||||
|
||||
<span class="Preform-function-syntax"><de-noun-tables></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><de-noun-group1-table></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><de-noun-group2-table></span>
|
||||
</pre>
|
||||
<p class="commentary">where for example:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-function-syntax"><de-noun-group1-table></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><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><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><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><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3äfte</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3äfte</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3äften</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3äfte</span>
|
||||
</pre>
|
||||
<p class="commentary">giving inflection rules for the four cases of German in singular and then
|
||||
in plural. In practice, of course, <de-noun-grouper> will need to sort out
|
||||
nouns rather better than this, and there are about 12 groups. Groups are
|
||||
numbered upwards from 1 to, in principle, 99. See <a href="3-dcl.html#SP8" class="internal">Declensions::decline_from_groups</a>.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. Verb conjugations. </b>This module supplies an extensive system for conjugating verbs. A full set
|
||||
of inflected forms for a verb, in all its tenses, moods and so on, is stored
|
||||
in a <a href="3-vc.html#SP1" class="internal">verb_conjugation</a> object. Making these objects is a nontrivial task:
|
||||
see the function <a href="3-vc.html#SP6" class="internal">Conjugation::conjugate</a>.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Like declensions, verb conjugations rely on a set of tables in special formats,
|
||||
but which are stored in nonterminals of Preform grammar. There is a full
|
||||
description of the syntax used in these tables in the section <a href="4-ei.html" class="internal">English Inflections</a>,
|
||||
which demonstrates a complete conjugation of English verbs.
|
||||
</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. Naming conventions. </b>Tries are highly language specific, and would need rewriting for every language.
|
||||
The tries for English are supplied in <a href="4-ei.html" class="internal">English Inflections</a>, but that's just
|
||||
for convenience; other languages should supply them in the Inform source text of
|
||||
the relevant language extension, or in <span class="extract"><span class="Preform-extract-syntax">Syntax.preform</span></span> files.
|
||||
</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
|
||||
and name them as they please, but the top-level tries must have the same
|
||||
names that they have here. 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 class="Preform-displayed-code all-displayed-code code-font">
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-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
|
||||
<p class="commentary">All 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>.
|
||||
There doesn't need to be any direct Spanish equivalent to
|
||||
<en-trie-plural-assimilated-classical-inflections>, for example.
|
||||
</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>
|
||||
<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-tai.html">2</a></li><li class="progresschapter"><a href="3-lc.html">3</a></li><li class="progresschapter"><a href="4-dl.html">4</a></li><li class="progressnext"><a href="P-htitm.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -85,33 +85,43 @@
|
|||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a name="2"></a>
|
||||
<span class="chaptertitle">Chapter 2: Machinery</span></p>
|
||||
<span class="chaptertitle">Chapter 2: Simple Inflections</span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p class="sectionentry"><a href="2-ld.html">
|
||||
<spon class="sectiontitle">Linguistic Definitions</span></a> -
|
||||
<span class="sectionpurpose">Some basic linguistic constants are defined.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="2-tai.html">
|
||||
<spon class="sectiontitle">Tries and Inflections</span></a> -
|
||||
<span class="sectionpurpose">Using tries to inflect word endings.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a name="3"></a>
|
||||
<span class="chaptertitle">Chapter 3: Grammatical Uses of Inflection</span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-ai.html">
|
||||
<p class="sectionentry"><a href="2-ai.html">
|
||||
<spon class="sectiontitle">Article Inflection</span></a> -
|
||||
<span class="sectionpurpose">To inflect "a" into "an", and so forth.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-dcl.html">
|
||||
<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>
|
||||
<p class="sectionentry"><a href="2-ga.html">
|
||||
<spon class="sectiontitle">Grading Adjectives</span></a> -
|
||||
<span class="sectionpurpose">To inflect adjectives into comparative and superlative forms.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="2-pp.html">
|
||||
<spon class="sectiontitle">Past Participles</span></a> -
|
||||
<span class="sectionpurpose">To inflect present into past participles.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="2-plr.html">
|
||||
<spon class="sectiontitle">Pluralisation</span></a> -
|
||||
<span class="sectionpurpose">To form plurals of nouns.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a name="3"></a>
|
||||
<span class="chaptertitle">Chapter 3: Declension and Conjugation</span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-lc.html">
|
||||
<spon class="sectiontitle">Linguistic Constants</span></a> -
|
||||
<span class="sectionpurpose">Some basic linguistic constants are defined.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-nc.html">
|
||||
|
@ -119,19 +129,9 @@
|
|||
<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> -
|
||||
<span class="sectionpurpose">To form plurals of nouns.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-ga.html">
|
||||
<spon class="sectiontitle">Grading Adjectives</span></a> -
|
||||
<span class="sectionpurpose">To inflect adjectives into comparative and superlative forms.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="3-pp.html">
|
||||
<spon class="sectiontitle">Past Participles</span></a> -
|
||||
<span class="sectionpurpose">To inflect present into past participles.</span></p>
|
||||
<p class="sectionentry"><a href="3-dcl.html">
|
||||
<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-vc.html">
|
||||
|
@ -142,8 +142,13 @@
|
|||
</li>
|
||||
<li>
|
||||
<p class="chapterentry"><a name="4"></a>
|
||||
<span class="chaptertitle">Chapter 4: Default Language</span></p>
|
||||
<span class="chaptertitle">Chapter 4: English</span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p class="sectionentry"><a href="4-dl.html">
|
||||
<spon class="sectiontitle">Default Language</span></a> -
|
||||
<span class="sectionpurpose">To keep track of what the default natural language is.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="4-ei.html">
|
||||
<spon class="sectiontitle">English Inflections</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><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="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/2-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/4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</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/2-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/4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</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/2-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/4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</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><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="../inflections-module/2-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/4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</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><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="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#SP5" class="function-link"><span class="function-syntax">Declensions::of_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><a href="../inflections-module/4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</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#SP5" class="function-link"><span class="function-syntax">Declensions::of_article</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">, </span><a href="../inflections-module/4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</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><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">D</span><span class="plain-syntax"> = </span><a href="../inflections-module/3-dcl.html#SP5" class="function-link"><span class="function-syntax">Declensions::of_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><a href="../inflections-module/4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</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#SP5" class="function-link"><span class="function-syntax">Declensions::of_article</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PW</span><span class="plain-syntax">, </span><a href="../inflections-module/4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</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>
|
||||
|
@ -137,7 +137,7 @@ function togglePopup(material_id) {
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_WORDING</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">sf</span><span class="plain-syntax">-></span><span class="element-syntax">text_read</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">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 --> %W\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><a href="../inflections-module/3-pp.html#SP1" class="function-link"><span class="function-syntax">PastParticiples::pasturise_wording</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"%W --> %W\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><a href="../inflections-module/2-pp.html#SP1" class="function-link"><span class="function-syntax">PastParticiples::pasturise_wording</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</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><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="../inflections-module/2-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/4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</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,12 +180,12 @@ 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><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="../inflections-module/3-vc.html#SP17" 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/4-dl.html#SP1" class="function-link"><span class="function-syntax">DefaultLanguage::get</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>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="../inflections-module/3-vc.html#SP14" class="function-link"><span class="function-syntax">Conjugation::test_participle</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</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-vc.html#SP18" class="function-link"><span class="function-syntax">Conjugation::test_participle</span></a><span class="plain-syntax">(</span><span class="constant-syntax">STDOUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="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">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">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">DefaultLanguage::get</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>
|
||||
|
|
|
@ -127,7 +127,7 @@ to one verb is the same preposition as the "for" attached to another one.
|
|||
<span class="reserved-syntax">preposition_identity</span><span class="plain-syntax"> *</span><span class="function-syntax">Prepositions::make</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">Prepositions::make</span></span>:<br/>Verb Usages - <a href="4-vu.html#SP7_1">§7.1</a>, <a href="4-vu.html#SP8">§8</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">unexpected_upper_casing_used</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">preposition_identity</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prep</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">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="reserved-syntax">preposition_identity</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::compare</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">prep</span><span class="plain-syntax">-></span><span class="element-syntax">prep_text</span><span class="plain-syntax">), &</span><span class="identifier-syntax">wa</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WordAssemblages::eq</span><span class="plain-syntax">(&(</span><span class="identifier-syntax">prep</span><span class="plain-syntax">-></span><span class="element-syntax">prep_text</span><span class="plain-syntax">), &</span><span class="identifier-syntax">wa</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">prep</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">prep</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">preposition_identity</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">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">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">DefaultLanguage::get</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]), InflectionDefns::default_nl(NULL));</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]), DefaultLanguage::get(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">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">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">DefaultLanguage::get</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>
|
||||
|
|
|
@ -217,7 +217,7 @@ frequently, since it consumes memory:
|
|||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">WordAssemblages::compare</span><span class="plain-syntax">(</span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa1</span><span class="plain-syntax">, </span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa2</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">WordAssemblages::eq</span><span class="plain-syntax">(</span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa1</span><span class="plain-syntax">, </span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa2</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">wa1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">wa2</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">wa1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">wa2</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">wa1</span><span class="plain-syntax">-></span><span class="element-syntax">no_indiv_words</span><span class="plain-syntax"> != </span><span class="identifier-syntax">wa2</span><span class="plain-syntax">-></span><span class="element-syntax">no_indiv_words</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>
|
||||
|
|
|
@ -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 = InflectionDefns::default_nl(NULL);
|
||||
if (L == NULL) L = DefaultLanguage::get(NULL);
|
||||
#endif
|
||||
if (Wordings::nonempty(L->language_field[ISO_639_CODE_LFIELD]))
|
||||
WRITE("%+W", L->language_field[ISO_639_CODE_LFIELD]);
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
Total memory consumption was 253147K = 247 MB
|
||||
Total memory consumption was 256346K = 250 MB
|
||||
|
||||
61.9% was used for 1324142 objects, in 262772 frames in 196 x 800K = 156800K = 153 MB:
|
||||
62.4% was used for 1335177 objects, in 267912 frames in 200 x 800K = 160000K = 156 MB:
|
||||
|
||||
10.0% inter_tree_node_array 36 x 8192 = 294912 objects, 25953408 bytes
|
||||
5.6% text_stream_array 2588 x 100 = 258800 objects, 14575616 bytes
|
||||
4.0% parse_node 130338 objects, 10427040 bytes
|
||||
9.8% inter_tree_node_array 36 x 8192 = 294912 objects, 25953408 bytes
|
||||
5.5% text_stream_array 2587 x 100 = 258700 objects, 14569984 bytes
|
||||
3.9% parse_node 130338 objects, 10427040 bytes
|
||||
2.8% verb_conjugation 160 objects, 7425280 bytes
|
||||
2.7% parse_node_annotation_array 445 x 500 = 222500 objects, 7134240 bytes
|
||||
2.4% inter_symbol_array 70 x 1024 = 71680 objects, 6310080 bytes
|
||||
1.9% linked_list 9033 objects, 5058480 bytes
|
||||
1.4% map_data 778 objects, 3690832 bytes
|
||||
1.3% pcalc_prop_array 24 x 1000 = 24000 objects, 3456768 bytes
|
||||
1.0% kind_array 65 x 1000 = 65000 objects, 2602080 bytes
|
||||
0.8% linked_list 3897 objects, 2182320 bytes
|
||||
0.8% inter_schema_token 14554 objects, 2095776 bytes
|
||||
0.9% kind_array 65 x 1000 = 65000 objects, 2602080 bytes
|
||||
0.7% inter_schema_token 14554 objects, 2095776 bytes
|
||||
0.6% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes
|
||||
0.5% match_trie_array 10 x 1000 = 10000 objects, 1360320 bytes
|
||||
0.4% phrase 940 objects, 1233280 bytes
|
||||
|
@ -21,13 +21,13 @@ Total memory consumption was 253147K = 247 MB
|
|||
0.3% inter_name_array 20 x 1000 = 20000 objects, 960640 bytes
|
||||
0.3% inter_package 13201 objects, 950472 bytes
|
||||
0.3% inter_schema_node 9518 objects, 913728 bytes
|
||||
0.3% production 3896 objects, 903872 bytes
|
||||
0.3% production 3895 objects, 903640 bytes
|
||||
0.3% ptoken 8318 objects, 865072 bytes
|
||||
0.3% inter_symbols_table 13201 objects, 844864 bytes
|
||||
0.3% dictionary 16345 objects, 784560 bytes
|
||||
0.2% dictionary 16345 objects, 784560 bytes
|
||||
0.2% dict_entry_array 236 x 100 = 23600 objects, 762752 bytes
|
||||
0.2% individual_name 2623 objects, 713456 bytes
|
||||
0.2% package_request 7928 objects, 697664 bytes
|
||||
0.2% individual_name 2623 objects, 692472 bytes
|
||||
0.2% inter_name_generator_array 16 x 1000 = 16000 objects, 640512 bytes
|
||||
0.2% verb_usage 1628 objects, 573056 bytes
|
||||
0.1% inference_subject 781 objects, 512336 bytes
|
||||
|
@ -41,6 +41,7 @@ Total memory consumption was 253147K = 247 MB
|
|||
---- action_name_list_array 3 x 1000 = 3000 objects, 240096 bytes
|
||||
---- inter_annotation_array 1 x 8192 objects, 196640 bytes
|
||||
---- inference 1703 objects, 177112 bytes
|
||||
---- linked_list_item_array 11 x 1000 = 11000 objects, 176352 bytes
|
||||
---- stacked_variable_owner_list_array 38 x 100 = 3800 objects, 153216 bytes
|
||||
---- action_pattern_array 6 x 100 = 600 objects, 144192 bytes
|
||||
---- lexicon_entry 395 objects, 142200 bytes
|
||||
|
@ -50,7 +51,6 @@ Total memory consumption was 253147K = 247 MB
|
|||
---- hierarchy_location 731 objects, 105264 bytes
|
||||
---- preposition_identity 273 objects, 82992 bytes
|
||||
---- name_cluster 2577 objects, 82464 bytes
|
||||
---- linked_list_item_array 5 x 1000 = 5000 objects, 80160 bytes
|
||||
---- pcalc_term_array 2 x 1000 = 2000 objects, 80064 bytes
|
||||
---- kind_variable_declaration 1652 objects, 79296 bytes
|
||||
---- inter_tree 6 objects, 78672 bytes
|
||||
|
@ -202,9 +202,9 @@ Total memory consumption was 253147K = 247 MB
|
|||
---- kind_template_definition 1 object, 40 bytes
|
||||
---- parse_name_notice 1 object, 40 bytes
|
||||
|
||||
38.0% was used for memory not allocated for objects:
|
||||
37.5% was used for memory not allocated for objects:
|
||||
|
||||
16.2% text stream storage 42037656 bytes in 265104 claims
|
||||
16.0% text stream storage 42037080 bytes in 265076 claims
|
||||
3.5% dictionary storage 9265152 bytes in 16345 claims
|
||||
---- sorting 1112 bytes in 3 claims
|
||||
2.7% source text 7200000 bytes in 3 claims
|
||||
|
@ -219,5 +219,5 @@ Total memory consumption was 253147K = 247 MB
|
|||
---- emitter array storage 14368 bytes in 8 claims
|
||||
---- code generation workspace for objects 9200 bytes in 9 claims
|
||||
|
||||
20.1% was overhead - 52137560 bytes = 50915K = 49 MB
|
||||
19.9% was overhead - 52468856 bytes = 51239K = 50 MB
|
||||
|
||||
|
|
|
@ -1,37 +1,45 @@
|
|||
100.0% in inform7 run
|
||||
66.2% in compilation to Inter
|
||||
26.0% in //Phrases::Manager::compile_first_block//
|
||||
8.6% in //Phrases::Manager::compile_as_needed//
|
||||
6.9% in //Strings::compile_responses//
|
||||
5.9% in //World::Compile::compile//
|
||||
66.6% in compilation to Inter
|
||||
26.2% in //Phrases::Manager::compile_first_block//
|
||||
8.5% in //Phrases::Manager::compile_as_needed//
|
||||
7.1% in //Strings::compile_responses//
|
||||
6.5% in //World::Compile::compile//
|
||||
3.1% in //Assertions::Traverse::traverse1//
|
||||
2.8% in //Sentences::VPs::traverse//
|
||||
2.0% in //Phrases::Manager::RulePrintingRule_routine//
|
||||
1.8% in //Phrases::Manager::rulebooks_array//
|
||||
1.1% in //NewVerbs::ConjugateVerb//
|
||||
2.6% in //Sentences::VPs::traverse//
|
||||
2.2% in //Phrases::Manager::RulePrintingRule_routine//
|
||||
2.1% in //Phrases::Manager::rulebooks_array//
|
||||
1.0% in //NewVerbs::ConjugateVerb//
|
||||
0.7% in //Phrases::Manager::traverse//
|
||||
0.5% in //Phrases::Manager::parse_rule_parameters//
|
||||
0.3% in //Phrases::Manager::compile_rulebooks//
|
||||
0.4% in //Phrases::Manager::compile_rulebooks//
|
||||
0.3% in //Phrases::Manager::traverse_for_names//
|
||||
0.3% in //Relations::compile_defined_relations//
|
||||
0.1% in //Assertions::Traverse::traverse2//
|
||||
0.1% in //BinaryPredicates::make_built_in_further//
|
||||
0.2% in //Assertions::Traverse::traverse2//
|
||||
0.2% in //BinaryPredicates::make_built_in_further//
|
||||
0.2% in //World::complete//
|
||||
0.1% in //Emit::begin//
|
||||
0.1% in //Index::DocReferences::read_xrefs//
|
||||
0.1% in //Kinds::Knowledge::include_templates_for_kinds//
|
||||
0.1% in //Kinds::RunTime::compile_data_type_support_routines//
|
||||
0.1% in //PL::Parsing::Verbs::compile_all//
|
||||
0.1% in //PL::Parsing::traverse//
|
||||
0.1% in //Phrases::Manager::add_rules_to_rulebooks//
|
||||
0.1% in //Sentences::RuleSubtrees::register_recently_lexed_phrases//
|
||||
0.1% in //Task::load_types//
|
||||
0.1% in //World::complete//
|
||||
4.1% not specifically accounted for
|
||||
31.2% in running Inter pipeline
|
||||
10.2% in inter step 2/12: link
|
||||
10.1% in step preparation
|
||||
7.1% in inter step 12/12: generate inform6 -> auto.inf
|
||||
0.1% in //World::complete_additions//
|
||||
2.9% not specifically accounted for
|
||||
31.1% in running Inter pipeline
|
||||
10.6% in step preparation
|
||||
10.3% in inter step 2/12: link
|
||||
7.3% in inter step 12/12: generate inform6 -> auto.inf
|
||||
0.3% in inter step 10/12: reconcile-verbs
|
||||
0.3% in inter step 9/12: make-identifiers-unique
|
||||
0.1% in inter step 10/12: reconcile-verbs
|
||||
0.1% in inter step 11/12: eliminate-redundant-labels
|
||||
0.2% in inter step 11/12: eliminate-redundant-labels
|
||||
0.2% in inter step 6/12: assimilate
|
||||
0.2% in inter step 7/12: resolve-external-symbols
|
||||
0.1% in inter step 4/12: parse-linked-matter
|
||||
0.1% in inter step 5/12: resolve-conditional-compilation
|
||||
0.1% in inter step 6/12: assimilate
|
||||
0.1% in inter step 7/12: resolve-external-symbols
|
||||
0.1% in inter step 8/12: inspect-plugs
|
||||
2.2% not specifically accounted for
|
||||
2.0% in supervisor
|
||||
0.4% not specifically accounted for
|
||||
1.1% not specifically accounted for
|
||||
2.1% in supervisor
|
||||
0.2% not specifically accounted for
|
||||
|
|
|
@ -64,7 +64,7 @@ int Task::carry_out(build_step *S) {
|
|||
inform7_task->stage_of_compilation = -1;
|
||||
inform7_task->next_resource_number = 3;
|
||||
|
||||
InflectionDefns::set_default_nl(Projects::get_language_of_syntax(project));
|
||||
DefaultLanguage::set(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, InflectionDefns::default_nl(NULL));
|
||||
Pluralisation::register(S, P, DefaultLanguage::get(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()) == InflectionDefns::default_nl(NULL)) return FALSE;
|
||||
if (Projects::get_language_of_play(Task::project()) == DefaultLanguage::get(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()) == InflectionDefns::default_nl(NULL)) return;
|
||||
if (Projects::get_language_of_play(Task::project()) == DefaultLanguage::get(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 == InflectionDefns::default_nl(NULL)) {
|
||||
if (nl == DefaultLanguage::get(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>> = InflectionDefns::default_nl(NULL);
|
||||
<infinitive-declaration> ==> R[1]; <<inform_language:nl>> = DefaultLanguage::get(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 != InflectionDefns::default_nl(NULL))) p = 5;
|
||||
if ((nl) && (nl != DefaultLanguage::get(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, InflectionDefns::default_nl(NULL));
|
||||
verb_conjugation *vc = Conjugation::conjugate(infinitive, DefaultLanguage::get(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, InflectionDefns::default_nl(NULL));
|
||||
vc = Conjugation::conjugate(infinitive, DefaultLanguage::get(NULL));
|
||||
vi = Verbs::new_verb(vc, FALSE);
|
||||
vc->vc_conjugates = vi;
|
||||
VerbUsages::register_all_usages_of_verb(vi, FALSE, 3);
|
||||
|
@ -930,11 +930,11 @@ void NewVerbs::ConjugateVerb(void) {
|
|||
word_assemblage *wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][part-1]);
|
||||
if (WordAssemblages::nonempty(*wa)) {
|
||||
if (some_exist) {
|
||||
if (WordAssemblages::compare(wa, common) == FALSE)
|
||||
if (WordAssemblages::eq(wa, common) == FALSE)
|
||||
some_differ = TRUE;
|
||||
if (part != 3) {
|
||||
if (common_except_3PS == NULL) common_except_3PS = wa;
|
||||
else if (WordAssemblages::compare(wa, common_except_3PS) == FALSE)
|
||||
else if (WordAssemblages::eq(wa, common_except_3PS) == FALSE)
|
||||
some_except_3PS_differ = TRUE;
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -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()) != InflectionDefns::default_nl(NULL))
|
||||
if (Projects::get_language_of_play(Task::project()) != DefaultLanguage::get(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, InflectionDefns::default_nl(NULL));
|
||||
ArticleInflection::preface_by_article(OUT, TEMP, DefaultLanguage::get(NULL));
|
||||
DISCARD_TEXT(TEMP);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,30 +23,15 @@ DECLARE_CLASS(verb_conjugation)
|
|||
|
||||
@ Like all modules, this one must define a |start| and |end| function:
|
||||
|
||||
=
|
||||
void InflectionsModule::start(void) {
|
||||
@<Register this module's stream writers@>;
|
||||
@<Register this module's debugging log aspects@>;
|
||||
@<Register this module's debugging log writers@>;
|
||||
@<Register this module's command line switches@>;
|
||||
}
|
||||
void InflectionsModule::end(void) {
|
||||
}
|
||||
|
||||
@<Register this module's stream writers@> =
|
||||
;
|
||||
|
||||
@
|
||||
|
||||
@e CONSTRUCTED_PAST_PARTICIPLES_DA
|
||||
@e CONSTRUCTED_PLURALS_DA
|
||||
|
||||
@<Register this module's debugging log aspects@> =
|
||||
Log::declare_aspect(CONSTRUCTED_PAST_PARTICIPLES_DA, L"constructed past participles", FALSE, FALSE);
|
||||
Log::declare_aspect(CONSTRUCTED_PLURALS_DA, L"constructed plurals", FALSE, FALSE);
|
||||
|
||||
@<Register this module's debugging log writers@> =
|
||||
;
|
||||
|
||||
@<Register this module's command line switches@> =
|
||||
;
|
||||
=
|
||||
void InflectionsModule::start(void) {
|
||||
Log::declare_aspect(CONSTRUCTED_PAST_PARTICIPLES_DA,
|
||||
L"constructed past participles", FALSE, FALSE);
|
||||
Log::declare_aspect(CONSTRUCTED_PLURALS_DA,
|
||||
L"constructed plurals", FALSE, FALSE);
|
||||
}
|
||||
void InflectionsModule::end(void) {
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ void ArticleInflection::preface_by_article(OUTPUT_STREAM,
|
|||
indef_trie =
|
||||
PreformUtilities::define_trie(
|
||||
<singular-noun-to-its-indefinite-article>, TRIE_START,
|
||||
InflectionDefns::default_nl(NULL));
|
||||
DefaultLanguage::get(NULL));
|
||||
wchar_t *result = Tries::search_avinue(indef_trie, initial_text);
|
||||
if (result == NULL) result = L"a";
|
||||
WRITE("%w %S", result, initial_text);
|
|
@ -20,11 +20,11 @@ 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));
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
nl = DefaultLanguage::get(nl);
|
||||
match_avinue *comp_trie =
|
||||
PreformUtilities::define_trie(<adjective-to-comparative>, TRIE_END,
|
||||
InflectionDefns::default_nl(nl));
|
||||
Inflections::suffix_inflection(transformed, comp_trie, comprised);
|
||||
DefaultLanguage::get(nl));
|
||||
Inflect::suffix(transformed, comp_trie, comprised);
|
||||
wording PW = Feeds::feed_text(transformed);
|
||||
word_assemblage merged =
|
||||
PreformUtilities::merge(<comparative-construction>, 0,
|
||||
|
@ -46,11 +46,11 @@ 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));
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
nl = DefaultLanguage::get(nl);
|
||||
match_avinue *comp_trie =
|
||||
PreformUtilities::define_trie(<adjective-to-superlative>, TRIE_END,
|
||||
InflectionDefns::default_nl(nl));
|
||||
Inflections::suffix_inflection(transformed, comp_trie, comprised);
|
||||
DefaultLanguage::get(nl));
|
||||
Inflect::suffix(transformed, comp_trie, comprised);
|
||||
wording PW = Feeds::feed_text(transformed);
|
||||
LOGIF(CONSTRUCTED_PLURALS, "[Superlative of %W is %W]\n", W, PW);
|
||||
DISCARD_TEXT(transformed);
|
||||
|
@ -71,11 +71,11 @@ 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));
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
nl = DefaultLanguage::get(nl);
|
||||
match_avinue *comp_trie =
|
||||
PreformUtilities::define_trie(<adjective-to-quiddity>, TRIE_END,
|
||||
InflectionDefns::default_nl(nl));
|
||||
Inflections::suffix_inflection(transformed, comp_trie, comprised);
|
||||
DefaultLanguage::get(nl));
|
||||
Inflect::suffix(transformed, comp_trie, comprised);
|
||||
wording PW = Feeds::feed_text(transformed);
|
||||
LOGIF(CONSTRUCTED_PLURALS, "[Quiddity of %W is %W]\n", W, PW);
|
||||
DISCARD_TEXT(transformed);
|
|
@ -39,6 +39,6 @@ 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,
|
||||
InflectionDefns::default_nl(NULL));
|
||||
return Inflections::suffix_inflection(OUT, past_trie, from);
|
||||
DefaultLanguage::get(NULL));
|
||||
return Inflect::suffix(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) {
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
nl = DefaultLanguage::get(nl);
|
||||
|
||||
plural_dictionary_entry *pde;
|
||||
|
||||
|
@ -94,10 +94,11 @@ The following takes a single word, assumes it to be a noun which meaningfully
|
|||
has a plural, and modifies it to the plural form.
|
||||
|
||||
=
|
||||
int Pluralisation::regular(OUTPUT_STREAM, text_stream *from, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
int Pluralisation::regular(OUTPUT_STREAM, text_stream *from,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
nl = DefaultLanguage::get(nl);
|
||||
match_avinue *plural_trie =
|
||||
PreformUtilities::define_trie(<singular-noun-to-its-plural>, TRIE_END,
|
||||
InflectionDefns::default_nl(nl));
|
||||
return Inflections::suffix_inflection(OUT, plural_trie, from);
|
||||
DefaultLanguage::get(nl));
|
||||
return Inflect::suffix(OUT, plural_trie, from);
|
||||
}
|
|
@ -1,55 +1,70 @@
|
|||
[Inflections::] Tries and Inflections.
|
||||
[Inflect::] Tries and Inflections.
|
||||
|
||||
Using tries to inflect word endings.
|
||||
|
||||
@h Suffix inflections.
|
||||
The following inflects the ending of the supplied text. It does so by
|
||||
running the text through an avinue (a sequence of tries), whose result
|
||||
is an instruction on how to modify that text: for example, the result
|
||||
|"3ize"| tells us to strike out the last 3 characters and add "ize".
|
||||
The special character |+| means "duplicate the last character" and
|
||||
is useful for inflections which double consonants, such as "big" to
|
||||
"bigger", which can be done with the instruction |"0+er"|.
|
||||
|
||||
If there's no initial digit, the result replaces the original entirely;
|
||||
if the result is null, i.e., if the avinue finds nothing, the result is
|
||||
the same as the original.
|
||||
running the text through an avinue: see //foundation: Tries and Avinues//,
|
||||
which is where the asterisk notation is handled.
|
||||
|
||||
=
|
||||
int Inflections::suffix_inflection(OUTPUT_STREAM, match_avinue *T, text_stream *from) {
|
||||
int Inflect::suffix(OUTPUT_STREAM, match_avinue *T, text_stream *from) {
|
||||
wchar_t *result = Tries::search_avinue(T, from);
|
||||
return Inflections::follow_suffix_instruction(OUT, from, result);
|
||||
return Inflect::follow_suffix_instruction(OUT, from, result);
|
||||
}
|
||||
|
||||
int Inflections::follow_suffix_instruction(OUTPUT_STREAM, text_stream *from, wchar_t *instruction) {
|
||||
@ The //foundation// code returns a |result| which may be null, if no match
|
||||
was found. In that event, we leave the text unchanged, just as if the result
|
||||
had been |0| -- meaning "change nothing".
|
||||
|
||||
=
|
||||
int Inflect::follow_suffix_instruction(OUTPUT_STREAM, text_stream *from,
|
||||
wchar_t *instruction) {
|
||||
int success = TRUE;
|
||||
if (instruction == NULL) { success = FALSE; instruction = L"0"; }
|
||||
int back = instruction[0] - '0';
|
||||
TEMPORARY_TEXT(outcome);
|
||||
if ((back < 0) || (back > 9)) {
|
||||
WRITE_TO(outcome, "%w", instruction);
|
||||
} else {
|
||||
for (int i = 0, len = Str::len(from); i<len-back; i++) PUT_TO(outcome, Str::get_at(from, i));
|
||||
int j = 1;
|
||||
if (instruction[j] == '+') { int last = Str::get_last_char(outcome); PUT_TO(outcome, last); j++; }
|
||||
for (; instruction[j]; j++) PUT_TO(outcome, instruction[j]);
|
||||
}
|
||||
|
||||
LOOP_THROUGH_TEXT(pos, outcome)
|
||||
if (Str::get(pos) == '+') PUT(' ');
|
||||
else PUT(Str::get(pos));
|
||||
@<Modify the original according to the instruction@>;
|
||||
@<Write the output, interpreting plus signs as word breaks@>;
|
||||
DISCARD_TEXT(outcome);
|
||||
return success;
|
||||
}
|
||||
|
||||
@ In general the result either has an initial digit, in which case it removes
|
||||
that many terminal letters, or does not, in which case it removes all the
|
||||
letters (and thus the result text replaces the original entirely).
|
||||
The special character |+| after a digit means "duplicate the last character";
|
||||
in other contexts it means "break words here".
|
||||
|
||||
For example, the result |3ize| tells us to strike out the last 3 characters and
|
||||
add "ize".
|
||||
|
||||
@<Modify the original according to the instruction@> =
|
||||
int back = instruction[0] - '0';
|
||||
if ((back < 0) || (back > 9)) {
|
||||
WRITE_TO(outcome, "%w", instruction);
|
||||
} else {
|
||||
for (int i = 0, len = Str::len(from); i<len-back; i++)
|
||||
PUT_TO(outcome, Str::get_at(from, i));
|
||||
int j = 1;
|
||||
if (instruction[j] == '+') {
|
||||
int last = Str::get_last_char(outcome); PUT_TO(outcome, last); j++;
|
||||
}
|
||||
for (; instruction[j]; j++) PUT_TO(outcome, instruction[j]);
|
||||
}
|
||||
|
||||
@<Write the output, interpreting plus signs as word breaks@> =
|
||||
LOOP_THROUGH_TEXT(pos, outcome)
|
||||
if (Str::get(pos) == '+') PUT(' ');
|
||||
else PUT(Str::get(pos));
|
||||
|
||||
@h General tries.
|
||||
Here we take a word assemblage and apply suffix inflection to the first word
|
||||
alone, preserving the rest. However, if the result of this inflection contains
|
||||
any |+| signs, those become word boundaries. This allows for inflections which
|
||||
do more than simply fiddle with the final letters.
|
||||
alone, preserving the rest: for example, "make the tea" might become "making
|
||||
the tea". However, if the result of this inflection contains any |+| signs,
|
||||
those once again become word boundaries.
|
||||
|
||||
=
|
||||
word_assemblage Inflections::apply_trie_to_wa(word_assemblage wa, match_avinue *T) {
|
||||
word_assemblage Inflect::first_word(word_assemblage wa, match_avinue *T) {
|
||||
vocabulary_entry **words;
|
||||
int no_words;
|
||||
WordAssemblages::as_array(&wa, &words, &no_words);
|
||||
|
@ -58,7 +73,7 @@ word_assemblage Inflections::apply_trie_to_wa(word_assemblage wa, match_avinue *
|
|||
TEMPORARY_TEXT(unsuffixed);
|
||||
TEMPORARY_TEXT(suffixed);
|
||||
WRITE_TO(unsuffixed, "%V", words[0]);
|
||||
int s = Inflections::suffix_inflection(suffixed, T, unsuffixed);
|
||||
int s = Inflect::suffix(suffixed, T, unsuffixed);
|
||||
if (s == FALSE) {
|
||||
LOOP_THROUGH_TEXT(pos, unsuffixed)
|
||||
if (Str::get(pos) == '+') PUT_TO(suffixed, ' ');
|
||||
|
|
|
@ -3,7 +3,16 @@
|
|||
Declensions are sets of inflected variations of a common stem
|
||||
according to grammatical case.
|
||||
|
||||
@h Declension.
|
||||
@ The traditional term "declension" refers to the set of inflected forms of a
|
||||
word which does not serve as a verb: nouns, adjectives and pronouns all have
|
||||
"declensions". These forms generally vary according to gender, number and
|
||||
also "case", which expresses context.
|
||||
|
||||
The //inflections// module uses the term "declension" in a more limited sense:
|
||||
it is just the set of variations by case. Variations by gender and number are
|
||||
taken care of by what are less elegantly called //Name Clusters//.
|
||||
|
||||
At any rate, a //declension// object is a set of wordings, one for each case:
|
||||
|
||||
=
|
||||
typedef struct declension {
|
||||
|
@ -11,174 +20,9 @@ typedef struct declension {
|
|||
struct wording name_cased[MAX_GRAMMATICAL_CASES];
|
||||
} declension;
|
||||
|
||||
@ =
|
||||
declension Declensions::decline(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl, int gen, int num) {
|
||||
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) {
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
declension D = Declensions::decline_inner(W, nl, gen, num, <article-declension>);
|
||||
@<Fix the origin@>;
|
||||
return D;
|
||||
}
|
||||
|
||||
@<Fix the origin@> =
|
||||
int nc = Declensions::no_cases(nl);
|
||||
for (int c = 0; c < nc; c++)
|
||||
LOOP_THROUGH_WORDING(i, D.name_cased[c])
|
||||
Lexer::set_word_location(i,
|
||||
Lexer::word_location(
|
||||
Wordings::first_wn(W)));
|
||||
|
||||
@ =
|
||||
declension Declensions::decline_inner(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl, int gen, int num, nonterminal *nt) {
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
declension D;
|
||||
D.within_language = nl;
|
||||
for (production_list *pl = nt->first_pl; pl; pl = pl->next_pl) {
|
||||
if ((pl->definition_language == NULL) || (pl->definition_language == nl)) {
|
||||
for (production *pr = pl->first_pr; pr; pr = pr->next_pr) {
|
||||
if ((pr->first_pt == NULL) ||
|
||||
(pr->first_pt->ptoken_category != FIXED_WORD_PTC) ||
|
||||
(pr->first_pt->next_pt == NULL) ||
|
||||
(pr->first_pt->next_pt->ptoken_category != NONTERMINAL_PTC))
|
||||
internal_error("line in <noun-declension> malformed");
|
||||
wchar_t *gender_letter = Vocabulary::get_exemplar(pr->first_pt->ve_pt, FALSE);
|
||||
if ((gender_letter[0] == '*') ||
|
||||
((gender_letter[0] == 'm') && (gen == MASCULINE_GENDER)) ||
|
||||
((gender_letter[0] == 'f') && (gen == FEMININE_GENDER)) ||
|
||||
((gender_letter[0] == 'n') && (gen == NEUTER_GENDER))) {
|
||||
int found = FALSE;
|
||||
nonterminal *gnt = pr->first_pt->next_pt->nt_pt;
|
||||
if (pr->first_pt->next_pt->next_pt == NULL) {
|
||||
D = Declensions::decline_from_irregulars(W, nl, gnt, num, &found);
|
||||
} else {
|
||||
if ((pr->first_pt->next_pt->next_pt->ptoken_category != NONTERMINAL_PTC) ||
|
||||
(pr->first_pt->next_pt->next_pt->next_pt != NULL))
|
||||
internal_error("this line must end with two nonterminals");
|
||||
nonterminal *tnt = pr->first_pt->next_pt->next_pt->nt_pt;
|
||||
D = Declensions::decline_from_groups(W, nl, gnt, tnt, num, &found);
|
||||
}
|
||||
if (found) return D;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
internal_error("no declension table terminated");
|
||||
return D;
|
||||
}
|
||||
|
||||
declension Declensions::decline_from_irregulars(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl,
|
||||
nonterminal *gnt, int num, int *found) {
|
||||
*found = FALSE;
|
||||
declension D;
|
||||
D.within_language = nl;
|
||||
if (Wordings::length(W) == 1)
|
||||
for (production_list *pl = gnt->first_pl; pl; pl = pl->next_pl)
|
||||
if ((pl->definition_language == NULL) || (pl->definition_language == nl))
|
||||
for (production *pr = pl->first_pr; pr; pr = pr->next_pr) {
|
||||
vocabulary_entry *stem = pr->first_pt->ve_pt;
|
||||
if (stem == Lexer::word(Wordings::first_wn(W))) {
|
||||
*found = TRUE;
|
||||
int c = 0, nc = Declensions::no_cases(nl);
|
||||
for (ptoken *pt = pr->first_pt->next_pt; pt; pt = pt->next_pt) {
|
||||
if (pt->ptoken_category != FIXED_WORD_PTC)
|
||||
internal_error("nonterminals are not allowed in irregular declensions");
|
||||
if (((num == 1) && (c < nc)) || ((num == 2) && (c >= nc))) {
|
||||
TEMPORARY_TEXT(stem);
|
||||
TEMPORARY_TEXT(result);
|
||||
WRITE_TO(stem, "%W", W);
|
||||
Inflections::follow_suffix_instruction(result, stem,
|
||||
Vocabulary::get_exemplar(pt->ve_pt, TRUE));
|
||||
D.name_cased[c%nc] = Feeds::feed_text(result);
|
||||
DISCARD_TEXT(stem);
|
||||
DISCARD_TEXT(result);
|
||||
}
|
||||
c++;
|
||||
}
|
||||
if (c < 2*nc) internal_error("too few cases in irregular declension");
|
||||
if (c > 2*nc) internal_error("too many cases in irregular declension");
|
||||
return D;
|
||||
}
|
||||
}
|
||||
return D;
|
||||
}
|
||||
|
||||
declension Declensions::decline_from_groups(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl,
|
||||
nonterminal *gnt, nonterminal *nt, int num, int *found) {
|
||||
declension D;
|
||||
D.within_language = nl;
|
||||
TEMPORARY_TEXT(from);
|
||||
WRITE_TO(from, "%+W", W);
|
||||
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) {
|
||||
*found = FALSE;
|
||||
} else {
|
||||
*found = TRUE;
|
||||
int group = result[0] - '0';
|
||||
if ((group <= 0) || (group > 9))
|
||||
internal_error("noun declension nonterminal result not a group number");
|
||||
for (production_list *pl = nt->first_pl; pl; pl = pl->next_pl) {
|
||||
if ((pl->definition_language == NULL) || (pl->definition_language == nl)) {
|
||||
for (production *pr = pl->first_pr; pr; pr = pr->next_pr) {
|
||||
if ((pr->first_pt == NULL) ||
|
||||
(pr->first_pt->ptoken_category != NONTERMINAL_PTC) ||
|
||||
(pr->first_pt->next_pt != NULL))
|
||||
internal_error("noun declension nonterminal malformed");
|
||||
if (--group == 0)
|
||||
return Declensions::decline_from(W, nl, pr->first_pt->nt_pt, num);
|
||||
}
|
||||
}
|
||||
}
|
||||
internal_error("noun declension nonterminal has too few groups");
|
||||
}
|
||||
return D;
|
||||
}
|
||||
|
||||
declension Declensions::decline_from(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl, nonterminal *nt, int num) {
|
||||
int c = 0, nc = Declensions::no_cases(nl);
|
||||
declension D;
|
||||
D.within_language = nl;
|
||||
for (production_list *pl = nt->first_pl; pl; pl = pl->next_pl) {
|
||||
if ((pl->definition_language == NULL) || (pl->definition_language == nl)) {
|
||||
for (production *pr = pl->first_pr; pr; pr = pr->next_pr) {
|
||||
if ((pr->first_pt == NULL) ||
|
||||
(pr->first_pt->ptoken_category != FIXED_WORD_PTC) ||
|
||||
(pr->first_pt->next_pt != NULL))
|
||||
internal_error("<noun-declension> too complex");
|
||||
if (((c < nc) && (num == 1)) || ((c >= nc) && (num == 2))) {
|
||||
TEMPORARY_TEXT(stem);
|
||||
TEMPORARY_TEXT(result);
|
||||
WRITE_TO(stem, "%+W", W);
|
||||
Inflections::follow_suffix_instruction(result, stem,
|
||||
Vocabulary::get_exemplar(pr->first_pt->ve_pt, TRUE));
|
||||
D.name_cased[c%nc] = Feeds::feed_text(result);
|
||||
DISCARD_TEXT(stem);
|
||||
DISCARD_TEXT(result);
|
||||
}
|
||||
c++;
|
||||
}
|
||||
if (c < 2*nc) internal_error("too few cases in declension");
|
||||
if (c > 2*nc) internal_error("too many cases in declension");
|
||||
return D;
|
||||
}
|
||||
}
|
||||
internal_error("declination unavailable");
|
||||
return D;
|
||||
}
|
||||
|
||||
wording Declensions::in_case(declension *D, int c) {
|
||||
if ((c < 0) || (c >= Declensions::no_cases(D->within_language))) internal_error("case out of range");
|
||||
return D->name_cased[c];
|
||||
}
|
||||
@ Cases in a language are itemised in the special nonterminal <grammatical-case-names>:
|
||||
|
||||
=
|
||||
int Declensions::no_cases(NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
nonterminal *nt = <grammatical-case-names>;
|
||||
for (production_list *pl = nt->first_pl; pl; pl = pl->next_pl) {
|
||||
|
@ -194,11 +38,15 @@ int Declensions::no_cases(NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
@ The following is useful for debugging:
|
||||
|
||||
=
|
||||
void Declensions::writer(OUTPUT_STREAM, declension *D, declension *AD) {
|
||||
nonterminal *nt = <grammatical-case-names>;
|
||||
int nc = Declensions::no_cases(D->within_language);
|
||||
for (production_list *pl = nt->first_pl; pl; pl = pl->next_pl) {
|
||||
if ((pl->definition_language == NULL) || (pl->definition_language == D->within_language)) {
|
||||
if ((pl->definition_language == NULL) ||
|
||||
(pl->definition_language == D->within_language)) {
|
||||
int c = 0;
|
||||
for (production *pr = pl->first_pr; pr; pr = pr->next_pr) {
|
||||
if ((pr->first_pt == NULL) ||
|
||||
|
@ -217,3 +65,207 @@ void Declensions::writer(OUTPUT_STREAM, declension *D, declension *AD) {
|
|||
}
|
||||
internal_error("<grammatical-case-names> not provided for this language");
|
||||
}
|
||||
|
||||
@ And this function extracts the right form for a given case |c|:
|
||||
|
||||
=
|
||||
wording Declensions::in_case(declension *D, int c) {
|
||||
if ((c < 0) || (c >= Declensions::no_cases(D->within_language)))
|
||||
internal_error("case out of range");
|
||||
return D->name_cased[c];
|
||||
}
|
||||
|
||||
@ So much for using declensions; now to generate them. They are inflected from
|
||||
the stem by special Preform nonterminals:
|
||||
|
||||
=
|
||||
declension Declensions::of_noun(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl,
|
||||
int gen, int num) {
|
||||
nl = DefaultLanguage::get(nl);
|
||||
declension D = Declensions::decline_inner(W, nl, gen, num, <noun-declension>);
|
||||
@<Fix the origin@>;
|
||||
return D;
|
||||
}
|
||||
|
||||
declension Declensions::of_article(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl,
|
||||
int gen, int num) {
|
||||
nl = DefaultLanguage::get(nl);
|
||||
declension D = Declensions::decline_inner(W, nl, gen, num, <article-declension>);
|
||||
@<Fix the origin@>;
|
||||
return D;
|
||||
}
|
||||
|
||||
@ If a word comes from a given file and line number in the source text, then
|
||||
we will say that so does any inflected form of it:
|
||||
|
||||
@<Fix the origin@> =
|
||||
for (int c = 0; c < Declensions::no_cases(nl); c++)
|
||||
LOOP_THROUGH_WORDING(i, D.name_cased[c])
|
||||
Lexer::set_word_location(i, Lexer::word_location(Wordings::first_wn(W)));
|
||||
|
||||
@ For the format of the table expressed by the nonterminal |nt|, see
|
||||
//What This Module Does//.
|
||||
|
||||
=
|
||||
declension Declensions::decline_inner(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl,
|
||||
int gen, int num, nonterminal *nt) {
|
||||
nl = DefaultLanguage::get(nl);
|
||||
declension D;
|
||||
D.within_language = nl;
|
||||
for (production_list *pl = nt->first_pl; pl; pl = pl->next_pl) {
|
||||
if ((pl->definition_language == NULL) || (pl->definition_language == nl)) {
|
||||
for (production *pr = pl->first_pr; pr; pr = pr->next_pr) {
|
||||
if ((pr->first_pt == NULL) ||
|
||||
(pr->first_pt->ptoken_category != FIXED_WORD_PTC) ||
|
||||
(pr->first_pt->next_pt == NULL) ||
|
||||
(pr->first_pt->next_pt->ptoken_category != NONTERMINAL_PTC))
|
||||
internal_error("line in <noun-declension> malformed");
|
||||
wchar_t *gender_letter = Vocabulary::get_exemplar(pr->first_pt->ve_pt, FALSE);
|
||||
if ((gender_letter[0] == '*') ||
|
||||
((gender_letter[0] == 'm') && (gen == MASCULINE_GENDER)) ||
|
||||
((gender_letter[0] == 'f') && (gen == FEMININE_GENDER)) ||
|
||||
((gender_letter[0] == 'n') && (gen == NEUTER_GENDER)))
|
||||
@<Decline according to this row in declension NT@>;
|
||||
}
|
||||
}
|
||||
}
|
||||
internal_error("no declension table terminated");
|
||||
return D;
|
||||
}
|
||||
|
||||
@<Decline according to this row in declension NT@> =
|
||||
int found = FALSE;
|
||||
nonterminal *gnt = pr->first_pt->next_pt->nt_pt;
|
||||
if (pr->first_pt->next_pt->next_pt == NULL) {
|
||||
D = Declensions::decline_from_irregulars(W, nl, gnt, num, &found);
|
||||
} else {
|
||||
if ((pr->first_pt->next_pt->next_pt->ptoken_category != NONTERMINAL_PTC) ||
|
||||
(pr->first_pt->next_pt->next_pt->next_pt != NULL))
|
||||
internal_error("this line must end with two nonterminals");
|
||||
nonterminal *tnt = pr->first_pt->next_pt->next_pt->nt_pt;
|
||||
D = Declensions::decline_from_groups(W, nl, gnt, tnt, num, &found);
|
||||
}
|
||||
if (found) return D;
|
||||
|
||||
@ This is for the two-token form of row, |gender table|:
|
||||
|
||||
=
|
||||
declension Declensions::decline_from_irregulars(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl,
|
||||
nonterminal *gnt, int num, int *found) {
|
||||
*found = FALSE;
|
||||
declension D;
|
||||
D.within_language = nl;
|
||||
if (Wordings::length(W) == 1)
|
||||
for (production_list *pl = gnt->first_pl; pl; pl = pl->next_pl)
|
||||
if ((pl->definition_language == NULL) || (pl->definition_language == nl))
|
||||
for (production *pr = pl->first_pr; pr; pr = pr->next_pr) {
|
||||
vocabulary_entry *stem = pr->first_pt->ve_pt;
|
||||
if (stem == Lexer::word(Wordings::first_wn(W))) {
|
||||
*found = TRUE;
|
||||
int c = 0, nc = Declensions::no_cases(nl);
|
||||
for (ptoken *pt = pr->first_pt->next_pt; pt; pt = pt->next_pt) {
|
||||
if (pt->ptoken_category != FIXED_WORD_PTC)
|
||||
internal_error("NTs are not allowed in irregular decs");
|
||||
if (((num == 1) && (c < nc)) || ((num == 2) && (c >= nc))) {
|
||||
TEMPORARY_TEXT(stem);
|
||||
TEMPORARY_TEXT(result);
|
||||
WRITE_TO(stem, "%W", W);
|
||||
Inflect::follow_suffix_instruction(result, stem,
|
||||
Vocabulary::get_exemplar(pt->ve_pt, TRUE));
|
||||
D.name_cased[c%nc] = Feeds::feed_text(result);
|
||||
DISCARD_TEXT(stem);
|
||||
DISCARD_TEXT(result);
|
||||
}
|
||||
c++;
|
||||
}
|
||||
if (c < 2*nc) internal_error("too few cases in irregular ded");
|
||||
if (c > 2*nc) internal_error("too many cases in irregular dec");
|
||||
return D;
|
||||
}
|
||||
}
|
||||
return D;
|
||||
}
|
||||
|
||||
@ And this is for the three-token form of row, |gender grouper table|:
|
||||
|
||||
=
|
||||
declension Declensions::decline_from_groups(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl,
|
||||
nonterminal *gnt, nonterminal *nt, int num, int *found) {
|
||||
declension D;
|
||||
D.within_language = nl;
|
||||
TEMPORARY_TEXT(from);
|
||||
WRITE_TO(from, "%+W", W);
|
||||
match_avinue *group_trie = PreformUtilities::define_trie(gnt, TRIE_END,
|
||||
DefaultLanguage::get(nl));
|
||||
wchar_t *result = Tries::search_avinue(group_trie, from);
|
||||
DISCARD_TEXT(from);
|
||||
if (result == NULL) {
|
||||
*found = FALSE;
|
||||
} else {
|
||||
*found = TRUE;
|
||||
int group;
|
||||
@<Set the group number@>;
|
||||
for (production_list *pl = nt->first_pl; pl; pl = pl->next_pl)
|
||||
if ((pl->definition_language == NULL) || (pl->definition_language == nl))
|
||||
for (production *pr = pl->first_pr; pr; pr = pr->next_pr) {
|
||||
if ((pr->first_pt == NULL) ||
|
||||
(pr->first_pt->ptoken_category != NONTERMINAL_PTC) ||
|
||||
(pr->first_pt->next_pt != NULL))
|
||||
internal_error("noun declension nonterminal malformed");
|
||||
if (--group == 0)
|
||||
return Declensions::decline_from(W, nl, pr->first_pt->nt_pt, num);
|
||||
}
|
||||
internal_error("noun declension nonterminal has too few groups");
|
||||
}
|
||||
return D;
|
||||
}
|
||||
|
||||
@<Set the group number@> =
|
||||
group = result[0] - '0';
|
||||
if ((group <= 0) || (group > 9))
|
||||
internal_error("noun declension grouper result not a group number");
|
||||
if (result[1]) {
|
||||
int u = result[1] - '0';
|
||||
if ((u < 0) || (u > 9))
|
||||
internal_error("noun declension grouper result not a group number");
|
||||
group = group*10 + u;
|
||||
if (result[2]) internal_error("noun declension grouper result too high");
|
||||
}
|
||||
|
||||
@ We have now found the actual declension table NT; if there are $N$ cases
|
||||
in the language, there will be $2N$ productions in this table, each of which
|
||||
consists of a single word giving the rewriting instruction to use.
|
||||
|
||||
=
|
||||
declension Declensions::decline_from(wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl,
|
||||
nonterminal *nt, int num) {
|
||||
int c = 0, nc = Declensions::no_cases(nl);
|
||||
declension D;
|
||||
D.within_language = nl;
|
||||
for (production_list *pl = nt->first_pl; pl; pl = pl->next_pl) {
|
||||
if ((pl->definition_language == NULL) || (pl->definition_language == nl)) {
|
||||
for (production *pr = pl->first_pr; pr; pr = pr->next_pr) {
|
||||
if ((pr->first_pt == NULL) ||
|
||||
(pr->first_pt->ptoken_category != FIXED_WORD_PTC) ||
|
||||
(pr->first_pt->next_pt != NULL))
|
||||
internal_error("<noun-declension> too complex");
|
||||
if (((c < nc) && (num == 1)) || ((c >= nc) && (num == 2))) {
|
||||
TEMPORARY_TEXT(stem);
|
||||
TEMPORARY_TEXT(result);
|
||||
WRITE_TO(stem, "%+W", W);
|
||||
Inflect::follow_suffix_instruction(result, stem,
|
||||
Vocabulary::get_exemplar(pr->first_pt->ve_pt, TRUE));
|
||||
D.name_cased[c%nc] = Feeds::feed_text(result);
|
||||
DISCARD_TEXT(stem);
|
||||
DISCARD_TEXT(result);
|
||||
}
|
||||
c++;
|
||||
}
|
||||
if (c < 2*nc) internal_error("too few cases in declension");
|
||||
if (c > 2*nc) internal_error("too many cases in declension");
|
||||
return D;
|
||||
}
|
||||
}
|
||||
internal_error("declination unavailable");
|
||||
return D;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[InflectionDefns::] Linguistic Definitions.
|
||||
[InflectionDefns::] Linguistic Constants.
|
||||
|
||||
Some basic linguistic constants are defined.
|
||||
|
||||
|
@ -45,12 +45,12 @@ which is required to be case 0.
|
|||
in English. Some languages can use optional extras; French, for example, uses
|
||||
tense 5 for the past historic.
|
||||
|
||||
@d NO_KNOWN_TENSES 7 /* allowing for two optional extras in non-English languages */
|
||||
@d IS_TENSE 0 /* Present */
|
||||
@d WAS_TENSE 1 /* Past */
|
||||
@d HASBEEN_TENSE 2 /* Present perfect */
|
||||
@d HADBEEN_TENSE 3 /* Past perfect */
|
||||
@d WILLBE_TENSE 4 /* Future (not used in assertions or conditions) */
|
||||
@d NO_KNOWN_TENSES 7
|
||||
@d IS_TENSE 0 /* Present */
|
||||
@d WAS_TENSE 1 /* Past */
|
||||
@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
|
||||
|
||||
|
@ -67,19 +67,3 @@ void InflectionDefns::log_tense_number(OUTPUT_STREAM, int t) {
|
|||
default: WRITE("<invalid-tense>"); break;
|
||||
}
|
||||
}
|
||||
|
||||
@h A default language.
|
||||
The following is in effect also a constant; Inform sets it to English early
|
||||
in its run.
|
||||
|
||||
=
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *default_language_for_linguistics = NULL;
|
||||
|
||||
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;
|
||||
}
|
|
@ -41,10 +41,10 @@ name_cluster *Clusters::new(void) {
|
|||
=
|
||||
individual_name *Clusters::add_one(name_cluster *names, wording W,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl, int gender, int number) {
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
nl = DefaultLanguage::get(nl);
|
||||
individual_name *in = CREATE(individual_name);
|
||||
in->principal_meaning = NULL_GENERAL_POINTER;
|
||||
in->name = Declensions::decline(W, nl, gender, number);
|
||||
in->name = Declensions::of_noun(W, nl, gender, number);
|
||||
in->name_language = nl;
|
||||
in->name_number = number;
|
||||
in->name_gender = gender;
|
||||
|
@ -94,8 +94,8 @@ combinations. Here we only work through six, ignoring animation:
|
|||
=
|
||||
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))
|
||||
nl = DefaultLanguage::get(nl);
|
||||
if (nl == DefaultLanguage::get(NULL))
|
||||
Clusters::add(cl, W, nl, NEUTER_GENDER, 1, FALSE);
|
||||
else
|
||||
for (int gna = 0; gna < 6; gna++)
|
||||
|
@ -133,13 +133,13 @@ through one or two tries.
|
|||
@<Process via the agreement trie in this pipeline@> =
|
||||
word_assemblage wa = WordAssemblages::from_wording(W);
|
||||
if (step1)
|
||||
wa = Inflections::apply_trie_to_wa(wa,
|
||||
wa = Inflect::first_word(wa,
|
||||
PreformUtilities::define_trie(step1, TRIE_END,
|
||||
InflectionDefns::default_nl(nl)));
|
||||
DefaultLanguage::get(nl)));
|
||||
if (step2)
|
||||
wa = Inflections::apply_trie_to_wa(wa,
|
||||
wa = Inflect::first_word(wa,
|
||||
PreformUtilities::define_trie(step2, TRIE_END,
|
||||
InflectionDefns::default_nl(nl)));
|
||||
DefaultLanguage::get(nl)));
|
||||
FW = WordAssemblages::to_wording(&wa);
|
||||
|
||||
@h Plural fixing.
|
||||
|
@ -155,7 +155,7 @@ void Clusters::set_plural_name(name_cluster *cl, wording W,
|
|||
individual_name *in;
|
||||
LOOP_OVER_LINKED_LIST(in, individual_name, cl->listed)
|
||||
if (in->name_number == 2) {
|
||||
in->name = Declensions::decline(W, nl, NEUTER_GENDER, 2);
|
||||
in->name = Declensions::of_noun(W, nl, NEUTER_GENDER, 2);
|
||||
return;
|
||||
}
|
||||
Clusters::add(cl, W, NULL, NEUTER_GENDER, 2, FALSE);
|
||||
|
|
|
@ -34,12 +34,97 @@ typedef struct verb_tabulation {
|
|||
int modal_auxiliary_usage[NO_KNOWN_TENSES][2][6];
|
||||
} verb_tabulation;
|
||||
|
||||
@h Finding.
|
||||
Most of the time, conjugations can be identified by their infinitives:
|
||||
|
||||
=
|
||||
verb_conjugation *Conjugation::find_by_infinitive(word_assemblage infinitive) {
|
||||
verb_conjugation *vc;
|
||||
LOOP_OVER(vc, verb_conjugation)
|
||||
if (WordAssemblages::eq(&infinitive, &(vc->infinitive)))
|
||||
return vc;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ But in fact multiple conjugations can be given with the same infinitive...
|
||||
|
||||
=
|
||||
verb_conjugation *Conjugation::find_prior(verb_conjugation *nvc) {
|
||||
if (nvc == NULL) return NULL;
|
||||
verb_conjugation *vc;
|
||||
LOOP_OVER(vc, verb_conjugation)
|
||||
if ((vc != nvc) && (Conjugation::eq(nvc, vc)))
|
||||
return vc;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ ...and those may or may not be identical, so a more detailed test is:
|
||||
|
||||
=
|
||||
int Conjugation::eq(verb_conjugation *nvc, verb_conjugation *vc) {
|
||||
if ((WordAssemblages::eq(&(nvc->infinitive), &(vc->infinitive))) &&
|
||||
(WordAssemblages::eq(&(nvc->past_participle), &(vc->past_participle))) &&
|
||||
(WordAssemblages::eq(&(nvc->present_participle), &(vc->present_participle)))) {
|
||||
for (int i=0; i<NO_KNOWN_MOODS; i++) {
|
||||
verb_tabulation *nvt = &(nvc->tabulations[i]);
|
||||
verb_tabulation *vt = &(vc->tabulations[i]);
|
||||
if (WordAssemblages::eq(
|
||||
&(nvt->to_be_auxiliary), &(vt->to_be_auxiliary)) == FALSE) return FALSE;
|
||||
for (int p=0; p<6; p++)
|
||||
for (int s=0; s<2; s++)
|
||||
for (int t=0; t<NO_KNOWN_TENSES; t++) {
|
||||
if (WordAssemblages::eq(
|
||||
&(nvt->vc_text[t][s][p]), &(vt->vc_text[t][s][p])) == FALSE)
|
||||
return FALSE;
|
||||
if (nvt->modal_auxiliary_usage[t][s][p] !=
|
||||
vt->modal_auxiliary_usage[t][s][p]) return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ The following prints out a tidy form of a verb conjugation table:
|
||||
|
||||
=
|
||||
void Conjugation::write(OUTPUT_STREAM, verb_conjugation *vc) {
|
||||
WRITE("Infinitive: %A / Present participle: %A / Past participle: %A^",
|
||||
&(vc->infinitive), &(vc->present_participle), &(vc->past_participle));
|
||||
int mood_count = 2;
|
||||
if (WordAssemblages::nonempty(vc->tabulations[PASSIVE_MOOD].to_be_auxiliary))
|
||||
mood_count = 1;
|
||||
int mood, sense, tense, person;
|
||||
for (mood=0; mood<mood_count; mood++) {
|
||||
for (sense=0; sense<2; sense++) {
|
||||
if (mood == 0) WRITE("Active "); else WRITE("Passive ");
|
||||
if (sense == 0) WRITE("positive^"); else WRITE("negative^");
|
||||
for (tense=0; tense<7; tense++) {
|
||||
WRITE("Tense %d: ", tense);
|
||||
for (person=0; person<6; person++) {
|
||||
word_assemblage *wa;
|
||||
if (mood == 0)
|
||||
wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][person]);
|
||||
else
|
||||
wa = &(vc->tabulations[PASSIVE_MOOD].vc_text[tense][sense][person]);
|
||||
if (person > 0) WRITE(" / ");
|
||||
if (WordAssemblages::nonempty(*wa)) WRITE("%A", wa);
|
||||
else WRITE("--");
|
||||
}
|
||||
WRITE("^");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (WordAssemblages::nonempty(vc->tabulations[PASSIVE_MOOD].to_be_auxiliary))
|
||||
WRITE("Form passive as to be + %A\n",
|
||||
&(vc->tabulations[PASSIVE_MOOD].to_be_auxiliary));
|
||||
}
|
||||
|
||||
@h Making conjugations.
|
||||
The following will make more sense if read alongside the examples in "English
|
||||
Inflections", which explains the format in full. In fact English itself is a
|
||||
little tame, though -- try the French Language extension for the real deal.
|
||||
Inflections", which explains the format in full.
|
||||
|
||||
The crucial early step here is |Conjugation::follow_instructions|, which has
|
||||
The crucial early step here is //Conjugation::follow_instructions//, which has
|
||||
two tasks to perform: it works out the numbered verb forms, and it chooses
|
||||
which tabulation will be used. Verb form number 0 is always the base text,
|
||||
and subsequent numbers include some which are universal across all verbs
|
||||
|
@ -54,7 +139,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) {
|
||||
nl = InflectionDefns::default_nl(nl);
|
||||
nl = DefaultLanguage::get(nl);
|
||||
if (WordAssemblages::nonempty(base_text) == FALSE)
|
||||
internal_error("No base text for verb conjugation");
|
||||
|
||||
|
@ -120,14 +205,16 @@ Note that verb form 0 can't be overridden: that was the base text.
|
|||
for (tense=0; tense<NO_KNOWN_TENSES; tense++)
|
||||
for (sense=0; sense<2; sense++)
|
||||
for (i=0; i<6; i++) {
|
||||
vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][i] = WordAssemblages::lit_0();
|
||||
vc->tabulations[PASSIVE_MOOD].vc_text[tense][sense][i] = WordAssemblages::lit_0();
|
||||
vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][i] =
|
||||
WordAssemblages::lit_0();
|
||||
vc->tabulations[PASSIVE_MOOD].vc_text[tense][sense][i] =
|
||||
WordAssemblages::lit_0();
|
||||
}
|
||||
|
||||
@ A tabulation is a sort of program laying out what to put in which slots,
|
||||
active or passive. Each production is a step in this program, and it consists
|
||||
of a "selector" followed by a "line". For example, the production:
|
||||
= (text as InC)
|
||||
= (text as Preform)
|
||||
a3 ( t1 avoir ) 3+*
|
||||
=
|
||||
contains six tokens; the selector is |a3|, and the line is made up from the
|
||||
|
@ -141,7 +228,8 @@ rest. (The selector is always just a single token.)
|
|||
for (pr = pl->first_pr; pr; pr = pr->next_pr) {
|
||||
ptoken *selector = pr->first_pt;
|
||||
ptoken *line = (selector)?(selector->next_pt):NULL;
|
||||
if ((selector) && (selector->ptoken_category == FIXED_WORD_PTC) && (line)) {
|
||||
if ((selector) && (selector->ptoken_category == FIXED_WORD_PTC) &&
|
||||
(line)) {
|
||||
@<Apply the given tabulation line to the slots selected@>;
|
||||
} else Conjugation::error(base_text, tabulation, pr,
|
||||
"tabulation row doesn't consist of a selector and then text");
|
||||
|
@ -157,22 +245,25 @@ rest. (The selector is always just a single token.)
|
|||
vc->tabulations[PASSIVE_MOOD].to_be_auxiliary =
|
||||
Conjugation::merge(line, 0, 0, 0, MAX_FORM_TYPES+1, verb_forms, nl, NULL);
|
||||
|
||||
int person, tense, sense;
|
||||
for (tense=0; tense<NO_KNOWN_TENSES; tense++)
|
||||
for (sense=0; sense<2; sense++)
|
||||
for (person=0; person<6; person++) {
|
||||
for (int tense=0; tense<NO_KNOWN_TENSES; tense++)
|
||||
for (int sense=0; sense<2; sense++)
|
||||
for (int person=0; person<6; person++) {
|
||||
if ((sense_set >= 0) && (sense != sense_set)) continue;
|
||||
if ((tense_set >= 0) && (tense != tense_set)) continue;
|
||||
if (active_set)
|
||||
vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][person] =
|
||||
Conjugation::merge(line, sense, tense, person, MAX_FORM_TYPES+1, verb_forms, nl,
|
||||
&(vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[tense][sense][person]));
|
||||
else
|
||||
vc->tabulations[PASSIVE_MOOD].vc_text[tense][sense][person] =
|
||||
Conjugation::merge(line, sense, tense, person, MAX_FORM_TYPES+1, verb_forms, nl,
|
||||
&(vc->tabulations[PASSIVE_MOOD].modal_auxiliary_usage[tense][sense][person]));
|
||||
if (active_set) @<Apply to the active mood@>
|
||||
else @<Apply to the passive mood@>;
|
||||
}
|
||||
|
||||
@<Apply to the active mood@> =
|
||||
vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][person] =
|
||||
Conjugation::merge(line, sense, tense, person, MAX_FORM_TYPES+1, verb_forms, nl,
|
||||
&(vc->tabulations[ACTIVE_MOOD].modal_auxiliary_usage[tense][sense][person]));
|
||||
|
||||
@<Apply to the passive mood@> =
|
||||
vc->tabulations[PASSIVE_MOOD].vc_text[tense][sense][person] =
|
||||
Conjugation::merge(line, sense, tense, person, MAX_FORM_TYPES+1, verb_forms, nl,
|
||||
&(vc->tabulations[PASSIVE_MOOD].modal_auxiliary_usage[tense][sense][person]));
|
||||
|
||||
@ The selector tells us which tense(s), sense(s) and mood(s) to apply the
|
||||
line to; |a3|, for example, means active mood, tense 3, in both positive
|
||||
and negative senses.
|
||||
|
@ -198,19 +289,24 @@ and negative senses.
|
|||
"unrecognised selector in tabulation row");
|
||||
}
|
||||
|
||||
@ =
|
||||
@ This routine is really an interloper from //core//. It provides the run-time
|
||||
values representing verbs in story files compiled by Inform.
|
||||
|
||||
=
|
||||
#ifdef CORE_MODULE
|
||||
inter_name *Conjugation::conj_iname(verb_conjugation *vc) {
|
||||
if (vc->vc_iname == NULL) {
|
||||
if (vc->vc_conjugates == NULL) {
|
||||
package_request *R = Hierarchy::package(Modules::find(vc->where_vc_created), MVERBS_HAP);
|
||||
package_request *R =
|
||||
Hierarchy::package(Modules::find(vc->where_vc_created), MVERBS_HAP);
|
||||
TEMPORARY_TEXT(ANT);
|
||||
WRITE_TO(ANT, "%A (modal)", vc->tabulations[ACTIVE_MOOD].vc_text[0][0][2]);
|
||||
Hierarchy::markup(R, MVERB_NAME_HMD, ANT);
|
||||
DISCARD_TEXT(ANT);
|
||||
vc->vc_iname = Hierarchy::make_iname_in(MODAL_CONJUGATION_FN_HL, R);
|
||||
} else {
|
||||
package_request *R = Verbs::verb_package(vc->vc_conjugates, vc->where_vc_created);
|
||||
package_request *R =
|
||||
Verbs::verb_package(vc->vc_conjugates, vc->where_vc_created);
|
||||
TEMPORARY_TEXT(ANT);
|
||||
WRITE_TO(ANT, "to %A", vc->infinitive);
|
||||
Hierarchy::markup(R, VERB_NAME_HMD, ANT);
|
||||
|
@ -236,8 +332,9 @@ which chooses the conjugation |<to-do-conjugation>|, which in turn sets some
|
|||
participles and then chooses the tabulation |<to-do-tabulation>|.
|
||||
|
||||
=
|
||||
nonterminal *Conjugation::follow_instructions(word_assemblage *verb_forms, int *highest_form_written,
|
||||
int *aux_len, int *avo_flag, int *niv_flag, NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
nonterminal *Conjugation::follow_instructions(word_assemblage *verb_forms,
|
||||
int *highest_form_written, int *aux_len, int *avo_flag, int *niv_flag,
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
nonterminal *instructions_nt = <verb-conjugation-instructions>;
|
||||
nonterminal *tabulation_nt = NULL, *conjugation_nt = NULL;
|
||||
*highest_form_written = 1;
|
||||
|
@ -271,13 +368,13 @@ nonterminal *Conjugation::follow_instructions(word_assemblage *verb_forms, int *
|
|||
@ Each production in this language's |<verb-conjugation-instructions>| grammar
|
||||
consists of a (possibly empty) pattern to match, followed by the name of a
|
||||
nonterminal to use as the conjugation if it matches. For example, in
|
||||
= (text as InC)
|
||||
= (text as Preform)
|
||||
-querir <fr-querir-conjugation>
|
||||
=
|
||||
the pattern part is a single token, |-querir|, which matches if the base text
|
||||
is a single word whose last six characters are "querir". A more complicated
|
||||
case is:
|
||||
= (text as InC)
|
||||
= (text as Preform)
|
||||
be able to ... <to-be-able-to-auxiliary>
|
||||
=
|
||||
Here the wildcard |...| matches one or more words, and the "auxiliary
|
||||
|
@ -296,7 +393,8 @@ infinitive" form is set to the part matched by |...|: for example,
|
|||
conjugation_nt = last->nt_pt;
|
||||
verb_forms[ADJOINT_INFINITIVE_FORM_TYPE] = verb_forms[BASE_FORM_TYPE];
|
||||
if (wildcard_from > 0)
|
||||
WordAssemblages::truncate(&(verb_forms[ADJOINT_INFINITIVE_FORM_TYPE]), wildcard_from);
|
||||
WordAssemblages::truncate(
|
||||
&(verb_forms[ADJOINT_INFINITIVE_FORM_TYPE]), wildcard_from);
|
||||
*aux_len = wildcard_from;
|
||||
}
|
||||
}
|
||||
|
@ -376,9 +474,10 @@ example:
|
|||
if (n > *highest_form_written) { *highest_form_written = n; }
|
||||
if (content_token->ptoken_category == NONTERMINAL_PTC)
|
||||
verb_forms[n] =
|
||||
Inflections::apply_trie_to_wa(
|
||||
Inflect::first_word(
|
||||
verb_forms[BASE_FORM_TYPE],
|
||||
PreformUtilities::define_trie(content_token->nt_pt, TRIE_END, InflectionDefns::default_nl(nl)));
|
||||
PreformUtilities::define_trie(content_token->nt_pt,
|
||||
TRIE_END, DefaultLanguage::get(nl)));
|
||||
else if (content_token->ptoken_category == FIXED_WORD_PTC)
|
||||
verb_forms[n] =
|
||||
Conjugation::expand_with_endings(content_token->ve_pt, verb_forms);
|
||||
|
@ -392,11 +491,11 @@ and we have to copy that text into a word assemblage and return it.
|
|||
In theory that's a one-line routine, but it's made complicated by the number
|
||||
of special syntaxes which can go into the row of text. For example, if |row|
|
||||
is only
|
||||
= (text as InC)
|
||||
= (text as Preform)
|
||||
will not do
|
||||
=
|
||||
then the word assemblage comes out to just "will not do"; but if it is
|
||||
= (text as InC)
|
||||
= (text as Preform)
|
||||
( t1 auxiliary-have ) done
|
||||
=
|
||||
then we consult tense 1 (present) of the verb "auxiliary-have", extract
|
||||
|
@ -432,7 +531,8 @@ and might expand |3+ed| to "trailed".
|
|||
|
||||
@<A fixed word is simply added to the result@> =
|
||||
if (chunk->ptoken_category == FIXED_WORD_PTC) {
|
||||
wa = WordAssemblages::join(wa, Conjugation::expand_with_endings(chunk->ve_pt, ingredients));
|
||||
wa = WordAssemblages::join(wa,
|
||||
Conjugation::expand_with_endings(chunk->ve_pt, ingredients));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -452,8 +552,8 @@ make use of the same fancy features we're allowing here.
|
|||
for (pr = pl->first_pr; pr; pr = pr->next_pr) {
|
||||
if (N == person)
|
||||
wa = WordAssemblages::join(wa,
|
||||
Conjugation::merge(pr->first_pt,
|
||||
sense, tense, person, num_ingredients, ingredients, nl, NULL));
|
||||
Conjugation::merge(pr->first_pt, sense, tense, person,
|
||||
num_ingredients, ingredients, nl, NULL));
|
||||
N++;
|
||||
}
|
||||
}
|
||||
|
@ -461,7 +561,7 @@ make use of the same fancy features we're allowing here.
|
|||
}
|
||||
|
||||
@ A number followed by a verb in brackets, like so:
|
||||
= (text as InC)
|
||||
= (text as Preform)
|
||||
3 ( avoir )
|
||||
=
|
||||
expands to verb form 3 of this verb -- the past participle of "avoir", which
|
||||
|
@ -480,15 +580,15 @@ on the next iteration.
|
|||
set, in which case we should lift a verb form, or we might not, in which case
|
||||
we should lift an ordinary usage, such as third-person singular in a particular
|
||||
tense. A lift can optionally change tense or sense: for example,
|
||||
= (text as InC)
|
||||
= (text as Preform)
|
||||
( t1 have )
|
||||
=
|
||||
lifts from the present tense of "to have". If there's no tense indicator,
|
||||
the tense remains the current one. (It's also possible to change the sense from
|
||||
positive to negative or vice versa with this, though I can't think of a
|
||||
language where this would be useful.) Note that, once again, the text of the
|
||||
infinitive passes through |Conjugation::expand_with_endings|, so that it can make use
|
||||
of the numbered verb forms if we want it to.
|
||||
infinitive passes through |Conjugation::expand_with_endings|, so that it can
|
||||
make use of the numbered verb forms if we want it to.
|
||||
|
||||
@<A bracketed verb becomes a lift@> =
|
||||
if (Conjugation::ptoken_as_bracket(chunk) == 1) {
|
||||
|
@ -515,8 +615,8 @@ of the numbered verb forms if we want it to.
|
|||
case 1: wa = WordAssemblages::join(wa, aux->infinitive); break;
|
||||
case 2: wa = WordAssemblages::join(wa, aux->present_participle); break;
|
||||
case 3: wa = WordAssemblages::join(wa, aux->past_participle); break;
|
||||
case -1: wa = WordAssemblages::join(wa, aux->tabulations[ACTIVE_MOOD].vc_text[T][S][person]);
|
||||
break;
|
||||
case -1: wa = WordAssemblages::join(wa,
|
||||
aux->tabulations[ACTIVE_MOOD].vc_text[T][S][person]); break;
|
||||
default: internal_error("only parts 1, 2, 3 can be extracted");
|
||||
}
|
||||
continue;
|
||||
|
@ -525,7 +625,8 @@ of the numbered verb forms if we want it to.
|
|||
@<A plus-plus-digit indicates auxiliary modal usage@> =
|
||||
if (chunk->ptoken_category == FIXED_WORD_PTC) {
|
||||
wchar_t *p = Vocabulary::get_exemplar(chunk->ve_pt, TRUE);
|
||||
if ((p[0] == '+') && (p[1] == '+') && (Characters::isdigit(p[2])) && (p[3] == 0)) {
|
||||
if ((p[0] == '+') && (p[1] == '+') && (Characters::isdigit(p[2])) &&
|
||||
(p[3] == 0)) {
|
||||
if (modal_following) {
|
||||
*modal_following = ((int) p[2]) - ((int) '0');
|
||||
}
|
||||
|
@ -540,7 +641,8 @@ participle); a plus sign joins two pieces together; and a tilde is a tie,
|
|||
joining but with a space. Thus |fish~to~fry| becomes three words.
|
||||
|
||||
=
|
||||
word_assemblage Conjugation::expand_with_endings(vocabulary_entry *ve, word_assemblage *verb_forms) {
|
||||
word_assemblage Conjugation::expand_with_endings(vocabulary_entry *ve,
|
||||
word_assemblage *verb_forms) {
|
||||
if (ve == NULL) return WordAssemblages::lit_0();
|
||||
|
||||
wchar_t *p = Vocabulary::get_exemplar(ve, TRUE);
|
||||
|
@ -571,20 +673,20 @@ word_assemblage Conjugation::expand_with_endings(vocabulary_entry *ve, word_asse
|
|||
@ The final step in merging verb material is to pass the result through the
|
||||
following, which attends to contractions. (Most of the time it does nothing.)
|
||||
For example, suppose we have:
|
||||
= (text as InC)
|
||||
= (text as Preform)
|
||||
ne-' ai pas
|
||||
=
|
||||
The |-'| marker tells us that the word it attaches to should contract if a
|
||||
vowel follows it. In this case that's what happens, so we convert to:
|
||||
= (text as InC)
|
||||
= (text as Preform)
|
||||
n'ai pas
|
||||
=
|
||||
On the other hand,
|
||||
= (text as InC)
|
||||
= (text as Preform)
|
||||
ne-' jette pas
|
||||
=
|
||||
would convert to
|
||||
= (text as InC)
|
||||
= (text as Preform)
|
||||
ne jette pas
|
||||
=
|
||||
with no contraction. Either way, though, we have to take some action when
|
||||
|
@ -665,13 +767,15 @@ int Conjugation::ptoken_to_tense_indicator(ptoken *pt, int *set_sense) {
|
|||
int N = p[1] - '1' + 1;
|
||||
if ((N >= 1) && (N <= NO_KNOWN_TENSES)) return N;
|
||||
}
|
||||
if ((p[0] == 't') && (Characters::isdigit(p[1])) && (p[2] == '+') && (p[3] == 0)) {
|
||||
if ((p[0] == 't') && (Characters::isdigit(p[1])) &&
|
||||
(p[2] == '+') && (p[3] == 0)) {
|
||||
int N = p[1] - '1' + 1;
|
||||
if ((N >= 1) && (N <= NO_KNOWN_TENSES)) {
|
||||
*set_sense = 0; return N;
|
||||
}
|
||||
}
|
||||
if ((p[0] == 't') && (Characters::isdigit(p[1])) && (p[2] == '-') && (p[3] == 0)) {
|
||||
if ((p[0] == 't') && (Characters::isdigit(p[1])) &&
|
||||
(p[2] == '-') && (p[3] == 0)) {
|
||||
int N = p[1] - '1' + 1;
|
||||
if ((N >= 1) && (N <= NO_KNOWN_TENSES)) {
|
||||
*set_sense = 1; return N;
|
||||
|
@ -735,76 +839,13 @@ void Conjugation::test(OUTPUT_STREAM, wording W, NATURAL_LANGUAGE_WORDS_TYPE *nl
|
|||
DESTROY(vc, verb_conjugation);
|
||||
}
|
||||
|
||||
void Conjugation::write(OUTPUT_STREAM, verb_conjugation *vc) {
|
||||
WRITE("Infinitive: %A / Present participle: %A / Past participle: %A^",
|
||||
&(vc->infinitive), &(vc->present_participle), &(vc->past_participle));
|
||||
int mood_count = 2;
|
||||
if (WordAssemblages::nonempty(vc->tabulations[PASSIVE_MOOD].to_be_auxiliary)) mood_count = 1;
|
||||
int mood, sense, tense, person;
|
||||
for (mood=0; mood<mood_count; mood++) {
|
||||
for (sense=0; sense<2; sense++) {
|
||||
if (mood == 0) WRITE("Active "); else WRITE("Passive ");
|
||||
if (sense == 0) WRITE("positive^"); else WRITE("negative^");
|
||||
for (tense=0; tense<7; tense++) {
|
||||
WRITE("Tense %d: ", tense);
|
||||
for (person=0; person<6; person++) {
|
||||
word_assemblage *wa;
|
||||
if (mood == 0) wa = &(vc->tabulations[ACTIVE_MOOD].vc_text[tense][sense][person]);
|
||||
else wa = &(vc->tabulations[PASSIVE_MOOD].vc_text[tense][sense][person]);
|
||||
if (person > 0) WRITE(" / ");
|
||||
if (WordAssemblages::nonempty(*wa)) WRITE("%A", wa);
|
||||
else WRITE("--");
|
||||
}
|
||||
WRITE("^");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (WordAssemblages::nonempty(vc->tabulations[PASSIVE_MOOD].to_be_auxiliary))
|
||||
WRITE("Form passive as to be + %A\n", &(vc->tabulations[PASSIVE_MOOD].to_be_auxiliary));
|
||||
}
|
||||
|
||||
verb_conjugation *Conjugation::find_by_infinitive(word_assemblage infinitive) {
|
||||
verb_conjugation *vc;
|
||||
LOOP_OVER(vc, verb_conjugation)
|
||||
if (WordAssemblages::compare(&infinitive, &(vc->infinitive)))
|
||||
return vc;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
verb_conjugation *Conjugation::find_prior(verb_conjugation *nvc) {
|
||||
if (nvc == NULL) return NULL;
|
||||
verb_conjugation *vc;
|
||||
LOOP_OVER(vc, verb_conjugation) {
|
||||
if (vc != nvc) {
|
||||
if (WordAssemblages::compare(&(nvc->infinitive), &(vc->infinitive)) == FALSE) continue;
|
||||
if (WordAssemblages::compare(&(nvc->past_participle), &(vc->past_participle)) == FALSE) continue;
|
||||
if (WordAssemblages::compare(&(nvc->present_participle), &(vc->present_participle)) == FALSE) continue;
|
||||
int match = TRUE;
|
||||
for (int i=0; i<NO_KNOWN_MOODS; i++) {
|
||||
verb_tabulation *nvt = &(nvc->tabulations[i]);
|
||||
verb_tabulation *vt = &(vc->tabulations[i]);
|
||||
if (WordAssemblages::compare(&(nvt->to_be_auxiliary), &(vt->to_be_auxiliary)) == FALSE) match = FALSE;
|
||||
for (int p=0; p<6; p++)
|
||||
for (int s=0; s<2; s++)
|
||||
for (int t=0; t<NO_KNOWN_TENSES; t++) {
|
||||
if (WordAssemblages::compare(&(nvt->vc_text[t][s][p]), &(vt->vc_text[t][s][p])) == FALSE) match = FALSE;
|
||||
if (nvt->modal_auxiliary_usage[t][s][p] != vt->modal_auxiliary_usage[t][s][p]) match = FALSE;
|
||||
}
|
||||
}
|
||||
if (match == FALSE) continue;
|
||||
return vc;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ This is for testing English only; it helps with the test suite cases derived
|
||||
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), InflectionDefns::default_nl(NULL));
|
||||
WordAssemblages::from_wording(W), DefaultLanguage::get(NULL));
|
||||
if (vc == NULL) { WRITE("Failed test\n"); return; }
|
||||
Conjugation::write_participle(OUT, vc);
|
||||
DESTROY(vc, verb_conjugation);
|
||||
|
|
17
services/inflections-module/Chapter 4/Default Language.w
Normal file
17
services/inflections-module/Chapter 4/Default Language.w
Normal file
|
@ -0,0 +1,17 @@
|
|||
[DefaultLanguage::] Default Language.
|
||||
|
||||
To keep track of what the default natural language is.
|
||||
|
||||
@ The following mechanism may become more sophisticated later.
|
||||
|
||||
=
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *default_language_for_linguistics = NULL;
|
||||
|
||||
void DefaultLanguage::set(NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
default_language_for_linguistics = nl;
|
||||
}
|
||||
|
||||
NATURAL_LANGUAGE_WORDS_TYPE *DefaultLanguage::get(NATURAL_LANGUAGE_WORDS_TYPE *nl) {
|
||||
if (nl) return nl;
|
||||
return default_language_for_linguistics;
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -11,18 +11,19 @@ Preliminaries
|
|||
Chapter 1: Starting Up
|
||||
Inflections Module
|
||||
|
||||
Chapter 2: Machinery
|
||||
Linguistic Definitions
|
||||
Chapter 2: Simple Inflections
|
||||
Tries and Inflections
|
||||
|
||||
Chapter 3: Grammatical Uses of Inflection
|
||||
Article Inflection
|
||||
Declensions
|
||||
Name Clusters
|
||||
Pluralisation
|
||||
Grading Adjectives
|
||||
Past Participles
|
||||
Pluralisation
|
||||
|
||||
Chapter 3: Declension and Conjugation
|
||||
Linguistic Constants
|
||||
Name Clusters
|
||||
Declensions
|
||||
Verb Conjugation
|
||||
|
||||
Chapter 4: Default Language
|
||||
Chapter 4: English
|
||||
Default Language
|
||||
English Inflections
|
||||
|
|
|
@ -26,3 +26,5 @@ 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//.)
|
||||
|
||||
@ This module has no callback functions to modify its behaviour.
|
||||
|
|
|
@ -31,54 +31,61 @@ 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:
|
||||
@ Though tries are, as just mentioned, created from Preform grammar, they are
|
||||
parsed quite differently.
|
||||
|
||||
(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.
|
||||
In trie grammar, a NT must be either a list of other tries, which are tested
|
||||
in sequence until one matches, or must be a list of inflection rules. These
|
||||
cannot be mixed within the same NT.
|
||||
|
||||
(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
|
||||
@ In a list of tries, each production consists only of a single nonterminal
|
||||
identifying the trie to make use of. One exception: the token |...| 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:
|
||||
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
|
||||
means try <fiddle-with-exceptions> first (on the whole text), 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
|
||||
@ In a list of inflection rules, each production consists of two tokens. The
|
||||
first token 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:
|
||||
a digit at the start of the replacement text means "truncate by this many
|
||||
letters and add...". The simplest possible instruction is |0| alone, which
|
||||
means "truncate 0 letters and add nothing", and therefore leaves the text
|
||||
unchanged.
|
||||
|
||||
Some examples:
|
||||
= (text as Preform)
|
||||
<pluralise> ::=
|
||||
lead lead |
|
||||
lead 0 |
|
||||
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.
|
||||
The special character |+| after a digit means "double the last letter", so
|
||||
that, for example, |0+er| turns "big" to "bigger". In other positions, |+|
|
||||
means "add another word", so for example |0+er+still| turns "big" to "bigger
|
||||
still".
|
||||
|
||||
Designing a list of inflection rules is not quite as easy as it looks, because
|
||||
these rules are not applied in succession: it's better to think of the rules
|
||||
as all being performed at once. In general, if you need one inflection
|
||||
rule to take precedence over another, put it in an earlier trie (in the list
|
||||
of tries which includes this one), 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.
|
||||
do becomes a simple matter of writing wrapper functions for tries, and these
|
||||
occupy the rest of //Chapter 2//.
|
||||
|
||||
(*) //ArticleInflection::preface_by_article// handles the variation of articles:
|
||||
for example, mutating "a" to "an" when it comes before "orange", thus making
|
||||
|
@ -97,17 +104,141 @@ 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//.
|
||||
@h Declensions.
|
||||
//Declensions// are sets of inflected forms of a noun or adjective according
|
||||
to their grammatical case. A language should list its cases in a special
|
||||
nonterminal called <grammatical-case-names>, in which "nominative" or its
|
||||
equivalent should always come first. For example:
|
||||
|
||||
= (text as Preform)
|
||||
<grammatical-case-names> ::=
|
||||
nominative | vocative | accusative | dative | genetive | ablative
|
||||
=
|
||||
The function //Declensions::no_cases// returns a count of these for a given
|
||||
natural language. The actual names of cases are only needed by the function
|
||||
//Declensions::writer//, which prints out tables of declensions for debugging
|
||||
purposes.
|
||||
|
||||
@ //Declensions::of_noun// and //Declensions::of_article// are functions to
|
||||
generate declensions, with one form for each case, from a given stem word.
|
||||
These are done with Preform NTs called <noun-declension> and <article-declension>
|
||||
respectively; these are currently the only two "declension NTs".
|
||||
|
||||
The rule for a "declension NT" is that it must provide a list of possibilities
|
||||
in the form either |gender table| or |gender grouper table|, where |gender| is:
|
||||
|
||||
(*) the letter |m| for masculine,
|
||||
(*) the letter |f| for feminine,
|
||||
(*) the letter |n| for neuter/common,
|
||||
(*) the asterisk |*| for "any gender".
|
||||
|
||||
In the two-token form |gender table|, the |table| is a nonterminal for
|
||||
irregular forms; if the three-token form |gender grouper table|, the |grouper|
|
||||
is a nonterminal which works out which "group" the word falls into -- groups
|
||||
are numbered, so perhaps, e.g., the word "device" falls into group 1 -- and
|
||||
then the |table| provides declensions for the different groups needed.
|
||||
|
||||
@ A simple example of using the irregular forms table is provided by the
|
||||
English language definition of <article-declension>:
|
||||
|
||||
= (text as Preform)
|
||||
<article-declension> ::=
|
||||
* <en-article-declension>
|
||||
|
||||
<en-article-declension> ::=
|
||||
a a a
|
||||
some some |
|
||||
the the the
|
||||
the the
|
||||
=
|
||||
Here the declension NT is <article-declension> and contains only one possibility,
|
||||
applying to all genders (hence the |*|). The |table| of irregular forms is then
|
||||
<en-article-declension>. Each production begins with the possibility against
|
||||
which the stem is matched -- here, it's going to have to be "a" or "the". There
|
||||
are then one possibility for each case (nominative and accusative) in each of
|
||||
the two numbers (singular and plural), making four forms in all. English, of
|
||||
course, is not very inflected: this would be more interesting for French:
|
||||
= (text as Preform)
|
||||
<article-declension> ::=
|
||||
m <fr-masculine-article-declension> |
|
||||
f <fr-feminine-article-declension>
|
||||
|
||||
<fr-masculine-article-declension> ::=
|
||||
un un un
|
||||
des des |
|
||||
le le le
|
||||
les les
|
||||
|
||||
<fr-feminine-article-declension> ::=
|
||||
un une une
|
||||
des des |
|
||||
le la la
|
||||
les les
|
||||
=
|
||||
|
||||
@ So much for irregular forms. Grouped forms are useful for languages like
|
||||
German, which has about 12 groups of nouns, each with its own way of declining.
|
||||
For example, there's one group which goes something like:
|
||||
= (text as Preform)
|
||||
Kraft Kraft Kraft Kraft
|
||||
Kräfte Kräfte Kräften Kräfte
|
||||
=
|
||||
and another which goes like:
|
||||
= (text as Preform)
|
||||
Kamera Kamera Kamera Kamera
|
||||
Kameras Kameras Kameras Kameras
|
||||
=
|
||||
For German, we might then have
|
||||
= (text as Preform)
|
||||
<noun-declension> ::=
|
||||
* <de-noun-grouper> <de-noun-tables>
|
||||
|
||||
<de-noun-grouper> ::=
|
||||
kraft 1 |
|
||||
kamera 2
|
||||
|
||||
<de-noun-tables> ::=
|
||||
<de-noun-group1-table> |
|
||||
<de-noun-group2-table>
|
||||
=
|
||||
where for example:
|
||||
= (text as Preform)
|
||||
<de-noun-group1-table> ::=
|
||||
0 | 0 | 0 | 0 |
|
||||
3äfte | 3äfte | 3äften | 3äfte
|
||||
=
|
||||
giving inflection rules for the four cases of German in singular and then
|
||||
in plural. In practice, of course, <de-noun-grouper> will need to sort out
|
||||
nouns rather better than this, and there are about 12 groups. Groups are
|
||||
numbered upwards from 1 to, in principle, 99. See //Declensions::decline_from_groups//.
|
||||
|
||||
@h Verb conjugations.
|
||||
This module supplies an extensive system for conjugating verbs. A full set
|
||||
of inflected forms for a verb, in all its tenses, moods and so on, is stored
|
||||
in a //verb_conjugation// object. Making these objects is a nontrivial task:
|
||||
see the function //Conjugation::conjugate//.
|
||||
|
||||
Like declensions, verb conjugations rely on a set of tables in special formats,
|
||||
but which are stored in nonterminals of Preform grammar. There is a full
|
||||
description of the syntax used in these tables in the section //English Inflections//,
|
||||
which demonstrates a complete conjugation of English verbs.
|
||||
|
||||
@h Naming conventions.
|
||||
Tries are highly language specific, and would need rewriting for every language.
|
||||
The tries for English are supplied in //English Inflections//, but that's just
|
||||
for convenience; other languages should supply them in the Inform source text of
|
||||
the relevant language extension, or in |Syntax.preform| files.
|
||||
|
||||
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)
|
||||
and name them as they please, but the top-level tries must have the same
|
||||
names that they have here. For example, the Spanish implementation of
|
||||
= (text as Preform)
|
||||
<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
|
||||
All lower-level tries used in the implementation should have names beginning
|
||||
with a language code: hence the names "en-" used in //English Inflections//.
|
||||
There doesn't need to be any direct Spanish equivalent to
|
||||
<en-trie-plural-assimilated-classical-inflections>, for example.
|
||||
|
|
|
@ -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, 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)));
|
||||
PRINT("comparative: %W, ", Grading::make_comparative(W, DefaultLanguage::get(NULL)));
|
||||
PRINT("superlative: %W, ", Grading::make_superlative(W, DefaultLanguage::get(NULL)));
|
||||
PRINT("quiddity: %W\n", Grading::make_quiddity(W, DefaultLanguage::get(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, InflectionDefns::default_nl(NULL));
|
||||
ArticleInflection::preface_by_article(AT, T, DefaultLanguage::get(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, InflectionDefns::default_nl(NULL), gen, 1);
|
||||
declension AD = Declensions::decline_article(PW, InflectionDefns::default_nl(NULL), gen, 1);
|
||||
declension D = Declensions::of_noun(W, DefaultLanguage::get(NULL), gen, 1);
|
||||
declension AD = Declensions::of_article(PW, DefaultLanguage::get(NULL), gen, 1);
|
||||
PRINT("%W --> ", W);
|
||||
Declensions::writer(STDOUT, &D, &AD);
|
||||
D = Declensions::decline(W, InflectionDefns::default_nl(NULL), gen, 2);
|
||||
AD = Declensions::decline_article(PW, InflectionDefns::default_nl(NULL), gen, 2);
|
||||
D = Declensions::of_noun(W, DefaultLanguage::get(NULL), gen, 2);
|
||||
AD = Declensions::of_article(PW, DefaultLanguage::get(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, InflectionDefns::default_nl(NULL));
|
||||
Pluralisation::regular(ASAGIG, G, DefaultLanguage::get(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, InflectionDefns::default_nl(NULL));
|
||||
Conjugation::test(T, W, DefaultLanguage::get(NULL));
|
||||
Regexp::replace(T, L"%^", L"\n", REP_REPEATING);
|
||||
PRINT("%S\n", T);
|
||||
DISCARD_TEXT(T);
|
||||
|
|
|
@ -55,7 +55,7 @@ to one verb is the same preposition as the "for" attached to another one.
|
|||
preposition_identity *Prepositions::make(word_assemblage wa, int unexpected_upper_casing_used) {
|
||||
preposition_identity *prep = NULL;
|
||||
LOOP_OVER(prep, preposition_identity)
|
||||
if (WordAssemblages::compare(&(prep->prep_text), &wa))
|
||||
if (WordAssemblages::eq(&(prep->prep_text), &wa))
|
||||
return prep;
|
||||
|
||||
prep = CREATE(preposition_identity);
|
||||
|
|
|
@ -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 != InflectionDefns::default_nl(NULL))) {
|
||||
(vu->verb_used->conjugation->defined_in != DefaultLanguage::get(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]), InflectionDefns::default_nl(NULL));
|
||||
verb <cardinal-number> ... ==> R[1]; *XP = Conjugation::conjugate(WordAssemblages::from_wording(FW[1]), DefaultLanguage::get(NULL));
|
||||
|
||||
@h Syntax tree.
|
||||
|
||||
|
|
|
@ -142,7 +142,7 @@ void WordAssemblages::as_array(word_assemblage *wa, vocabulary_entry ***array, i
|
|||
}
|
||||
|
||||
@ =
|
||||
int WordAssemblages::compare(word_assemblage *wa1, word_assemblage *wa2) {
|
||||
int WordAssemblages::eq(word_assemblage *wa1, word_assemblage *wa2) {
|
||||
if (wa1 == wa2) return TRUE;
|
||||
if ((wa1 == NULL) || (wa2 == NULL)) return FALSE;
|
||||
if (wa1->no_indiv_words != wa2->no_indiv_words) return FALSE;
|
||||
|
|
Loading…
Reference in a new issue