1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 18:14:21 +03:00
inform7/docs/linguistics-module/5-dgr.html
2019-04-22 15:42:10 +01:00

155 lines
24 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>4/apoo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<!--Weave of '5/dgr' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">linguistics</a></li><li><a href="index.html#5">Chapter 5: Diagramming Sentences</a></li><li><b>Diagrams</b></li></ul><p class="purpose">To construct standard verb-phrase nodes in the parse tree.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Node types</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Node types. </b></p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">L3_NCAT</span>
</pre>
<pre class="display">
<span class="definitionkeyword">enum</span> <span class="constant">AVERB_NT</span><span class="plain"> </span> <span class="comment">"is"</span>
<span class="definitionkeyword">enum</span> <span class="constant">PROPER_NOUN_NT</span><span class="plain"> </span> <span class="comment">"the red handkerchief"</span>
<span class="definitionkeyword">enum</span> <span class="constant">RELATIONSHIP_NT</span><span class="plain"> </span> <span class="comment">"on"</span>
<span class="definitionkeyword">enum</span> <span class="constant">CALLED_NT</span><span class="plain"> </span> <span class="comment">"On the table is a container called the box"</span>
<span class="definitionkeyword">enum</span> <span class="constant">WITH_NT</span><span class="plain"> </span> <span class="comment">"The footstool is a supporter with capacity 2"</span>
<span class="definitionkeyword">enum</span> <span class="constant">AND_NT</span><span class="plain"> </span> <span class="comment">"whisky and soda"</span>
<span class="definitionkeyword">enum</span> <span class="constant">KIND_NT</span><span class="plain"> </span> <span class="comment">"A woman is a kind of person"</span>
<span class="definitionkeyword">enum</span> <span class="constant">PROPERTY_LIST_NT</span><span class="plain"> </span> <span class="comment">"capacity 2"</span>
<span class="definitionkeyword">enum</span> <span class="constant">verbal_certainty_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: certainty level if known</span>
<span class="definitionkeyword">enum</span> <span class="constant">sentence_is_existential_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: such as "there is a man"</span>
<span class="definitionkeyword">enum</span> <span class="constant">linguistic_error_here_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: one of the errors occurred here</span>
<span class="definitionkeyword">enum</span> <span class="constant">inverted_verb_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: an inversion of subject and object has occurred</span>
<span class="definitionkeyword">enum</span> <span class="constant">possessive_verb_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: this is a non-relative use of "to have"</span>
<span class="definitionkeyword">enum</span> <span class="constant">verb_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">verb_usage</span></code>: what's being done here</span>
<span class="definitionkeyword">enum</span> <span class="constant">preposition_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">preposition_identity</span></code>: which preposition, if any, qualifies it</span>
<span class="definitionkeyword">enum</span> <span class="constant">second_preposition_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">preposition_identity</span></code>: which further preposition, if any, qualifies it</span>
<span class="definitionkeyword">enum</span> <span class="constant">verb_meaning_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">verb_meaning</span></code>: what it means</span>
<span class="definitionkeyword">enum</span> <span class="constant">nounphrase_article_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: definite or indefinite article: see below</span>
<span class="definitionkeyword">enum</span> <span class="constant">plural_reference_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: used by PROPER NOUN nodes for evident plurals</span>
<span class="definitionkeyword">enum</span> <span class="constant">gender_reference_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: used by PROPER NOUN nodes for evident genders</span>
<span class="definitionkeyword">enum</span> <span class="constant">relationship_node_type_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: what kind of inference this assertion makes</span>
<span class="definitionkeyword">enum</span> <span class="constant">implicitly_refers_to_ANNOT</span><span class="plain"> </span> <span class="comment"><code class="display"><span class="extract">int</span></code>: this will implicitly refer to something</span>
<span class="definitionkeyword">define</span> <span class="constant">ASSERT_NFLAG</span><span class="plain"> 0</span><span class="identifier">x00000008</span><span class="plain"> </span> <span class="comment">allow this on either side of an assertion?</span>
<span class="definitionkeyword">enum</span> <span class="constant">TwoLikelihoods_LINERROR</span>
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">verb</span><span class="plain">, </span><span class="reserved">verb_usage</span><span class="plain">)</span>
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">preposition</span><span class="plain">, </span><span class="reserved">preposition_identity</span><span class="plain">)</span>
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">second_preposition</span><span class="plain">, </span><span class="reserved">preposition_identity</span><span class="plain">)</span>
<span class="identifier">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="reserved">verb_meaning</span><span class="plain">, </span><span class="reserved">verb_meaning</span><span class="plain">)</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<pre class="display">
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">verb</span><span class="plain">, </span><span class="reserved">verb_usage</span><span class="plain">)</span>
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">preposition</span><span class="plain">, </span><span class="reserved">preposition_identity</span><span class="plain">)</span>
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="identifier">second_preposition</span><span class="plain">, </span><span class="reserved">preposition_identity</span><span class="plain">)</span>
<span class="identifier">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain">(</span><span class="reserved">verb_meaning</span><span class="plain">, </span><span class="reserved">verb_meaning</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Diagrams::setup</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">ParseTree::md</span><span class="plain">((</span><span class="identifier">parse_tree_node_type</span><span class="plain">) { </span><span class="constant">AVERB_NT</span><span class="plain">, </span><span class="string">"AVERB_NT"</span><span class="plain">, 0, 0, </span><span class="constant">L3_NCAT</span><span class="plain">, 0 });</span>
<span class="identifier">ParseTree::md</span><span class="plain">((</span><span class="identifier">parse_tree_node_type</span><span class="plain">) { </span><span class="constant">RELATIONSHIP_NT</span><span class="plain">, </span><span class="string">"RELATIONSHIP_NT"</span><span class="plain">, 0, 2, </span><span class="constant">L3_NCAT</span><span class="plain">, </span><span class="constant">ASSERT_NFLAG</span><span class="plain"> });</span>
<span class="identifier">ParseTree::md</span><span class="plain">((</span><span class="identifier">parse_tree_node_type</span><span class="plain">) { </span><span class="constant">CALLED_NT</span><span class="plain">, </span><span class="string">"CALLED_NT"</span><span class="plain">, 2, 2, </span><span class="constant">L3_NCAT</span><span class="plain">, 0 });</span>
<span class="identifier">ParseTree::md</span><span class="plain">((</span><span class="identifier">parse_tree_node_type</span><span class="plain">) { </span><span class="constant">WITH_NT</span><span class="plain">, </span><span class="string">"WITH_NT"</span><span class="plain">, 2, 2, </span><span class="constant">L3_NCAT</span><span class="plain">, </span><span class="constant">ASSERT_NFLAG</span><span class="plain"> });</span>
<span class="identifier">ParseTree::md</span><span class="plain">((</span><span class="identifier">parse_tree_node_type</span><span class="plain">) { </span><span class="constant">AND_NT</span><span class="plain">, </span><span class="string">"AND_NT"</span><span class="plain">, 2, 2, </span><span class="constant">L3_NCAT</span><span class="plain">, </span><span class="constant">ASSERT_NFLAG</span><span class="plain"> });</span>
<span class="identifier">ParseTree::md</span><span class="plain">((</span><span class="identifier">parse_tree_node_type</span><span class="plain">) { </span><span class="constant">KIND_NT</span><span class="plain">, </span><span class="string">"KIND_NT"</span><span class="plain">, 0, 1, </span><span class="constant">L3_NCAT</span><span class="plain">, </span><span class="constant">ASSERT_NFLAG</span><span class="plain"> });</span>
<span class="identifier">ParseTree::md</span><span class="plain">((</span><span class="identifier">parse_tree_node_type</span><span class="plain">) { </span><span class="constant">PROPER_NOUN_NT</span><span class="plain">, </span><span class="string">"PROPER_NOUN_NT"</span><span class="plain">, 0, 0, </span><span class="constant">L3_NCAT</span><span class="plain">, </span><span class="constant">ASSERT_NFLAG</span><span class="plain"> });</span>
<span class="identifier">ParseTree::md</span><span class="plain">((</span><span class="identifier">parse_tree_node_type</span><span class="plain">) { </span><span class="constant">PROPERTY_LIST_NT</span><span class="plain">, </span><span class="string">"PROPERTY_LIST_NT"</span><span class="plain">, 0, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L3_NCAT</span><span class="plain">, </span><span class="constant">ASSERT_NFLAG</span><span class="plain"> });</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">AVERB_NT</span><span class="plain">, </span><span class="constant">verbal_certainty_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">AVERB_NT</span><span class="plain">, </span><span class="constant">sentence_is_existential_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">AVERB_NT</span><span class="plain">, </span><span class="constant">possessive_verb_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">AVERB_NT</span><span class="plain">, </span><span class="constant">inverted_verb_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">AVERB_NT</span><span class="plain">, </span><span class="constant">verb_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">AVERB_NT</span><span class="plain">, </span><span class="constant">preposition_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">AVERB_NT</span><span class="plain">, </span><span class="constant">second_preposition_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">AVERB_NT</span><span class="plain">, </span><span class="constant">verb_meaning_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">RELATIONSHIP_NT</span><span class="plain">, </span><span class="constant">preposition_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">RELATIONSHIP_NT</span><span class="plain">, </span><span class="constant">relationship_node_type_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L3_NCAT</span><span class="plain">, </span><span class="constant">linguistic_error_here_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L3_NCAT</span><span class="plain">, </span><span class="constant">gender_reference_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L3_NCAT</span><span class="plain">, </span><span class="constant">nounphrase_article_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L3_NCAT</span><span class="plain">, </span><span class="constant">plural_reference_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">implicitly_refers_to_ANNOT</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Diagrams::setup is used in 1/lm (<a href="1-lm.html#SP3">&#167;3</a>).</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Diagrams::log_node</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">pn</span><span class="plain">) {</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">, </span><span class="constant">linguistic_error_here_ANNOT</span><span class="plain">)) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TwoLikelihoods_LINERROR</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (*** TwoLikelihoods_LINERROR ***)"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">-&gt;</span><span class="identifier">node_type</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">AVERB_NT</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">, </span><span class="constant">sentence_is_existential_ANNOT</span><span class="plain">))</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (existential)"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">, </span><span class="constant">possessive_verb_ANNOT</span><span class="plain">))</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (possessive)"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">, </span><span class="constant">inverted_verb_ANNOT</span><span class="plain">))</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (inverted)"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_verb_meaning</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">)) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" $y"</span><span class="plain">, </span><span class="identifier">ParseTree::get_verb_meaning</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROPER_NOUN_NT</span><span class="plain">:</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">, </span><span class="constant">nounphrase_article_ANNOT</span><span class="plain">)) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">IT_ART</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (pronoun)"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">DEF_ART</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (definite)"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INDEF_ART</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (indefinite)"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">, </span><span class="constant">plural_reference_ANNOT</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (plural)"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RELATIONSHIP_NT</span><span class="plain">:</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">, </span><span class="constant">relationship_node_type_ANNOT</span><span class="plain">)) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">STANDARD_RELN</span><span class="plain">:</span>
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">CORE_MODULE</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_relationship</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">))</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">" (%S)"</span><span class="plain">, </span><span class="identifier">ParseTree::get_relationship</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">)-&gt;</span><span class="identifier">debugging_log_name</span><span class="plain">);</span>
<span class="plain">#</span><span class="identifier">endif</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PARENTAGE_HERE_RELN</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (here)"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">DIRECTION_RELN</span><span class="plain">: </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (direction)"</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Diagrams::log_node appears nowhere else.</p>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 5: Diagramming Sentences.)</i></li><li><a href="5-vm.html">Continue with 'Verb Meanings'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>