1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-01 06:24:58 +03:00
inform7/docs/linguistics-module/2-prn.html

432 lines
93 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Pronouns</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../index.html">home</a></li>
</ul><h2>Compiler</h2><ul>
<li><a href="../structure.html">structure</a></li>
<li><a href="../inbuildn.html">inbuild</a></li>
<li><a href="../inform7n.html">inform7</a></li>
<li><a href="../intern.html">inter</a></li>
<li><a href="../services.html">services</a></li>
<li><a href="../secrets.html">secrets</a></li>
</ul><h2>Other Tools</h2><ul>
<li><a href="../inblorbn.html">inblorb</a></li>
<li><a href="../indocn.html">indoc</a></li>
<li><a href="../inform6.html">inform6</a></li>
<li><a href="../inpolicyn.html">inpolicy</a></li>
</ul><h2>Resources</h2><ul>
<li><a href="../extensions.html">extensions</a></li>
<li><a href="../kits.html">kits</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="../docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
<li><a href="../../../inweb/index.html">inweb</a></li>
<li><a href="../../../intest/index.html">intest</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Pronouns' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../services.html">Services</a></li><li><a href="index.html">linguistics</a></li><li><a href="index.html#2">Chapter 2: NP Categories</a></li><li><b>Pronouns</b></li></ul></div>
<p class="purpose">Preform grammar for the pronouns.</p>
<ul class="toc"><li><a href="2-prn.html#SP1">&#167;1. Pronouns</a></li><li><a href="2-prn.html#SP5">&#167;5. Parsing</a></li><li><a href="2-prn.html#SP9">&#167;9. English pronouns</a></li><li><a href="2-prn.html#SP10">&#167;10. Unit testing</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Pronouns. </b>Pronouns are an awkward grammatical category. They are words standing in place
of, or somehow referring to, nouns not explicitly given. But they do not always
function as nouns (possessive pronouns are more like determiners), and we give
them their own category rather than making them into a special <a href="2-nns.html#SP3" class="internal">noun</a> object.
</p>
<p class="commentary">Pronoun objects contain no interesting data: in effect, the <a href="2-prn.html#SP1" class="internal">pronoun</a> class
is an enumeration.
</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">pronoun</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">linguistic_stock_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in_stock</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">pronoun</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure pronoun is accessed in 1/sc, 2/adj, 2/art, 2/daq, 2/nns, 3/vrb, 3/vu, 3/prp and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>A <a href="2-prn.html#SP2" class="internal">pronoun_usage</a> object is what a lexicon search returns when text is
matched against some form of a pronoun.
</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">pronoun_usage</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pronoun_used</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">grammatical_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">usage</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">pronoun_usage</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure pronoun_usage is accessed in 2/art, 2/nns, 3/vu and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Pronouns::write_usage</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Pronouns::write_usage</span></span>:<br/><a href="2-prn.html#SP10">&#167;10</a><br/>Diagrams - <a href="1-dgr.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">pronoun_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pu</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">pronoun_used</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-sc.html#SP9" class="function-link"><span class="function-syntax">Stock::write_usage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">pu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage</span><span class="plain-syntax">, </span><span class="identifier-syntax">PERSON_LCW</span><span class="plain-syntax"> + </span><span class="identifier-syntax">GENDER_LCW</span><span class="plain-syntax"> + </span><span class="identifier-syntax">NUMBER_LCW</span><span class="plain-syntax"> + </span><span class="identifier-syntax">CASE_LCW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"}"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>The stock of pronouns is fixed, as follows. We are going to regard the three
persons as being different pronouns, since they make different references,
though not every grammarian would agree. So we have three "agent pronouns" &mdash;
those standing for subject or object &mdash; and then three possessives, and "here",
which stands in the place of a noun referring to a location, and is thus also
a pronoun.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">grammatical_category</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pronouns_category</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_person_pronoun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second_person_pronoun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">third_person_pronoun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_person_possessive_pronoun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second_person_possessive_pronoun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">third_person_possessive_pronoun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">here_pronoun</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">implied_pronoun</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">Pronouns::create_category</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">Pronouns::create_category</span></span>:<br/>Stock Control - <a href="1-sc.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pronouns_category</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP3" class="function-link"><span class="function-syntax">Stock::new_category</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"pronoun"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">pronouns_category</span><span class="plain-syntax">, </span><span class="constant-syntax">LOG_GRAMMATICAL_CATEGORY_MTID</span><span class="plain-syntax">, </span><a href="2-prn.html#SP4" class="function-link"><span class="function-syntax">Pronouns::log_item</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_person_pronoun</span><span class="plain-syntax"> = </span><a href="2-prn.html#SP4" class="function-link"><span class="function-syntax">Pronouns::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"first person pronoun"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">second_person_pronoun</span><span class="plain-syntax"> = </span><a href="2-prn.html#SP4" class="function-link"><span class="function-syntax">Pronouns::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"second person pronoun"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">third_person_pronoun</span><span class="plain-syntax"> = </span><a href="2-prn.html#SP4" class="function-link"><span class="function-syntax">Pronouns::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"third person pronoun"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_person_possessive_pronoun</span><span class="plain-syntax"> = </span><a href="2-prn.html#SP4" class="function-link"><span class="function-syntax">Pronouns::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"first person possessive pronoun"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">second_person_possessive_pronoun</span><span class="plain-syntax"> = </span><a href="2-prn.html#SP4" class="function-link"><span class="function-syntax">Pronouns::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"second person possessive pronoun"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">third_person_possessive_pronoun</span><span class="plain-syntax"> = </span><a href="2-prn.html#SP4" class="function-link"><span class="function-syntax">Pronouns::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"third person possessive pronoun"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">here_pronoun</span><span class="plain-syntax"> = </span><a href="2-prn.html#SP4" class="function-link"><span class="function-syntax">Pronouns::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"location pronoun"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">implied_pronoun</span><span class="plain-syntax"> = </span><a href="2-prn.html#SP4" class="function-link"><span class="function-syntax">Pronouns::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"implied pronoun"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="function-syntax">Pronouns::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">in_stock</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP6" class="function-link"><span class="function-syntax">Stock::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pronouns_category</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_pronoun</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Pronouns::log_item</span><span class="plain-syntax">(</span><span class="reserved-syntax">grammatical_category</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="identifier-syntax">general_pointer</span><span class="plain-syntax"> </span><span class="identifier-syntax">data</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_pronoun</span><span class="plain-syntax">(</span><span class="identifier-syntax">data</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. Parsing. </b>Pronouns are ideal for small word sets, because even when their tables of
inflected forms are in theory large, there are in practice few distinguishable
words in them. For example, there are in theory twelve second-person pronouns
in English, but all twelve of them are "you".
</p>
<p class="commentary">The following sets turn out to be convenient for parsing purposes, but it
would be easy to form other subsets of the pronouns.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">small_word_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pronouns_sws</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="comment-syntax"> all agent pronouns of any case</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">subject_pronouns_sws</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="comment-syntax"> just those in the nominative</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">object_pronouns_sws</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> just those in the accusative</span>
<span class="reserved-syntax">small_word_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">possessive_pronouns_sws</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="comment-syntax"> all possessive pronouns of any person</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">first_person_possessive_pronouns_sws</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">second_person_possessive_pronouns_sws</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">third_person_possessive_pronouns_sws</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">small_word_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">here_pronouns_sws</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pronoun_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">implied_pronoun_usage</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pronoun_usage</span><span class="plain-syntax"> *</span><span class="function-syntax">Pronouns::get_implied</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">Pronouns::get_implied</span></span>:<br/>Diagrams - <a href="1-dgr.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">implied_pronoun_usage</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>And now we have to make them. The following capacity would be enough even if
we were simultaneously dealing with four languages in which every inflection
produced a different word. So it really is not going to run out.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PRONOUN_SWS_CAPACITY</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax">*</span><span class="identifier-syntax">NO_KNOWN_GENDERS</span><span class="plain-syntax">*</span><span class="identifier-syntax">NO_KNOWN_NUMBERS</span><span class="plain-syntax">*</span><span class="identifier-syntax">MAX_GRAMMATICAL_CASES</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">Pronouns::create_small_word_sets</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">Pronouns::create_small_word_sets</span></span>:<br/><a href="2-prn.html#SP8">&#167;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="identifier-syntax">pronouns_sws</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP11" class="function-link"><span class="function-syntax">Stock::new_sws</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PRONOUN_SWS_CAPACITY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;first-person-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">FIRST_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">first_person_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;second-person-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">SECOND_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_person_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;third-person-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">THIRD_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">third_person_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">subject_pronouns_sws</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP11" class="function-link"><span class="function-syntax">Stock::new_sws</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PRONOUN_SWS_CAPACITY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">subject_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;first-person-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NOMINATIVE_CASE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FIRST_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">first_person_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">subject_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;second-person-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NOMINATIVE_CASE</span><span class="plain-syntax">, </span><span class="identifier-syntax">SECOND_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_person_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">subject_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;third-person-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NOMINATIVE_CASE</span><span class="plain-syntax">, </span><span class="identifier-syntax">THIRD_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">third_person_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">object_pronouns_sws</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP11" class="function-link"><span class="function-syntax">Stock::new_sws</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PRONOUN_SWS_CAPACITY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">object_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;first-person-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ACCUSATIVE_CASE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FIRST_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">first_person_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">object_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;second-person-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ACCUSATIVE_CASE</span><span class="plain-syntax">, </span><span class="identifier-syntax">SECOND_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_person_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">object_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;third-person-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ACCUSATIVE_CASE</span><span class="plain-syntax">, </span><span class="identifier-syntax">THIRD_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">third_person_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">possessive_pronouns_sws</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP11" class="function-link"><span class="function-syntax">Stock::new_sws</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PRONOUN_SWS_CAPACITY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">possessive_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;first-person-possessive-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">FIRST_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">first_person_possessive_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">possessive_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;second-person-possessive-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">SECOND_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_person_possessive_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">possessive_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;third-person-possessive-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">THIRD_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">third_person_possessive_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">first_person_possessive_pronouns_sws</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP11" class="function-link"><span class="function-syntax">Stock::new_sws</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PRONOUN_SWS_CAPACITY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">first_person_possessive_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;first-person-possessive-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">FIRST_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">first_person_possessive_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">second_person_possessive_pronouns_sws</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP11" class="function-link"><span class="function-syntax">Stock::new_sws</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PRONOUN_SWS_CAPACITY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">second_person_possessive_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;second-person-possessive-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">SECOND_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_person_possessive_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">third_person_possessive_pronouns_sws</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP11" class="function-link"><span class="function-syntax">Stock::new_sws</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PRONOUN_SWS_CAPACITY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">third_person_possessive_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;third-person-possessive-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">THIRD_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">third_person_possessive_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">here_pronouns_sws</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP11" class="function-link"><span class="function-syntax">Stock::new_sws</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PRONOUN_SWS_CAPACITY</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP7" class="function-link"><span class="function-syntax">Pronouns::add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">here_pronouns_sws</span><span class="plain-syntax">, </span><span class="function-syntax">&lt;here-pronoun-table&gt;</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> -1, </span><span class="identifier-syntax">THIRD_PERSON</span><span class="plain-syntax">, </span><span class="identifier-syntax">here_pronoun</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">implied_pronoun_usage</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">pronoun_usage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">implied_pronoun_usage</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">pronoun_used</span><span class="plain-syntax"> = </span><span class="identifier-syntax">implied_pronoun</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">implied_pronoun_usage</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP9" class="function-link"><span class="function-syntax">Stock::new_usage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">implied_pronoun</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">in_stock</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>All of which use the following, which extracts inflected forms from the
nonterminal tables (see below for their English versions and layout).
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">small_word_set</span><span class="plain-syntax"> *</span><span class="function-syntax">Pronouns::add</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">Pronouns::add</span></span>:<br/><a href="2-prn.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">small_word_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sws</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">filter_case</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">person</span><span class="plain-syntax">, </span><span class="reserved-syntax">pronoun</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">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">-&gt;</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">-&gt;</span><span class="identifier-syntax">next_pl</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">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">-&gt;</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">-&gt;</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">filter_case</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">filter_case</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="identifier-syntax">t</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">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">-&gt;</span><span class="identifier-syntax">first_pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">next_pt</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">alternative_ptoken</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax">-&gt;</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">PreformUtilities::production_error</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"pronoun sets must contain single fixed words"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pronoun_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pu</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> (</span><span class="reserved-syntax">pronoun_usage</span><span class="plain-syntax"> *) </span><a href="1-sc.html#SP12" class="function-link"><span class="function-syntax">Stock::find_in_sws</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sws</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-&gt;</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">pu</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">pu</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">pronoun_usage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">pronoun_used</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP9" class="function-link"><span class="function-syntax">Stock::new_usage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">in_stock</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-sc.html#SP12" class="function-link"><span class="function-syntax">Stock::add_to_sws</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sws</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">ve_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pu</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lcon_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">lcon</span><span class="plain-syntax"> = </span><a href="1-sc.html#SP8" class="function-link"><span class="function-syntax">Stock::to_lcon</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">in_stock</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lcon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lcon::set_number</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">, </span><span class="identifier-syntax">t</span><span class="plain-syntax">%2);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lcon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lcon::set_gender</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax"> + </span><span class="identifier-syntax">t</span><span class="plain-syntax">/2);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">lcon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lcon::set_case</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</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">lcon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lcon::set_person</span><span class="plain-syntax">(</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">, </span><span class="identifier-syntax">person</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="1-sc.html#SP9" class="function-link"><span class="function-syntax">Stock::add_form_to_usage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pu</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">usage</span><span class="plain-syntax">, </span><span class="identifier-syntax">lcon</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">t</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">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="identifier-syntax">Declensions::no_cases</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">definition_language</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::production_error</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"wrong number of cases in pronoun set"</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">sws</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>The following, then, parse pronouns simply by testing whether the word being
parsed lies in the relevant small word set.
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;agent-pronoun&gt;</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">1</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">pronouns_sws</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">) </span><a href="2-prn.html#SP6" class="function-link"><span class="Preform-function-syntax">Pronouns::create_small_word_sets</span></a><span class="Preform-plain-syntax">();</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">vocabulary_entry</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ve</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lexer::word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">));</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">pronoun_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> = </span><a href="1-sc.html#SP12" class="function-link"><span class="Preform-function-syntax">Stock::find_in_sws</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">pronouns_sws</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ve</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">pu</span><span class="Preform-plain-syntax">) { ==&gt; { </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> }; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</span>
<span class="Preform-function-syntax">&lt;subject-pronoun&gt;</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">1</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">pronouns_sws</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">) </span><a href="2-prn.html#SP6" class="function-link"><span class="Preform-function-syntax">Pronouns::create_small_word_sets</span></a><span class="Preform-plain-syntax">();</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">vocabulary_entry</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ve</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lexer::word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">));</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">pronoun_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> = </span><a href="1-sc.html#SP12" class="function-link"><span class="Preform-function-syntax">Stock::find_in_sws</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">subject_pronouns_sws</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ve</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">pu</span><span class="Preform-plain-syntax">) { ==&gt; { </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> }; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</span>
<span class="Preform-function-syntax">&lt;object-pronoun&gt;</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">1</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">pronouns_sws</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">) </span><a href="2-prn.html#SP6" class="function-link"><span class="Preform-function-syntax">Pronouns::create_small_word_sets</span></a><span class="Preform-plain-syntax">();</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">vocabulary_entry</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ve</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lexer::word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">));</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">pronoun_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> = </span><a href="1-sc.html#SP12" class="function-link"><span class="Preform-function-syntax">Stock::find_in_sws</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">object_pronouns_sws</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ve</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">pu</span><span class="Preform-plain-syntax">) { ==&gt; { </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> }; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</span>
<span class="Preform-function-syntax">&lt;possessive-pronoun&gt;</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">1</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">pronouns_sws</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">) </span><a href="2-prn.html#SP6" class="function-link"><span class="Preform-function-syntax">Pronouns::create_small_word_sets</span></a><span class="Preform-plain-syntax">();</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">vocabulary_entry</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ve</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lexer::word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">));</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">pronoun_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> = </span><a href="1-sc.html#SP12" class="function-link"><span class="Preform-function-syntax">Stock::find_in_sws</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">possessive_pronouns_sws</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ve</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">pu</span><span class="Preform-plain-syntax">) { ==&gt; { </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> }; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</span>
<span class="Preform-function-syntax">&lt;possessive-first-person&gt;</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">1</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">pronouns_sws</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">) </span><a href="2-prn.html#SP6" class="function-link"><span class="Preform-function-syntax">Pronouns::create_small_word_sets</span></a><span class="Preform-plain-syntax">();</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">vocabulary_entry</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ve</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lexer::word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">));</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">pronoun_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> = </span><a href="1-sc.html#SP12" class="function-link"><span class="Preform-function-syntax">Stock::find_in_sws</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">first_person_possessive_pronouns_sws</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ve</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">pu</span><span class="Preform-plain-syntax">) { ==&gt; { </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> }; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</span>
<span class="Preform-function-syntax">&lt;possessive-second-person&gt;</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">1</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">pronouns_sws</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">) </span><a href="2-prn.html#SP6" class="function-link"><span class="Preform-function-syntax">Pronouns::create_small_word_sets</span></a><span class="Preform-plain-syntax">();</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">vocabulary_entry</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ve</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lexer::word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">));</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">pronoun_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> = </span><a href="1-sc.html#SP12" class="function-link"><span class="Preform-function-syntax">Stock::find_in_sws</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">second_person_possessive_pronouns_sws</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ve</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">pu</span><span class="Preform-plain-syntax">) { ==&gt; { </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> }; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</span>
<span class="Preform-function-syntax">&lt;possessive-third-person&gt;</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">1</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">pronouns_sws</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">) </span><a href="2-prn.html#SP6" class="function-link"><span class="Preform-function-syntax">Pronouns::create_small_word_sets</span></a><span class="Preform-plain-syntax">();</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">vocabulary_entry</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ve</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lexer::word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">));</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">pronoun_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> = </span><a href="1-sc.html#SP12" class="function-link"><span class="Preform-function-syntax">Stock::find_in_sws</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">third_person_possessive_pronouns_sws</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ve</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">pu</span><span class="Preform-plain-syntax">) { ==&gt; { </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> }; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</span>
<span class="Preform-function-syntax">&lt;here-pronoun&gt;</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">1</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">pronouns_sws</span><span class="Preform-plain-syntax"> == </span><span class="Preform-identifier-syntax">NULL</span><span class="Preform-plain-syntax">) </span><a href="2-prn.html#SP6" class="function-link"><span class="Preform-function-syntax">Pronouns::create_small_word_sets</span></a><span class="Preform-plain-syntax">();</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">vocabulary_entry</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">ve</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lexer::word</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">));</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">pronoun_usage</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> = </span><a href="1-sc.html#SP12" class="function-link"><span class="Preform-function-syntax">Stock::find_in_sws</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">here_pronouns_sws</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">ve</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">pu</span><span class="Preform-plain-syntax">) { ==&gt; { </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">pu</span><span class="Preform-plain-syntax"> }; </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">; }</span>
<span class="Preform-plain-syntax"> ==&gt; { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
<span class="Preform-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. English pronouns. </b>So, then, these nonterminals are not parsed by Preform but are instead used
to stock small word sets above.
</p>
<p class="commentary">Each row represents one case: so for English, there are two rows, nominative
(i.e. for subject pronouns) and then accusative (object). Within a row, the
sequence is neuter singular, neuter plural, masculine singular, masculine plural,
feminine singular, feminine plural.
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">
<span class="Preform-function-syntax">&lt;first-person-pronoun-table&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">i</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">we</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">i</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">we</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">i</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">we</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">me</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">us</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">me</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">us</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">me</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">us</span>
<span class="Preform-function-syntax">&lt;second-person-pronoun-table&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">you</span>
<span class="Preform-function-syntax">&lt;third-person-pronoun-table&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">it</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">they</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">he</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">they</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">she</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">they</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">it</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">them</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">him</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">them</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">her</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">them</span>
<span class="Preform-function-syntax">&lt;first-person-possessive-pronoun-table&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">my</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">our</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">my</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">our</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">my</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">our</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">my</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">our</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">my</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">our</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">my</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">our</span>
<span class="Preform-function-syntax">&lt;second-person-possessive-pronoun-table&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">your</span>
<span class="Preform-function-syntax">&lt;third-person-possessive-pronoun-table&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">its</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">their</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">his</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">their</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">her</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">their</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">its</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">their</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">his</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">their</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">her</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">their</span>
<span class="Preform-function-syntax">&lt;here-pronoun-table&gt;</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">here</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. Unit testing. </b>The <a href="../linguistics-test/index.html" class="internal">linguistics-test</a> test case <span class="extract"><span class="Preform-extract-syntax">pronouns</span></span> calls this.
</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">Pronouns::test</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"pronouns_sws:\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP10" class="function-link"><span class="function-syntax">Pronouns::write_sws</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">pronouns_sws</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">"subject_pronouns_sws:\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP10" class="function-link"><span class="function-syntax">Pronouns::write_sws</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">subject_pronouns_sws</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">"object_pronouns_sws:\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP10" class="function-link"><span class="function-syntax">Pronouns::write_sws</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">object_pronouns_sws</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">"possessive_pronouns_sws:\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP10" class="function-link"><span class="function-syntax">Pronouns::write_sws</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">possessive_pronouns_sws</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">"first_person_possessive_pronouns_sws:\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP10" class="function-link"><span class="function-syntax">Pronouns::write_sws</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">first_person_possessive_pronouns_sws</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">"second_person_possessive_pronouns_sws:\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP10" class="function-link"><span class="function-syntax">Pronouns::write_sws</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">second_person_possessive_pronouns_sws</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">"third_person_possessive_pronouns_sws:\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP10" class="function-link"><span class="function-syntax">Pronouns::write_sws</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">third_person_possessive_pronouns_sws</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">Pronouns::write_sws</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">small_word_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sws</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="function-syntax">&lt;sws-&gt;</span><span class="element-syntax">used</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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"(%d) %V:"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">sws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word_ve</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">pronoun_usage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pu</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">pronoun_usage</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">sws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">results</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
<span class="plain-syntax"> </span><a href="2-prn.html#SP3" class="function-link"><span class="function-syntax">Pronouns::write_usage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">pu</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="2-nns.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-lm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-adj.html">adj</a></li><li class="progresssection"><a href="2-art.html">art</a></li><li class="progresssection"><a href="2-daq.html">daq</a></li><li class="progresssection"><a href="2-nns.html">nns</a></li><li class="progresscurrent">prn</li><li class="progresschapter"><a href="3-vrb.html">3</a></li><li class="progresschapter"><a href="4-np.html">4</a></li><li class="progressnext"><a href="3-vrb.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>