1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 18:14:21 +03:00
inform7/docs/core-module/7-ptu.html
2020-04-07 01:06:09 +01:00

690 lines
114 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>6/nv</title>
<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="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<ul>
<li><a href="../compiler.html"><b>compiler tools</b></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="../inbuild-module/index.html">inbuild</a></li>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../html-module/index.html">html</a></li>
</ul>
<h2>Inform7 Modules</h2>
<ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../problems-module/index.html">problems</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="../index-module/index.html">index</a></li>
</ul>
<h2>Inter Modules</h2>
<ul>
<li><a href="../inter-module/index.html">inter</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul>
<h2>Foundation</h2>
<ul>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of '7/ptu' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">core</a></li><li><a href="index.html#7">Chapter 7: Sentences</a></li><li><b>Parse Tree Usage</b></li></ul><p class="purpose">Shims for the parse tree.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Definitions</a></li><li><a href="#SP13">&#167;13. The assertion-maker's invariant</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Definitions. </b></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">PARSE_TREE_COPIER</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::copy_annotations</span>
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::copy_annotations</span><span class="plain">(</span><span class="identifier">parse_node_annotation</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">, </span><span class="identifier">parse_node_annotation</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain">-&gt;</span><span class="identifier">kind_of_annotation</span><span class="plain"> == </span><span class="constant">proposition_ANNOT</span><span class="plain">)</span>
<span class="identifier">to</span><span class="plain">-&gt;</span><span class="identifier">annotation_pointer</span><span class="plain"> =</span>
<span class="identifier">STORE_POINTER_pcalc_prop</span><span class="plain">(</span>
<span class="functiontext">Calculus::Propositions::copy</span><span class="plain">(</span>
<span class="identifier">RETRIEVE_POINTER_pcalc_prop</span><span class="plain">(</span>
<span class="identifier">from</span><span class="plain">-&gt;</span><span class="identifier">annotation_pointer</span><span class="plain">)));</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function ParseTreeUsage::copy_annotations appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">ALLOWED_NT</span><span class="plain"> </span><span class="comment">"An animal is allowed to have a description"</span>
<span class="definitionkeyword">enum</span> <span class="constant">EVERY_NT</span><span class="plain"> </span><span class="comment">"every container"</span>
<span class="definitionkeyword">enum</span> <span class="constant">COMMON_NOUN_NT</span><span class="plain"> </span><span class="comment">"a container"</span>
<span class="definitionkeyword">enum</span> <span class="constant">ACTION_NT</span><span class="plain"> </span><span class="comment">"taking something closed"</span>
<span class="definitionkeyword">enum</span> <span class="constant">ADJECTIVE_NT</span><span class="plain"> </span><span class="comment">"open"</span>
<span class="definitionkeyword">enum</span> <span class="constant">PROPERTYCALLED_NT</span><span class="plain"> </span><span class="comment">"A man has a number called age"</span>
<span class="definitionkeyword">enum</span> <span class="constant">X_OF_Y_NT</span><span class="plain"> </span><span class="comment">"description of the painting"</span>
<span class="definitionkeyword">enum</span> <span class="constant">CREATED_NT</span><span class="plain"> </span><span class="comment">"a vehicle called Sarah Jane's car"</span>
<span class="definitionkeyword">enum</span> <span class="constant">TOKEN_NT</span><span class="plain"> </span><span class="comment">Used for tokens in grammar</span>
<span class="definitionkeyword">enum</span> <span class="constant">CODE_BLOCK_NT</span><span class="plain"> </span><span class="comment">Holds a block of source material</span>
<span class="definitionkeyword">enum</span> <span class="constant">INVOCATION_LIST_SAY_NT</span><span class="plain"> </span><span class="comment">Single thing to be said</span>
<span class="definitionkeyword">enum</span> <span class="constant">INVOCATION_NT</span><span class="plain"> </span><span class="comment">Usage of a phrase</span>
<span class="definitionkeyword">enum</span> <span class="constant">VOID_CONTEXT_NT</span><span class="plain"> </span><span class="comment">When a void phrase is required</span>
<span class="definitionkeyword">enum</span> <span class="constant">RVALUE_CONTEXT_NT</span><span class="plain"> </span><span class="comment">Arguments, in effect</span>
<span class="definitionkeyword">enum</span> <span class="constant">LVALUE_CONTEXT_NT</span><span class="plain"> </span><span class="comment">Named storage location</span>
<span class="definitionkeyword">enum</span> <span class="constant">LVALUE_TR_CONTEXT_NT</span><span class="plain"> </span><span class="comment">Table reference</span>
<span class="definitionkeyword">enum</span> <span class="constant">SPECIFIC_RVALUE_CONTEXT_NT</span><span class="plain"> </span><span class="comment">Argument must be an exact value</span>
<span class="definitionkeyword">enum</span> <span class="constant">MATCHING_RVALUE_CONTEXT_NT</span><span class="plain"> </span><span class="comment">Argument must match a description</span>
<span class="definitionkeyword">enum</span> <span class="constant">NEW_LOCAL_CONTEXT_NT</span><span class="plain"> </span><span class="comment">Argument which creates a local</span>
<span class="definitionkeyword">enum</span> <span class="constant">LVALUE_LOCAL_CONTEXT_NT</span><span class="plain"> </span><span class="comment">Argument which names a local</span>
<span class="definitionkeyword">enum</span> <span class="constant">CONDITION_CONTEXT_NT</span><span class="plain"> </span><span class="comment">Used for "now" conditions</span>
</pre>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>Next we enumerate the specification node types, beginning with the one which
signifies that text has no known meaning &mdash; either because we tried to make
sense of it and failed, or because we are choosing not to parse it until
later on, and are representing it as unknown until then.
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">UNKNOWN_NT</span><span class="plain"> </span><span class="comment">"arfle barfle gloop"</span>
</pre>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b>The next specification nodes are the rvalues. These express I6 values &mdash;
numbers, objects, text and so on &mdash; but cannot be assigned to, so that in an
assignment of the form "change L to R" they can be used only as R, not L. This
is not the same thing as a constant: for instance, "location of the player"
evaluates differently at different times, but cannot be changed in an
assignment.
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">CONSTANT_NT</span><span class="plain"> </span><span class="comment">"7", "the can't lock a locked door rule", etc.</span>
<span class="definitionkeyword">enum</span> <span class="constant">PHRASE_TO_DECIDE_VALUE_NT</span><span class="plain"> </span><span class="comment">"holder of the black box"</span>
</pre>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b>Lvalue nodes represent stored I6 data at run-time, which means that they can
be assigned to. (The traditional terms "lvalue" and "rvalue" refer to the left
and right hand side of assignment statements written <code class="display"><span class="extract">A = B</span></code>.) For instance, a
table entry qualifies as an lvalue because it can be both read and changed. To
qualify as an lvalue, text must exactly specify the storage location referred
to: "Table of Corvettes" only indicates a table, not an entry in a table, so
is merely an rvalue. Similarly, "carrying capacity" (as a property name not
indicating an owner) is a mere rvalue.
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">LOCAL_VARIABLE_NT</span><span class="plain"> </span><span class="comment">"the running total", say</span>
<span class="definitionkeyword">enum</span> <span class="constant">NONLOCAL_VARIABLE_NT</span><span class="plain"> </span><span class="comment">"the location"</span>
<span class="definitionkeyword">enum</span> <span class="constant">PROPERTY_VALUE_NT</span><span class="plain"> </span><span class="comment">"the carrying capacity of the cedarwood box"</span>
<span class="definitionkeyword">enum</span> <span class="constant">TABLE_ENTRY_NT</span><span class="plain"> </span><span class="comment">"tonnage in row X of the Table of Corvettes"</span>
<span class="definitionkeyword">enum</span> <span class="constant">LIST_ENTRY_NT</span><span class="plain"> </span><span class="comment">"item 4 in L"</span>
</pre>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b>Condition nodes represent atomic conditions, and also Boolean operations on
them. It's convenient to represent these operations as nodes in their own right
rather than as (for example) phrases: this reduces parsing ambiguities, but
also makes it easier for us to manipulate the results.
</p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">LOGICAL_NOT_NT</span><span class="plain"> </span><span class="comment">"not A"</span>
<span class="definitionkeyword">enum</span> <span class="constant">LOGICAL_TENSE_NT</span><span class="plain"> </span><span class="comment">in the past, A</span>
<span class="definitionkeyword">enum</span> <span class="constant">LOGICAL_AND_NT</span><span class="plain"> </span><span class="comment">"A and B"</span>
<span class="definitionkeyword">enum</span> <span class="constant">LOGICAL_OR_NT</span><span class="plain"> </span><span class="comment">"A or B"</span>
<span class="definitionkeyword">enum</span> <span class="constant">TEST_PROPOSITION_NT</span><span class="plain"> </span><span class="comment">if "the cat is on the mat"</span>
<span class="definitionkeyword">enum</span> <span class="constant">TEST_PHRASE_OPTION_NT</span><span class="plain"> </span><span class="comment">"giving full details", say</span>
<span class="definitionkeyword">enum</span> <span class="constant">TEST_VALUE_NT</span><span class="plain"> </span><span class="comment">when a value is used as a condition</span>
</pre>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. </b></p>
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">L4_NCAT</span>
<span class="definitionkeyword">enum</span> <span class="constant">UNKNOWN_NCAT</span>
<span class="definitionkeyword">enum</span> <span class="constant">LVALUE_NCAT</span>
<span class="definitionkeyword">enum</span> <span class="constant">RVALUE_NCAT</span>
<span class="definitionkeyword">enum</span> <span class="constant">COND_NCAT</span>
<span class="definitionkeyword">define</span> <span class="constant">PHRASAL_NFLAG</span><span class="plain"> </span><span class="constant">0x00000004</span><span class="plain"> </span><span class="comment">compiles to a function call</span>
</pre>
<p class="inwebparagraph"><a id="SP9"></a><b>&#167;9. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">PARSE_TREE_METADATA_SETUP</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::md</span>
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::md</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="comment">first, the structural nodes:</span>
<span class="identifier">SourceText::node_metadata</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">ALLOWED_NT</span><span class="plain">, </span><span class="string">"ALLOWED_NT"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="identifier">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">EVERY_NT</span><span class="plain">, </span><span class="string">"EVERY_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="identifier">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">COMMON_NOUN_NT</span><span class="plain">, </span><span class="string">"COMMON_NOUN_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="identifier">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">ACTION_NT</span><span class="plain">, </span><span class="string">"ACTION_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="identifier">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">ADJECTIVE_NT</span><span class="plain">, </span><span class="string">"ADJECTIVE_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="identifier">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">PROPERTYCALLED_NT</span><span class="plain">, </span><span class="string">"PROPERTYCALLED_NT"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="constant">0</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">TOKEN_NT</span><span class="plain">, </span><span class="string">"TOKEN_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="constant">0</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">X_OF_Y_NT</span><span class="plain">, </span><span class="string">"X_OF_Y_NT"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="identifier">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">CREATED_NT</span><span class="plain">, </span><span class="string">"CREATED_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="identifier">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">CODE_BLOCK_NT</span><span class="plain">, </span><span class="string">"CODE_BLOCK_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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="identifier">INVOCATION_LIST_NT</span><span class="plain">, </span><span class="string">"INVOCATION_LIST_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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">INVOCATION_LIST_SAY_NT</span><span class="plain">, </span><span class="string">"INVOCATION_LIST_SAY_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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">INVOCATION_NT</span><span class="plain">, </span><span class="string">"INVOCATION_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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">VOID_CONTEXT_NT</span><span class="plain">, </span><span class="string">"VOID_CONTEXT_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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">RVALUE_CONTEXT_NT</span><span class="plain">, </span><span class="string">"RVALUE_CONTEXT_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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">LVALUE_CONTEXT_NT</span><span class="plain">, </span><span class="string">"LVALUE_CONTEXT_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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">LVALUE_TR_CONTEXT_NT</span><span class="plain">, </span><span class="string">"LVALUE_TR_CONTEXT_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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">SPECIFIC_RVALUE_CONTEXT_NT</span><span class="plain">, </span><span class="string">"SPECIFIC_RVALUE_CONTEXT_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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">MATCHING_RVALUE_CONTEXT_NT</span><span class="plain">, </span><span class="string">"MATCHING_RVALUE_CONTEXT_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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">NEW_LOCAL_CONTEXT_NT</span><span class="plain">, </span><span class="string">"NEW_LOCAL_CONTEXT_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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">LVALUE_LOCAL_CONTEXT_NT</span><span class="plain">, </span><span class="string">"LVALUE_LOCAL_CONTEXT_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</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">CONDITION_CONTEXT_NT</span><span class="plain">, </span><span class="string">"CONDITION_CONTEXT_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">INFTY</span><span class="plain">, </span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">0</span><span class="plain"> });</span>
<span class="comment">now the specification nodes:</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">UNKNOWN_NT</span><span class="plain">, </span><span class="string">"UNKNOWN_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">UNKNOWN_NCAT</span><span class="plain">, </span><span class="constant">0</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">CONSTANT_NT</span><span class="plain">, </span><span class="string">"CONSTANT_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">RVALUE_NCAT</span><span class="plain">, </span><span class="constant">0</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">PHRASE_TO_DECIDE_VALUE_NT</span><span class="plain">, </span><span class="string">"PHRASE_TO_DECIDE_VALUE_NT"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">RVALUE_NCAT</span><span class="plain">, </span><span class="constant">PHRASAL_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">LOCAL_VARIABLE_NT</span><span class="plain">, </span><span class="string">"LOCAL_VARIABLE_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">LVALUE_NCAT</span><span class="plain">, </span><span class="constant">0</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">NONLOCAL_VARIABLE_NT</span><span class="plain">, </span><span class="string">"NONLOCAL_VARIABLE_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">LVALUE_NCAT</span><span class="plain">, </span><span class="constant">0</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_VALUE_NT</span><span class="plain">, </span><span class="string">"PROPERTY_VALUE_NT"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">LVALUE_NCAT</span><span class="plain">, </span><span class="constant">0</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">TABLE_ENTRY_NT</span><span class="plain">, </span><span class="string">"TABLE_ENTRY_NT"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">4</span><span class="plain">, </span><span class="constant">LVALUE_NCAT</span><span class="plain">, </span><span class="constant">0</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">LIST_ENTRY_NT</span><span class="plain">, </span><span class="string">"LIST_ENTRY_NT"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">LVALUE_NCAT</span><span class="plain">, </span><span class="constant">0</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">LOGICAL_NOT_NT</span><span class="plain">, </span><span class="string">"LOGICAL_NOT_NT"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">COND_NCAT</span><span class="plain">, </span><span class="constant">0</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">LOGICAL_TENSE_NT</span><span class="plain">, </span><span class="string">"LOGICAL_TENSE_NT"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">COND_NCAT</span><span class="plain">, </span><span class="constant">0</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">LOGICAL_AND_NT</span><span class="plain">, </span><span class="string">"LOGICAL_AND_NT"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">COND_NCAT</span><span class="plain">, </span><span class="constant">0</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">LOGICAL_OR_NT</span><span class="plain">, </span><span class="string">"LOGICAL_OR_NT"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">2</span><span class="plain">, </span><span class="constant">COND_NCAT</span><span class="plain">, </span><span class="constant">0</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">TEST_PROPOSITION_NT</span><span class="plain">, </span><span class="string">"TEST_PROPOSITION_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">COND_NCAT</span><span class="plain">, </span><span class="constant">0</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">TEST_PHRASE_OPTION_NT</span><span class="plain">, </span><span class="string">"TEST_PHRASE_OPTION_NT"</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">0</span><span class="plain">, </span><span class="constant">COND_NCAT</span><span class="plain">, </span><span class="constant">0</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">TEST_VALUE_NT</span><span class="plain">, </span><span class="string">"TEST_VALUE_NT"</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="constant">COND_NCAT</span><span class="plain">, </span><span class="constant">0</span><span class="plain"> });</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function ParseTreeUsage::md appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">ANNOTATION_PERMISSIONS_WRITER</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::write_permissions</span>
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::write_permissions</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="identifier">L2_NCAT</span><span class="plain">][</span><span class="identifier">L3_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="identifier">L3_NCAT</span><span class="plain">][</span><span class="identifier">L3_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="identifier">L2_NCAT</span><span class="plain">][</span><span class="constant">L4_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">L4_NCAT</span><span class="plain">][</span><span class="constant">L4_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">L4_NCAT</span><span class="plain">][</span><span class="constant">UNKNOWN_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">L4_NCAT</span><span class="plain">][</span><span class="constant">LVALUE_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">L4_NCAT</span><span class="plain">][</span><span class="constant">RVALUE_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">L4_NCAT</span><span class="plain">][</span><span class="constant">COND_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">LVALUE_NCAT</span><span class="plain">][</span><span class="constant">UNKNOWN_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">RVALUE_NCAT</span><span class="plain">][</span><span class="constant">UNKNOWN_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">COND_NCAT</span><span class="plain">][</span><span class="constant">UNKNOWN_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">LVALUE_NCAT</span><span class="plain">][</span><span class="constant">LVALUE_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">RVALUE_NCAT</span><span class="plain">][</span><span class="constant">LVALUE_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">COND_NCAT</span><span class="plain">][</span><span class="constant">LVALUE_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">LVALUE_NCAT</span><span class="plain">][</span><span class="constant">RVALUE_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">RVALUE_NCAT</span><span class="plain">][</span><span class="constant">RVALUE_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">COND_NCAT</span><span class="plain">][</span><span class="constant">RVALUE_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">LVALUE_NCAT</span><span class="plain">][</span><span class="constant">COND_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">RVALUE_NCAT</span><span class="plain">][</span><span class="constant">COND_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parentage_allowed</span><span class="plain">[</span><span class="constant">COND_NCAT</span><span class="plain">][</span><span class="constant">COND_NCAT</span><span class="plain">] = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="identifier">L1_NCAT</span><span class="plain">, </span><span class="constant">clears_pronouns_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">HEADING_NT</span><span class="plain">, </span><span class="identifier">embodying_heading_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">HEADING_NT</span><span class="plain">, </span><span class="identifier">inclusion_of_extension_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">HEADING_NT</span><span class="plain">, </span><span class="constant">interpretation_of_subject_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">HEADING_NT</span><span class="plain">, </span><span class="identifier">suppress_heading_dependencies_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">HEADING_NT</span><span class="plain">, </span><span class="identifier">implied_heading_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="identifier">L1_NCAT</span><span class="plain">, </span><span class="constant">module_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="identifier">L2_NCAT</span><span class="plain">, </span><span class="constant">clears_pronouns_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="identifier">L2_NCAT</span><span class="plain">, </span><span class="constant">interpretation_of_subject_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="identifier">L2_NCAT</span><span class="plain">, </span><span class="identifier">sentence_unparsed_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="identifier">L2_NCAT</span><span class="plain">, </span><span class="constant">verb_problem_issued_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">ROUTINE_NT</span><span class="plain">, </span><span class="constant">indentation_level_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">SENTENCE_NT</span><span class="plain">, </span><span class="constant">implicit_in_creation_of_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">SENTENCE_NT</span><span class="plain">, </span><span class="constant">implicitness_count_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">SENTENCE_NT</span><span class="plain">, </span><span class="constant">you_can_ignore_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="identifier">L2_NCAT</span><span class="plain">, </span><span class="constant">module_ANNOT</span><span class="plain">);</span>
<span class="identifier">LOOP_OVER_NODE_TYPES</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::test_flag</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="identifier">ASSERT_NFLAG</span><span class="plain">))</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">, </span><span class="constant">resolved_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="constant">module_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="constant">creation_proposition_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="constant">evaluation_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="identifier">L3_NCAT</span><span class="plain">, </span><span class="constant">subject_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">ACTION_NT</span><span class="plain">, </span><span class="constant">action_meaning_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">ADJECTIVE_NT</span><span class="plain">, </span><span class="constant">aph_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">ADJECTIVE_NT</span><span class="plain">, </span><span class="constant">negated_boolean_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">ADJECTIVE_NT</span><span class="plain">, </span><span class="identifier">nounphrase_article_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">AVERB_NT</span><span class="plain">, </span><span class="constant">log_inclusion_sense_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">AVERB_NT</span><span class="plain">, </span><span class="constant">verb_id_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">AVERB_NT</span><span class="plain">, </span><span class="constant">imperative_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">AVERB_NT</span><span class="plain">, </span><span class="constant">examine_for_ofs_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">AVERB_NT</span><span class="plain">, </span><span class="constant">listing_sense_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">COMMON_NOUN_NT</span><span class="plain">, </span><span class="constant">action_meaning_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">COMMON_NOUN_NT</span><span class="plain">, </span><span class="constant">creation_site_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">COMMON_NOUN_NT</span><span class="plain">, </span><span class="identifier">implicitly_refers_to_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">COMMON_NOUN_NT</span><span class="plain">, </span><span class="constant">multiplicity_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">COMMON_NOUN_NT</span><span class="plain">, </span><span class="constant">quant_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">COMMON_NOUN_NT</span><span class="plain">, </span><span class="constant">quantification_parameter_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">aph_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">category_of_I6_translation_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">creation_site_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">defn_language_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">log_inclusion_sense_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">lpe_options_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">multiplicity_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">negated_boolean_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">new_relation_here_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">nowhere_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">quant_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">quantification_parameter_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">row_amendable_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">slash_dash_dash_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">table_cell_unspecified_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPER_NOUN_NT</span><span class="plain">, </span><span class="constant">turned_already_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">PROPERTY_LIST_NT</span><span class="plain">, </span><span class="identifier">nounphrase_article_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">RELATIONSHIP_NT</span><span class="plain">, </span><span class="constant">relationship_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">TOKEN_NT</span><span class="plain">, </span><span class="constant">grammar_token_literal_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">TOKEN_NT</span><span class="plain">, </span><span class="constant">grammar_token_relation_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">TOKEN_NT</span><span class="plain">, </span><span class="constant">grammar_value_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">TOKEN_NT</span><span class="plain">, </span><span class="constant">slash_class_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">colon_block_command_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">control_structure_used_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">end_control_structure_used_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">evaluation_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">indentation_level_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">kind_of_new_variable_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">kind_required_by_context_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">results_from_splitting_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">token_as_parsed_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">token_check_to_do_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">token_to_be_parsed_against_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">verb_problem_issued_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="identifier">problem_falls_under_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">L4_NCAT</span><span class="plain">, </span><span class="constant">module_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CODE_BLOCK_NT</span><span class="plain">, </span><span class="identifier">sentence_unparsed_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">INVOCATION_LIST_NT</span><span class="plain">, </span><span class="constant">from_text_substitution_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="identifier">INVOCATION_LIST_NT</span><span class="plain">, </span><span class="identifier">sentence_unparsed_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_LIST_SAY_NT</span><span class="plain">, </span><span class="identifier">sentence_unparsed_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_LIST_SAY_NT</span><span class="plain">, </span><span class="constant">suppress_newlines_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">epistemological_status_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">kind_resulting_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">kind_variable_declarations_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">modal_verb_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">phrase_invoked_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">phrase_options_invoked_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">say_adjective_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">say_verb_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">say_verb_negated_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">ssp_closing_segment_wn_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">ssp_segment_count_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">suppress_newlines_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">save_self_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">INVOCATION_NT</span><span class="plain">, </span><span class="constant">unproven_ANNOT</span><span class="plain">);</span>
<span class="functiontext">ParseTreeUsage::allow_annotation_to_specification</span><span class="plain">(</span><span class="constant">converted_SN_ANNOT</span><span class="plain">);</span>
<span class="functiontext">ParseTreeUsage::allow_annotation_to_specification</span><span class="plain">(</span><span class="constant">subject_term_ANNOT</span><span class="plain">);</span>
<span class="functiontext">ParseTreeUsage::allow_annotation_to_specification</span><span class="plain">(</span><span class="constant">epistemological_status_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_action_name_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_action_pattern_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_activity_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_binary_predicate_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_constant_phrase_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_enumeration_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_equation_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_grammar_verb_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_instance_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_named_action_pattern_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_named_rulebook_outcome_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_number_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_property_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_rule_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_rulebook_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_scene_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_table_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_table_column_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_text_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_use_option_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">constant_verb_form_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">explicit_literal_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">explicit_vh_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">grammar_token_code_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">kind_of_value_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">nothing_object_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">property_name_used_as_noun_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">proposition_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">response_code_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">self_object_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">CONSTANT_NT</span><span class="plain">, </span><span class="constant">text_unescaped_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">LOCAL_VARIABLE_NT</span><span class="plain">, </span><span class="constant">constant_local_variable_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">LOCAL_VARIABLE_NT</span><span class="plain">, </span><span class="constant">kind_of_value_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">LOGICAL_TENSE_NT</span><span class="plain">, </span><span class="constant">condition_tense_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">NONLOCAL_VARIABLE_NT</span><span class="plain">, </span><span class="constant">constant_nonlocal_variable_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">NONLOCAL_VARIABLE_NT</span><span class="plain">, </span><span class="constant">kind_of_value_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">PROPERTY_VALUE_NT</span><span class="plain">, </span><span class="constant">record_as_self_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">TEST_PHRASE_OPTION_NT</span><span class="plain">, </span><span class="constant">phrase_option_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">TEST_PROPOSITION_NT</span><span class="plain">, </span><span class="constant">proposition_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">UNKNOWN_NT</span><span class="plain">, </span><span class="constant">prep_ANNOT</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">UNKNOWN_NT</span><span class="plain">, </span><span class="constant">vu_ANNOT</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::allow_annotation_to_specification</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">annot</span><span class="plain">) {</span>
<span class="identifier">ParseTree::allow_annotation</span><span class="plain">(</span><span class="constant">UNKNOWN_NT</span><span class="plain">, </span><span class="identifier">annot</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">LVALUE_NCAT</span><span class="plain">, </span><span class="identifier">annot</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">RVALUE_NCAT</span><span class="plain">, </span><span class="identifier">annot</span><span class="plain">);</span>
<span class="identifier">ParseTree::allow_annotation_to_category</span><span class="plain">(</span><span class="constant">COND_NCAT</span><span class="plain">, </span><span class="identifier">annot</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function ParseTreeUsage::write_permissions appears nowhere else.</p>
<p class="endnote">The function ParseTreeUsage::allow_annotation_to_specification appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP11"></a><b>&#167;11. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">PARENTAGE_EXCEPTIONS</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::parentage_exceptions</span>
</pre>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::parentage_exceptions</span><span class="plain">(</span><span class="identifier">node_type_t</span><span class="plain"> </span><span class="identifier">t_parent</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">cat_parent</span><span class="plain">,</span>
<span class="identifier">node_type_t</span><span class="plain"> </span><span class="identifier">t_child</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">cat_child</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">t_parent</span><span class="plain"> == </span><span class="identifier">HEADING_NT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">cat_child</span><span class="plain"> == </span><span class="identifier">L2_NCAT</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">t_parent</span><span class="plain"> == </span><span class="constant">PHRASE_TO_DECIDE_VALUE_NT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">t_child</span><span class="plain"> == </span><span class="identifier">INVOCATION_LIST_NT</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function ParseTreeUsage::parentage_exceptions appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. </b>Further classification:
</p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">IMMUTABLE_NODE</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::immutable</span>
<span class="definitionkeyword">define</span> <span class="constant">SENTENCE_NODE</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::second_level</span>
</pre>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::second_level</span><span class="plain">(</span><span class="identifier">node_type_t</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">) {</span>
<span class="identifier">parse_tree_node_type</span><span class="plain"> *</span><span class="identifier">metadata</span><span class="plain"> = </span><span class="identifier">ParseTree::node_metadata</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">metadata</span><span class="plain">) &amp;&amp; (</span><span class="identifier">metadata</span><span class="plain">-&gt;</span><span class="identifier">category</span><span class="plain"> == </span><span class="identifier">L2_NCAT</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::immutable</span><span class="plain">(</span><span class="identifier">node_type_t</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">ParseTreeUsage::is_specification_node_type</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::is_specification_node_type</span><span class="plain">(</span><span class="identifier">node_type_t</span><span class="plain"> </span><span class="identifier">t</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">t</span><span class="plain"> == </span><span class="constant">UNKNOWN_NT</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">parse_tree_node_type</span><span class="plain"> *</span><span class="identifier">metadata</span><span class="plain"> = </span><span class="identifier">ParseTree::node_metadata</span><span class="plain">(</span><span class="identifier">t</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">metadata</span><span class="plain">) &amp;&amp;</span>
<span class="plain">((</span><span class="identifier">metadata</span><span class="plain">-&gt;</span><span class="identifier">category</span><span class="plain"> == </span><span class="constant">RVALUE_NCAT</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">metadata</span><span class="plain">-&gt;</span><span class="identifier">category</span><span class="plain"> == </span><span class="constant">LVALUE_NCAT</span><span class="plain">) ||</span>
<span class="plain">(</span><span class="identifier">metadata</span><span class="plain">-&gt;</span><span class="identifier">category</span><span class="plain"> == </span><span class="constant">COND_NCAT</span><span class="plain">))) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::is_lvalue</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="identifier">parse_tree_node_type</span><span class="plain"> *</span><span class="identifier">metadata</span><span class="plain"> = </span><span class="identifier">ParseTree::node_metadata</span><span class="plain">(</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">metadata</span><span class="plain">) &amp;&amp; (</span><span class="identifier">metadata</span><span class="plain">-&gt;</span><span class="identifier">category</span><span class="plain"> == </span><span class="constant">LVALUE_NCAT</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::is_rvalue</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="identifier">parse_tree_node_type</span><span class="plain"> *</span><span class="identifier">metadata</span><span class="plain"> = </span><span class="identifier">ParseTree::node_metadata</span><span class="plain">(</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">metadata</span><span class="plain">) &amp;&amp; (</span><span class="identifier">metadata</span><span class="plain">-&gt;</span><span class="identifier">category</span><span class="plain"> == </span><span class="constant">RVALUE_NCAT</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::is_value</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="identifier">parse_tree_node_type</span><span class="plain"> *</span><span class="identifier">metadata</span><span class="plain"> = </span><span class="identifier">ParseTree::node_metadata</span><span class="plain">(</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">metadata</span><span class="plain">) &amp;&amp;</span>
<span class="plain">((</span><span class="identifier">metadata</span><span class="plain">-&gt;</span><span class="identifier">category</span><span class="plain"> == </span><span class="constant">LVALUE_NCAT</span><span class="plain">) || (</span><span class="identifier">metadata</span><span class="plain">-&gt;</span><span class="identifier">category</span><span class="plain"> == </span><span class="constant">RVALUE_NCAT</span><span class="plain">)))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::is_condition</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="identifier">parse_tree_node_type</span><span class="plain"> *</span><span class="identifier">metadata</span><span class="plain"> = </span><span class="identifier">ParseTree::node_metadata</span><span class="plain">(</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">metadata</span><span class="plain">) &amp;&amp; (</span><span class="identifier">metadata</span><span class="plain">-&gt;</span><span class="identifier">category</span><span class="plain"> == </span><span class="constant">COND_NCAT</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::is_phrasal</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">if</span><span class="plain"> (</span><span class="identifier">ParseTree::test_flag</span><span class="plain">(</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">), </span><span class="constant">PHRASAL_NFLAG</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function ParseTreeUsage::second_level appears nowhere else.</p>
<p class="endnote">The function ParseTreeUsage::immutable appears nowhere else.</p>
<p class="endnote">The function ParseTreeUsage::is_specification_node_type appears nowhere else.</p>
<p class="endnote">The function ParseTreeUsage::is_lvalue is used in <a href="#SP14_1">&#167;14.1</a>, 12/dtd (<a href="12-dtd.html#SP16">&#167;16</a>, <a href="12-dtd.html#SP23">&#167;23</a>), 14/sp (<a href="14-sp.html#SP1">&#167;1</a>, <a href="14-sp.html#SP6">&#167;6</a>), 14/lv (<a href="14-lv.html#SP7">&#167;7</a>), 14/cfs (<a href="14-cfs.html#SP7">&#167;7</a>), 14/ds2 (<a href="14-ds2.html#SP10_1_1_3_1">&#167;10.1.1.3.1</a>, <a href="14-ds2.html#SP11_2">&#167;11.2</a>, <a href="14-ds2.html#SP19_5_4">&#167;19.5.4</a>), 25/cii (<a href="25-cii.html#SP3_1_1_2">&#167;3.1.1.2</a>).</p>
<p class="endnote">The function ParseTreeUsage::is_rvalue is used in <a href="#SP14_1">&#167;14.1</a>, 4/am (<a href="4-am.html#SP24">&#167;24</a>), 11/sm (<a href="11-sm.html#SP10_4">&#167;10.4</a>), 14/sp (<a href="14-sp.html#SP1">&#167;1</a>, <a href="14-sp.html#SP6">&#167;6</a>), 14/cfs (<a href="14-cfs.html#SP7">&#167;7</a>), 22/prcd (<a href="22-prcd.html#SP6">&#167;6</a>).</p>
<p class="endnote">The function ParseTreeUsage::is_value is used in 9/pk (<a href="9-pk.html#SP4">&#167;4</a>), 14/sp (<a href="14-sp.html#SP7_5">&#167;7.5</a>), 14/ds2 (<a href="14-ds2.html#SP10_1_1_3_1">&#167;10.1.1.3.1</a>, <a href="14-ds2.html#SP19_6_1">&#167;19.6.1</a>), 25/ci (<a href="25-ci.html#SP3_2_3_4_1_1_1">&#167;3.2.3.4.1.1.1</a>).</p>
<p class="endnote">The function ParseTreeUsage::is_condition is used in <a href="#SP14_1">&#167;14.1</a>, 4/am (<a href="4-am.html#SP24">&#167;24</a>), 14/sp (<a href="14-sp.html#SP6">&#167;6</a>), 14/cn (<a href="14-cn.html#SP15">&#167;15</a>), 14/cfs (<a href="14-cfs.html#SP7">&#167;7</a>), 14/ds2 (<a href="14-ds2.html#SP19_6_2">&#167;19.6.2</a>), 25/cp (<a href="25-cp.html#SP5_3_2">&#167;5.3.2</a>).</p>
<p class="endnote">The function ParseTreeUsage::is_phrasal is used in 11/tr (<a href="11-tr.html#SP10">&#167;10</a>), 11/bas (<a href="11-bas.html#SP19">&#167;19</a>), 12/cad (<a href="12-cad.html#SP6">&#167;6</a>), 24/lv (<a href="24-lv.html#SP34">&#167;34</a>).</p>
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. The assertion-maker's invariant. </b>Hmm: "The Assertion-Maker's Invariant" might make a good magic-realism
novel, in which an enigmatic wise man of Samarkand builds an ingenious box
from camphor-wood in which he traps the dreams of the people, who &mdash; However.
When assertions are processed, the subtrees being compared will be required to
be such that their head nodes each pass this test:
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::allow_in_assertions</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
<span class="identifier">ParseTree::verify_structure</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::test_flag</span><span class="plain">(</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">), </span><span class="identifier">ASSERT_NFLAG</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function ParseTreeUsage::allow_in_assertions is used in 9/ma (<a href="9-ma.html#SP2">&#167;2</a>).</p>
<p class="inwebparagraph"><a id="SP14"></a><b>&#167;14. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">PARSE_TREE_LOGGER</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::log_node</span>
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::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">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_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">"$M"</span><span class="plain">, </span><span class="identifier">ParseTree::get_meaning</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"$N"</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">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</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">"'%W'"</span><span class="plain">, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">pn</span><span class="plain">-&gt;</span><span class="identifier">node_type</span><span class="plain"> &gt;= </span><span class="constant">UNKNOWN_NT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">pn</span><span class="plain">-&gt;</span><span class="identifier">node_type</span><span class="plain"> &lt;= </span><span class="constant">TEST_VALUE_NT</span><span class="plain">))</span>
&lt;<span class="cwebmacro">Log annotations of specification nodes</span> <span class="cwebmacronumber">14.1</span>&gt;
<span class="reserved">else</span>
&lt;<span class="cwebmacro">Log annotations of structural nodes</span> <span class="cwebmacronumber">14.2</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function ParseTreeUsage::log_node appears nowhere else.</p>
<p class="inwebparagraph"><a id="SP14_1"></a><b>&#167;14.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Log annotations of specification nodes</span> <span class="cwebmacronumber">14.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_kind_of_value</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">"-$u"</span><span class="plain">, </span><span class="identifier">ParseTree::get_kind_of_value</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">ParseTreeUsage::is_lvalue</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">)) </span><span class="functiontext">Lvalues::log</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">ParseTreeUsage::is_rvalue</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">)) </span><span class="functiontext">Rvalues::log</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">ParseTreeUsage::is_condition</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">)) </span><span class="functiontext">Conditions::log</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_vu</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">"-vu:"</span><span class="plain">); </span><span class="functiontext">NewVerbs::log</span><span class="plain">(</span><span class="identifier">ParseTree::get_vu</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">)); }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_prep</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">"-prep:$p"</span><span class="plain">, </span><span class="identifier">ParseTree::get_prep</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">)); }</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP14">&#167;14</a>.</p>
<p class="inwebparagraph"><a id="SP14_2"></a><b>&#167;14.2. </b>We do not log every annotation: only the few which are most illuminating.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Log annotations of structural nodes</span> <span class="cwebmacronumber">14.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">show_eval</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">show_refers</span><span class="plain"> = </span><span class="identifier">FALSE</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">creation_site_ANNOT</span><span class="plain">))</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (created here)"</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="identifier">ADJECTIVE_NT:</span><span class="plain"> </span><span class="identifier">show_eval</span><span class="plain"> = </span><span class="identifier">TRUE</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="identifier">HEADING_NT:</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (level %d)"</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="identifier">heading_level_ANNOT</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="identifier">COMMON_NOUN_NT:</span><span class="plain"> </span><span class="identifier">show_refers</span><span class="plain"> = </span><span class="identifier">TRUE</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="identifier">KIND_NT:</span><span class="plain"> </span><span class="identifier">show_refers</span><span class="plain"> = </span><span class="identifier">TRUE</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="identifier">RELATIONSHIP_NT:</span>
<span class="identifier">Diagrams::log_node</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pn</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="identifier">PROPER_NOUN_NT:</span>
<span class="identifier">Diagrams::log_node</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pn</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">multiplicity_ANNOT</span><span class="plain">))</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (x%d)"</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">multiplicity_ANNOT</span><span class="plain">));</span>
<span class="identifier">show_refers</span><span class="plain"> = </span><span class="identifier">TRUE</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="identifier">AVERB_NT:</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" ($V)"</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">verb_id_ANNOT</span><span class="plain">));</span>
<span class="identifier">Diagrams::log_node</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pn</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="identifier">TOKEN_NT:</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" [%d/%d]"</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">slash_class_ANNOT</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">slash_dash_dash_ANNOT</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="identifier">INVOCATION_LIST_NT:</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">CODE_BLOCK_NT:</span><span class="plain"> {</span>
<span class="identifier">control_structure_phrase</span><span class="plain"> *</span><span class="identifier">csp</span><span class="plain"> = </span><span class="identifier">ParseTree::get_control_structure_used</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">" "</span><span class="plain">); </span><span class="identifier">ControlStructures::log</span><span class="plain">(</span><span class="identifier">csp</span><span class="plain">); </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="reserved">if</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="identifier">INVOCATION_LIST_NT</span><span class="plain">)</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d"</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">indentation_level_ANNOT</span><span class="plain">));</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_kind_required_by_context</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">" requires:$u"</span><span class="plain">, </span><span class="identifier">ParseTree::get_kind_required_by_context</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">show_refers</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_subject</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">" refers:$j"</span><span class="plain">, </span><span class="identifier">ParseTree::get_subject</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">)); }</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_evaluation</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">" eval:$P"</span><span class="plain">, </span><span class="identifier">ParseTree::get_evaluation</span><span class="plain">(</span><span class="identifier">pn</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="identifier">implicitly_refers_to_ANNOT</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" (implicit)"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">show_eval</span><span class="plain">) &amp;&amp; (</span><span class="identifier">ParseTree::get_evaluation</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">" eval:$P"</span><span class="plain">, </span><span class="identifier">ParseTree::get_evaluation</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_defn_language</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">" language:%J"</span><span class="plain">, </span><span class="identifier">ParseTree::get_defn_language</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_creation_proposition</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">" (creation $D)"</span><span class="plain">, </span><span class="identifier">ParseTree::get_creation_proposition</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">));</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP14">&#167;14</a>.</p>
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::write_to_file</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">ParseTree::write_to_file</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="functiontext">Task::parse_tree_file</span><span class="plain">());</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ParseTreeUsage::verify</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">ParseTree::verify</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">());</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function ParseTreeUsage::write_to_file appears nowhere else.</p>
<p class="endnote">The function ParseTreeUsage::verify is used in 1/htc (<a href="1-htc.html#SP2_3">&#167;2.3</a>).</p>
<p class="inwebparagraph"><a id="SP16"></a><b>&#167;16. </b></p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">PARSE_TREE_TRAVERSE_TYPE</span><span class="plain"> </span><span class="reserved">instance</span>
</pre>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 7: Sentences.)</i></li><li><a href="7-hdn.html">Continue with 'Headings'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</main>
</body>
</html>