mirror of
https://github.com/ganelson/inform.git
synced 2024-07-17 14:34:25 +03:00
414 lines
52 KiB
HTML
414 lines
52 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Of and From</title>
|
|
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
|
|
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<script>
|
|
function togglePopup(material_id) {
|
|
var popup = document.getElementById(material_id);
|
|
popup.classList.toggle("show");
|
|
}
|
|
</script>
|
|
|
|
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
|
|
</head>
|
|
<body class="commentary-font">
|
|
<nav role="navigation">
|
|
<h1><a href="../index.html">
|
|
<img src="../docs-assets/Inform.png" height=72">
|
|
</a></h1>
|
|
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
|
<li><a href="../other.html">other tools</a></li>
|
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
|
<li><a href="../units.html">unit test tools</a></li>
|
|
</ul><h2>Compiler Webs</h2><ul>
|
|
<li><a href="../inbuild/index.html">inbuild</a></li>
|
|
<li><a href="../inform7/index.html">inform7</a></li>
|
|
<li><a href="../inter/index.html">inter</a></li>
|
|
</ul><h2>Inbuild Modules</h2><ul>
|
|
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
|
</ul><h2>Inform7 Modules</h2><ul>
|
|
<li><a href="index.html"><span class="selectedlink">core</span></a></li>
|
|
<li><a href="../inflections-module/index.html">inflections</a></li>
|
|
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
|
<li><a href="../kinds-module/index.html">kinds</a></li>
|
|
<li><a href="../if-module/index.html">if</a></li>
|
|
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
|
<li><a href="../problems-module/index.html">problems</a></li>
|
|
<li><a href="../index-module/index.html">index</a></li>
|
|
</ul><h2>Inter Modules</h2><ul>
|
|
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
|
<li><a href="../building-module/index.html">building</a></li>
|
|
<li><a href="../codegen-module/index.html">codegen</a></li>
|
|
</ul><h2>Shared Modules</h2><ul>
|
|
<li><a href="../arch-module/index.html">arch</a></li>
|
|
<li><a href="../syntax-module/index.html">syntax</a></li>
|
|
<li><a href="../words-module/index.html">words</a></li>
|
|
<li><a href="../html-module/index.html">html</a></li>
|
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
|
|
|
</ul>
|
|
</nav>
|
|
<main role="main">
|
|
<!--Weave of 'Of and From' generated by Inweb-->
|
|
<div class="breadcrumbs">
|
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7 Modules</a></li><li><a href="index.html">core</a></li><li><a href="index.html#7">Chapter 7: Sentences</a></li><li><b>Of and From</b></li></ul></div>
|
|
<p class="purpose">To verify that "of" and "from" subtrees in assertion sentence noun phrases are validly used, and reconstruct their sentences without them if they are not.</p>
|
|
|
|
<ul class="toc"><li><a href="7-oaf.html#SP1">§1. Definitions</a></li><li><a href="7-oaf.html#SP3">§3. Tidying up ofs and from</a></li><li><a href="7-oaf.html#SP5">§5. Traversal 1</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
|
|
|
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>At this point in the narrative, the source text has been parsed into a
|
|
large parse tree in which every assertion is represented by a <span class="extract"><span class="extract-syntax">SENTENCE_NT</span></span>
|
|
node. This is a child of the root of the tree, and its own children form
|
|
a subtree which parses it into a verb phrase and associated noun phrases.
|
|
Pretty well whenever it possibly could, the noun-phrase-maker created
|
|
<span class="extract"><span class="extract-syntax">X_OF_Y_NT</span></span> subtrees in these noun phrases.
|
|
</p>
|
|
|
|
<p class="commentary">But <span class="extract"><span class="extract-syntax">X_OF_Y_NT</span></span> nodes are valid only when describing a value
|
|
property associated with something ("description of the cards"), which
|
|
means that the noun-phrase-maker will have been wildly overzealous in
|
|
creating these. It had to be: it had no way of knowing, so early in
|
|
Inform's run, which handful of the many such nodes it made were actually
|
|
valid. It didn't know what the property names were, nor what the direction
|
|
names were. (For chicken-and-egg reasons, it couldn't know this.) So it
|
|
almost certainly made some spurious noun phrase subtrees like this one:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> X_OF_Y_NT "worn patch of carpet"</span>
|
|
<span class="plain-syntax"> PROPER_NOUN_NT "carpet"</span>
|
|
<span class="plain-syntax"> PROPERTY_LIST_NT "worn patch"</span>
|
|
</pre>
|
|
<p class="commentary">Now comes the reckoning. The existing parse tree may contain a few bogus
|
|
nodes, but it's good enough to determine all the property and direction
|
|
names. This then enables us to go back and check all the <span class="extract"><span class="extract-syntax">X_OF_Y_NT</span></span>
|
|
subtrees, expunging the ones which are spurious.
|
|
</p>
|
|
|
|
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. Tidying up ofs and from. </b>In deciding whether "worn patch of carpet" is to be treated as a single noun,
|
|
as a property ("worn patch") belonging to a noun ("carpet"), or as a
|
|
direction ("worn patch") relative to a noun ("carpet") — consider the
|
|
cases "description of carpet" and "east of the lawn" — the key thing
|
|
is to understand the meaning of the subject ("worn patch"). Unfortunately,
|
|
the model world will not be created, much less named, for quite a long
|
|
time to come: so we cannot simply parse the subject as an expression. At this
|
|
early stage the best we can do is to scan ahead through the parse tree to
|
|
try to find direction and property declarations. We do this with a sequence
|
|
of three traversals:
|
|
</p>
|
|
|
|
<p class="commentary">(-1.) Look for property and direction declarations. Create the property
|
|
names called for; do not actually create the directions (that will happen
|
|
much later), but remember their names.
|
|
(-2.) Reconstruct the parse trees of any sentences which refer to
|
|
property names which themselves contain an "of" (as may happen if, for
|
|
instance, there is a property called "point of view").
|
|
(-3.) Look for location phrases like "east from the lawn", which we can
|
|
distinguish from other uses of "from" now that we know the direction
|
|
names; at the same time look for "X of Y" phrases where the "of" should
|
|
not be treated as a possessive, and expunge them.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Rearrangement::further_material</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><a href="7-oaf.html#SP3" class="function-link"><span class="function-syntax">Sentences::Rearrangement::tidy_up_ofs_and_froms</span></a><span class="plain-syntax">();</span>
|
|
<span class="plain-syntax"> </span><a href="7-rs.html#SP3" class="function-link"><span class="function-syntax">Sentences::RuleSubtrees::register_recently_lexed_phrases</span></a><span class="plain-syntax">();</span>
|
|
<span class="plain-syntax">}</span>
|
|
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Rearrangement::tidy_up_ofs_and_froms</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">Sentences::Rearrangement::tidy_up_ofs_and_froms</span></span>:<br/>How To Compile - <a href="1-htc.html#SP2_3">§2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::verify_integrity</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">()-></span><span class="identifier-syntax">root_node</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::traverse_wfirst</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><a href="7-oaf.html#SP5" class="function-link"><span class="function-syntax">Sentences::Rearrangement::traverse_for_property_names</span></a><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::traverse</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><a href="7-oaf.html#SP10" class="function-link"><span class="function-syntax">Sentences::Rearrangement::traverse_for_nonbreaking_ofs</span></a><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>The following array is used only by Traversals 1 to 3, and is how we
|
|
remember direction names.
|
|
</p>
|
|
|
|
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">MAX_DIRECTIONS</span><span class="plain-syntax"> </span><span class="constant-syntax">100</span><span class="plain-syntax"> </span><span class="comment-syntax"> the Standard Rules define only 12, so this is plenty</span>
|
|
</pre>
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">directions_noticed</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_DIRECTIONS</span><span class="plain-syntax">];</span>
|
|
<span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">direction_relations_noticed</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_DIRECTIONS</span><span class="plain-syntax">];</span>
|
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_directions_noticed</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. Traversal 1. </b>We now come to the routine which traverses the entire tree looking for
|
|
property declarations.
|
|
</p>
|
|
|
|
<p class="commentary">In this as in the subsequent traversals, we use a loop rather than recursion
|
|
to span the width of the tree: otherwise our stack usage goes through the
|
|
roof, since it might need to recurse thousands of function calls deep.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Rearrangement::traverse_for_property_names</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Sentences::Rearrangement::traverse_for_property_names</span></span>:<br/><a href="7-oaf.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) == </span><span class="identifier-syntax">AVERB_NT</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-oaf.html#SP5_3" class="named-paragraph-link"><span class="named-paragraph">See if this assertion creates property names with "... has ... called ..."</span><span class="named-paragraph-number">5.3</span></a></span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP5_1"></a><b>§5.1. </b>Directions are detected in sentences having the form "D is a direction."
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Rearrangement::check_sentence_for_direction_creation</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Sentences::Rearrangement::check_sentence_for_direction_creation</span></span>:<br/>Nonstructural Sentences - <a href="7-ns.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">IF_MODULE</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) != </span><span class="identifier-syntax">SENTENCE_NT</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">) != </span><span class="identifier-syntax">AVERB_NT</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">) != </span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">) != </span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (!((</span><span class="function-syntax"><notable-map-kinds>(ParseTree::get_text(pn-></span><span class="element-syntax">next</span><span class="plain-syntax">)))</span>
|
|
<span class="plain-syntax"> && (</span><span class="function-syntax"><<r>></span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">))) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">no_directions_noticed</span><span class="plain-syntax"> >= </span><span class="constant-syntax">MAX_DIRECTIONS</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::Issue::limit_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_TooManyDirections</span><span class="plain-syntax">),</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"different directions"</span><span class="plain-syntax">, </span><span class="constant-syntax">MAX_DIRECTIONS</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">direction_relations_noticed</span><span class="plain-syntax">[</span><span class="identifier-syntax">no_directions_noticed</span><span class="plain-syntax">] =</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">PL::MapDirections::create_sketchy_mapping_direction</span><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">directions_noticed</span><span class="plain-syntax">[</span><span class="identifier-syntax">no_directions_noticed</span><span class="plain-syntax">++] = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP5_2"></a><b>§5.2. </b>And to extract that sketchy BP later, for completion when possible:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">Sentences::Rearrangement::relation_noticed</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">direction_relations_noticed</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">];</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP5_3"></a><b>§5.3. </b>Typical patterns here are sentences in the form "X has a K called P".
|
|
The trouble is that at this stage we can't verify that X is an instance
|
|
or kind (they don't exist yet), nor that K is itself a kind (for the same
|
|
reason). We must simply rely on the fact that assertions cannot take this
|
|
form without being property declarations — with one exception: see below.
|
|
</p>
|
|
|
|
<p class="commentary">We therefore look for this subtree structure:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> SENTENCE_NT "A container has a number called volume"</span>
|
|
<span class="plain-syntax"> AVERB_NT "has"</span>
|
|
<span class="plain-syntax"> PROPER_NOUN_NT "container" article:indefinite</span>
|
|
<span class="plain-syntax"> CALLED_NT "called"</span>
|
|
<span class="plain-syntax"> PROPER_NOUN_NT "number" article:indefinite</span>
|
|
<span class="plain-syntax"> PROPER_NOUN_NT "volume"</span>
|
|
</pre>
|
|
<p class="commentary">...and then extract the bottom-most, rightmost noun-phrase as the name of
|
|
the new property.
|
|
</p>
|
|
|
|
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">See if this assertion creates property names with "... has ... called ..."</span><span class="named-paragraph-number">5.3</span></span><span class="comment-syntax"> =</span>
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">verb_id_ANNOT</span><span class="plain-syntax">) == </span><span class="constant-syntax">ASSERT_VB</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> && (</span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">possessive_verb_ANNOT</span><span class="plain-syntax">))</span>
|
|
<span class="plain-syntax"> && (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> && (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> && (</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CALLED_NT</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> && (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> && (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">apparent_subject</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">SW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseTree::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">apparent_subject</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">apparent_subject</span><span class="plain-syntax">) == </span><span class="identifier-syntax">WITH_NT</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">apparent_subject</span><span class="plain-syntax">-></span><span class="element-syntax">down</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">s1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">apparent_subject</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">));</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">apparent_subject</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">SW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">s1</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">apparent_subject</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)));</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">SW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">s1</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">SW</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="function-syntax"><prohibited-property-owners></span><span class="plain-syntax">(</span><span class="identifier-syntax">SW</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="function-syntax"><has-properties-called-sentence-object>(ParseTree::get_text(pn->next->next->down-></span><span class="element-syntax">next</span><span class="plain-syntax">));</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> }</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This code is used in <a href="7-oaf.html#SP5">§5</a>.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>A tricky point in detecting property declarations is that they share the
|
|
syntax used for action, activity and rulebook variables. For instance:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>The taking action has a number called the hazard level.</p>
|
|
</blockquote>
|
|
|
|
<p class="commentary">...creates not a property name but an action variable. Fortunately, the names
|
|
of such owners have a distinctive look to them:
|
|
</p>
|
|
|
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
|
<span class="Preform-function-syntax"><prohibited-property-owners></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><action-name-formal></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><activity-name-formal></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><rulebook-name-formal></span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b>And this seems a good place to declare the grammar for our "formal names".
|
|
For instance, if we want to talk about the "taking" action in abstract as
|
|
a noun, we write it in the formal way "taking action".
|
|
</p>
|
|
|
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
|
<span class="Preform-function-syntax"><action-name-formal></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">action</span>
|
|
|
|
<span class="Preform-function-syntax"><activity-name-formal></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">activity</span>
|
|
|
|
<span class="Preform-function-syntax"><relation-name-formal></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">relation</span>
|
|
|
|
<span class="Preform-function-syntax"><rule-name-formal></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rule</span>
|
|
|
|
<span class="Preform-function-syntax"><rulebook-name-formal></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rulebook</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b>We need to know the property names early in parsing in order to make sure
|
|
we aren't breaking noun phrases at "of" incorrectly. So the following
|
|
grammar is applied to sentences in the form:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>A vehicle has numbers called seating capacity and fuel efficiency.</p>
|
|
</blockquote>
|
|
|
|
<p class="commentary">...and creates these property names right now. (We also filter out some bad
|
|
property names before they can do any damage.)
|
|
</p>
|
|
|
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
|
<span class="Preform-function-syntax"><has-properties-called-sentence-object></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><has-property-name></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><has-property-name-tail></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><has-property-name></span>
|
|
|
|
<span class="Preform-function-syntax"><has-property-name-tail></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><has-properties-called-sentence-object></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_,/and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><has-properties-called-sentence-object></span>
|
|
|
|
<span class="Preform-function-syntax"><has-property-name></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><bad-property-name-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; Properties::Valued::obtain(W);</span>
|
|
|
|
<span class="Preform-function-syntax"><bad-property-name-diagnosis></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-oaf.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_PropertyCalledArticle problem</span><span class="named-paragraph-number">8.1</span></a></span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">presence</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-oaf.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_PropertyCalledPresence problem</span><span class="named-paragraph-number">8.2</span></a></span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-oaf.html#SP8_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_PropertyNameForbidden problem</span><span class="named-paragraph-number">8.3</span></a></span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><quoted-text></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-oaf.html#SP8_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_PropertyNameForbidden problem</span><span class="named-paragraph-number">8.3</span></a></span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP8_1"></a><b>§8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_PropertyCalledArticle problem</span><span class="named-paragraph-number">8.1</span></span><span class="Preform-comment-syntax"> =</span>
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::Issue::sentence_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_PropertyCalledArticle</span><span class="plain-syntax">),</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"a property name cannot consist only of an article"</span><span class="plain-syntax">,</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"which this one seems to. It would lead to awful ambiguities. "</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"More likely, the end of the sentence has been lost somehow?"</span><span class="plain-syntax">);</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This code is used in <a href="7-oaf.html#SP8">§8</a>.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP8_2"></a><b>§8.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_PropertyCalledPresence problem</span><span class="named-paragraph-number">8.2</span></span><span class="comment-syntax"> =</span>
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::Issue::sentence_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_PropertyCalledPresence</span><span class="plain-syntax">),</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"a property name cannot consist only of the word 'presence'"</span><span class="plain-syntax">,</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"because this would lead to ambiguities with the rule clause "</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"'...in the presence of...' (For instance, when writing something "</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"like 'Instead of eating in the presence of the Queen: ...') "</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"The best way to fix this is probably to add another word or "</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"two to the property name: 'stage presence', say, would be fine."</span><span class="plain-syntax">);</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This code is used in <a href="7-oaf.html#SP8">§8</a>.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP8_3"></a><b>§8.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_PropertyNameForbidden problem</span><span class="named-paragraph-number">8.3</span></span><span class="comment-syntax"> =</span>
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::Issue::sentence_problem</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_PropertyNameForbidden</span><span class="plain-syntax">),</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"a property name cannot contain quoted text or a comma"</span><span class="plain-syntax">,</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"which this one seems to. I think I must be misunderstanding: "</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"possibly you've added a subordinate clause which I can't "</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"make sense of?"</span><span class="plain-syntax">);</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This code is used in <a href="7-oaf.html#SP8">§8</a> (twice).</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>Because we might only just have discovered the property names, it's likely
|
|
that some of our earlier attempts to break noun phrases were wrong. For
|
|
example, not knowing that "point of view" was going to be a property name,
|
|
we'll have broken
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>The point of view of Kathy is "All grammar is bunk."</p>
|
|
</blockquote>
|
|
|
|
<p class="commentary">as "((The point) of (view of Kathy)) is...".
|
|
</p>
|
|
|
|
<p class="commentary">So we look back over assertions which might have broken, and if they contain
|
|
the text of such a property name, we throw away the existing subtree for the
|
|
sentence and build a fresh one. (Very probably smaller and simpler since
|
|
it will not now break at what we now suspect to be a bad position.)
|
|
</p>
|
|
|
|
<p class="commentary">In a few cases, where for some other reason the of-break was not taken
|
|
anyway, nothing will change — for instance, "On the table is a book
|
|
called My point of view" does not break at the "of" whether it's a good
|
|
break or a bad one, because the "called" construction takes priority.
|
|
We could with some more work avoid this, but it causes no nuisance and
|
|
wastes only a negligible amount of memory.
|
|
</p>
|
|
|
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
|
<span class="Preform-function-syntax"><sentence-needing-second-look></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><ambiguous-property-name></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b>And this code effects it:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::Rearrangement::traverse_for_nonbreaking_ofs</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Sentences::Rearrangement::traverse_for_nonbreaking_ofs</span></span>:<br/><a href="7-oaf.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) == </span><span class="identifier-syntax">SENTENCE_NT</span><span class="plain-syntax">) &&</span>
|
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">) == </span><span class="identifier-syntax">AVERB_NT</span><span class="plain-syntax">)) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">vn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">, </span><span class="constant-syntax">verb_id_ANNOT</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (((</span><span class="identifier-syntax">vn</span><span class="plain-syntax"> == </span><span class="constant-syntax">ASSERT_VB</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">, </span><span class="constant-syntax">examine_for_ofs_ANNOT</span><span class="plain-syntax">))) &&</span>
|
|
<span class="plain-syntax"> (</span><span class="function-syntax"><sentence-needing-second-look></span><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)))) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">; </span><span class="comment-syntax"> (just in case any problem messages are issued)</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> thus cutting off and forgetting its former subtree</span>
|
|
<span class="plain-syntax"> </span><a href="7-ns.html#SP9" class="function-link"><span class="function-syntax">Sentences::VPs::seek</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">); </span><span class="comment-syntax"> ...in order to make a new one</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="7-ns.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-nl.html">3</a></li><li class="progresschapter"><a href="4-its.html">4</a></li><li class="progresschapter"><a href="5-lp.html">5</a></li><li class="progresschapter"><a href="6-bp.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresssection"><a href="7-ptu.html">ptu</a></li><li class="progresssection"><a href="7-hdn.html">hdn</a></li><li class="progresssection"><a href="7-ns.html">ns</a></li><li class="progresscurrent">oaf</li><li class="progresssection"><a href="7-rs.html">rs</a></li><li class="progresschapter"><a href="8-ef.html">8</a></li><li class="progresschapter"><a href="9-ita.html">9</a></li><li class="progresschapter"><a href="10-aots.html">10</a></li><li class="progresschapter"><a href="11-itpc.html">11</a></li><li class="progresschapter"><a href="12-ter.html">12</a></li><li class="progresschapter"><a href="13-kak.html">13</a></li><li class="progresschapter"><a href="14-sp.html">14</a></li><li class="progresschapter"><a href="15-pr.html">15</a></li><li class="progresschapter"><a href="16-is.html">16</a></li><li class="progresschapter"><a href="17-tl.html">17</a></li><li class="progresschapter"><a href="18-lc.html">18</a></li><li class="progresschapter"><a href="19-tc.html">19</a></li><li class="progresschapter"><a href="20-eq.html">20</a></li><li class="progresschapter"><a href="21-rl.html">21</a></li><li class="progresschapter"><a href="22-itp.html">22</a></li><li class="progresschapter"><a href="23-ad.html">23</a></li><li class="progresschapter"><a href="24-lv.html">24</a></li><li class="progresschapter"><a href="25-in.html">25</a></li><li class="progresschapter"><a href="26-fc.html">26</a></li><li class="progresschapter"><a href="27-hr.html">27</a></li><li class="progressnext"><a href="7-rs.html">❯</a></li></ul></div>
|
|
</nav><!--End of weave-->
|
|
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|