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

595 lines
146 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Parse Tree Usage</title>
<link href="Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-src/Figures/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="../supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="index.html"><span class="selectedlink">core</span></a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../if-module/index.html">if</a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul><h2>Shared Modules</h2><ul>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../html-module/index.html">html</a></li>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Parse Tree Usage' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7 Modules</a></li><li><a href="index.html">core</a></li><li><a href="index.html#7">Chapter 7: Sentences</a></li><li><b>Parse Tree Usage</b></li></ul></div>
<p class="purpose">Shims for the parse tree.</p>
<ul class="toc"><li><a href="7-ptu.html#SP1">&#167;1. Definitions</a></li><li><a href="7-ptu.html#SP13">&#167;13. The assertion-maker's invariant</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. Definitions. </b></p>
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PARSE_TREE_COPIER</span><span class="plain-syntax"> </span><a href="7-ptu.html#SP2" class="function-link"><span class="function-syntax">ParseTreeUsage::copy_annotations</span></a>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::copy_annotations</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node_annotation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node_annotation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">kind_of_annotation</span><span class="plain-syntax"> == </span><span class="constant-syntax">proposition_ANNOT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">annotation_pointer</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STORE_POINTER_pcalc_prop</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="11-pr.html#SP14" class="function-link"><span class="function-syntax">Calculus::Propositions::copy</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RETRIEVE_POINTER_pcalc_prop</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">annotation_pointer</span><span class="plain-syntax">)));</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">ALLOWED_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "An animal is allowed to have a description"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">EVERY_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "every container"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">COMMON_NOUN_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "a container"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ACTION_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "taking something closed"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">ADJECTIVE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "open"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PROPERTYCALLED_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "A man has a number called age"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">X_OF_Y_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "description of the painting"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CREATED_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "a vehicle called Sarah Jane's car"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TOKEN_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Used for tokens in grammar</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CODE_BLOCK_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Holds a block of source material</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">INVOCATION_LIST_SAY_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Single thing to be said</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Usage of a phrase</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">VOID_CONTEXT_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> When a void phrase is required</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">RVALUE_CONTEXT_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Arguments, in effect</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LVALUE_CONTEXT_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Named storage location</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LVALUE_TR_CONTEXT_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Table reference</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">SPECIFIC_RVALUE_CONTEXT_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Argument must be an exact value</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">MATCHING_RVALUE_CONTEXT_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Argument must match a description</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">NEW_LOCAL_CONTEXT_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Argument which creates a local</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LVALUE_LOCAL_CONTEXT_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Argument which names a local</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">CONDITION_CONTEXT_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Used for "now" conditions</span>
</pre>
<p class="commentary firstcommentary"><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 code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">UNKNOWN_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "arfle barfle gloop"</span>
</pre>
<p class="commentary firstcommentary"><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 code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "7", "the can't lock a locked door rule", etc.</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PHRASE_TO_DECIDE_VALUE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "holder of the black box"</span>
</pre>
<p class="commentary firstcommentary"><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 <span class="extract"><span class="extract-syntax">A = B</span></span>.) 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 code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">LOCAL_VARIABLE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "the running total", say</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">NONLOCAL_VARIABLE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "the location"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PROPERTY_VALUE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "the carrying capacity of the cedarwood box"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TABLE_ENTRY_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "tonnage in row X of the Table of Corvettes"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LIST_ENTRY_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "item 4 in L"</span>
</pre>
<p class="commentary firstcommentary"><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 code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">LOGICAL_NOT_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "not A"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LOGICAL_TENSE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> in the past, A</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LOGICAL_AND_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "A and B"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LOGICAL_OR_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "A or B"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TEST_PROPOSITION_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> if "the cat is on the mat"</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TEST_PHRASE_OPTION_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "giving full details", say</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">TEST_VALUE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> when a value is used as a condition</span>
</pre>
<p class="commentary firstcommentary"><a id="SP8"></a><b>&#167;8. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">L4_NCAT</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">UNKNOWN_NCAT</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LVALUE_NCAT</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">RVALUE_NCAT</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">COND_NCAT</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">PHRASAL_NFLAG</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000004</span><span class="plain-syntax"> </span><span class="comment-syntax"> compiles to a function call</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9"></a><b>&#167;9. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PARSE_TREE_METADATA_SETUP</span><span class="plain-syntax"> </span><a href="7-ptu.html#SP9" class="function-link"><span class="function-syntax">ParseTreeUsage::md</span></a>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::md</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> first, the structural nodes:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SourceText::node_metadata</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">ALLOWED_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"ALLOWED_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">EVERY_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"EVERY_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">COMMON_NOUN_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"COMMON_NOUN_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">ACTION_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"ACTION_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">ADJECTIVE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"ADJECTIVE_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">PROPERTYCALLED_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"PROPERTYCALLED_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">TOKEN_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"TOKEN_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">X_OF_Y_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"X_OF_Y_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">CREATED_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"CREATED_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">CODE_BLOCK_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"CODE_BLOCK_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="identifier-syntax">INVOCATION_LIST_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"INVOCATION_LIST_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">INVOCATION_LIST_SAY_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"INVOCATION_LIST_SAY_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"INVOCATION_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">VOID_CONTEXT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"VOID_CONTEXT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">RVALUE_CONTEXT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"RVALUE_CONTEXT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">LVALUE_CONTEXT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"LVALUE_CONTEXT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">LVALUE_TR_CONTEXT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"LVALUE_TR_CONTEXT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">SPECIFIC_RVALUE_CONTEXT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"SPECIFIC_RVALUE_CONTEXT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">MATCHING_RVALUE_CONTEXT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"MATCHING_RVALUE_CONTEXT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">NEW_LOCAL_CONTEXT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"NEW_LOCAL_CONTEXT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">LVALUE_LOCAL_CONTEXT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"LVALUE_LOCAL_CONTEXT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">CONDITION_CONTEXT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"CONDITION_CONTEXT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> now the specification nodes:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">UNKNOWN_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"UNKNOWN_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">UNKNOWN_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"CONSTANT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">PHRASE_TO_DECIDE_VALUE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"PHRASE_TO_DECIDE_VALUE_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">PHRASAL_NFLAG</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">LOCAL_VARIABLE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"LOCAL_VARIABLE_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">NONLOCAL_VARIABLE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"NONLOCAL_VARIABLE_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">PROPERTY_VALUE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"PROPERTY_VALUE_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">TABLE_ENTRY_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"TABLE_ENTRY_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">4</span><span class="plain-syntax">, </span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">LIST_ENTRY_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"LIST_ENTRY_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">LOGICAL_NOT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"LOGICAL_NOT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">LOGICAL_TENSE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"LOGICAL_TENSE_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">LOGICAL_AND_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"LOGICAL_AND_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">LOGICAL_OR_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"LOGICAL_OR_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">TEST_PROPOSITION_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"TEST_PROPOSITION_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">TEST_PHRASE_OPTION_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"TEST_PHRASE_OPTION_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">((</span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">TEST_VALUE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"TEST_VALUE_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10"></a><b>&#167;10. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">ANNOTATION_PERMISSIONS_WRITER</span><span class="plain-syntax"> </span><a href="7-ptu.html#SP10" class="function-link"><span class="function-syntax">ParseTreeUsage::write_permissions</span></a>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::write_permissions</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">][</span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">][</span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">UNKNOWN_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">UNKNOWN_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">UNKNOWN_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">UNKNOWN_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parentage_allowed</span><span class="plain-syntax">[</span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">][</span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">] = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L1_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">clears_pronouns_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">HEADING_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">embodying_heading_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">HEADING_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">inclusion_of_extension_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">HEADING_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">interpretation_of_subject_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">HEADING_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">suppress_heading_dependencies_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">HEADING_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">implied_heading_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L1_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">module_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">clears_pronouns_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">interpretation_of_subject_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">sentence_unparsed_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">verb_problem_issued_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">ROUTINE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">indentation_level_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">SENTENCE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">implicit_in_creation_of_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">SENTENCE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">implicitness_count_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">SENTENCE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">you_can_ignore_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">module_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_NODE_TYPES</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::test_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">, </span><span class="constant-syntax">resolved_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">module_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">creation_proposition_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">evaluation_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">subject_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">ACTION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">action_meaning_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">ADJECTIVE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">aph_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">ADJECTIVE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">negated_boolean_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">ADJECTIVE_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">nounphrase_article_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">AVERB_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">log_inclusion_sense_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">AVERB_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">verb_id_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">AVERB_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">imperative_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">AVERB_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">examine_for_ofs_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">AVERB_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">listing_sense_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">COMMON_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">action_meaning_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">COMMON_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">creation_site_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">COMMON_NOUN_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">implicitly_refers_to_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">COMMON_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">COMMON_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">quant_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">COMMON_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">quantification_parameter_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">aph_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">category_of_I6_translation_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">creation_site_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">defn_language_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">log_inclusion_sense_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_options_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">negated_boolean_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">new_relation_here_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">nowhere_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">quant_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">quantification_parameter_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">row_amendable_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_dash_dash_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">table_cell_unspecified_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">turned_already_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPERTY_LIST_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">nounphrase_article_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">RELATIONSHIP_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">relationship_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">TOKEN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_literal_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">TOKEN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_relation_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">TOKEN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_value_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">TOKEN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_class_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">colon_block_command_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">control_structure_used_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">end_control_structure_used_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">evaluation_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">indentation_level_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">kind_of_new_variable_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">kind_required_by_context_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">results_from_splitting_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">token_as_parsed_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">token_check_to_do_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">token_to_be_parsed_against_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">verb_problem_issued_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">problem_falls_under_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">L4_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">module_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CODE_BLOCK_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">sentence_unparsed_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">INVOCATION_LIST_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">from_text_substitution_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">INVOCATION_LIST_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">sentence_unparsed_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_LIST_SAY_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">sentence_unparsed_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_LIST_SAY_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">suppress_newlines_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">epistemological_status_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">kind_resulting_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">kind_variable_declarations_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">modal_verb_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">phrase_invoked_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">phrase_options_invoked_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">say_adjective_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">say_verb_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">say_verb_negated_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">ssp_closing_segment_wn_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">ssp_segment_count_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">suppress_newlines_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">save_self_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">INVOCATION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">unproven_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-ptu.html#SP10" class="function-link"><span class="function-syntax">ParseTreeUsage::allow_annotation_to_specification</span></a><span class="plain-syntax">(</span><span class="constant-syntax">converted_SN_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-ptu.html#SP10" class="function-link"><span class="function-syntax">ParseTreeUsage::allow_annotation_to_specification</span></a><span class="plain-syntax">(</span><span class="constant-syntax">subject_term_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="7-ptu.html#SP10" class="function-link"><span class="function-syntax">ParseTreeUsage::allow_annotation_to_specification</span></a><span class="plain-syntax">(</span><span class="constant-syntax">epistemological_status_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_action_name_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_action_pattern_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_activity_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_binary_predicate_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_constant_phrase_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_enumeration_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_equation_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_grammar_verb_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_instance_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_named_action_pattern_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_named_rulebook_outcome_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_number_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_property_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_rule_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_rulebook_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_scene_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_table_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_table_column_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_text_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_use_option_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_verb_form_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">explicit_literal_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">explicit_vh_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_code_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">kind_of_value_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">nothing_object_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">property_name_used_as_noun_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">proposition_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">response_code_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">self_object_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">text_unescaped_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">LOCAL_VARIABLE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_local_variable_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">LOCAL_VARIABLE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">kind_of_value_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">LOGICAL_TENSE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">condition_tense_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">NONLOCAL_VARIABLE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_nonlocal_variable_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">NONLOCAL_VARIABLE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">kind_of_value_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">PROPERTY_VALUE_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">record_as_self_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">TEST_PHRASE_OPTION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">phrase_option_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">TEST_PROPOSITION_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">proposition_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">UNKNOWN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">prep_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">UNKNOWN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">vu_ANNOT</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::allow_annotation_to_specification</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">annot</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation</span><span class="plain-syntax">(</span><span class="constant-syntax">UNKNOWN_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">annot</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">annot</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">annot</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::allow_annotation_to_category</span><span class="plain-syntax">(</span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">annot</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11"></a><b>&#167;11. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PARENTAGE_EXCEPTIONS</span><span class="plain-syntax"> </span><a href="7-ptu.html#SP11" class="function-link"><span class="function-syntax">ParseTreeUsage::parentage_exceptions</span></a>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::parentage_exceptions</span><span class="plain-syntax">(</span><span class="identifier-syntax">node_type_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">t_parent</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat_parent</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">node_type_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">t_child</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat_child</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">t_parent</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HEADING_NT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">cat_child</span><span class="plain-syntax"> == </span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">t_parent</span><span class="plain-syntax"> == </span><span class="constant-syntax">PHRASE_TO_DECIDE_VALUE_NT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">t_child</span><span class="plain-syntax"> == </span><span class="identifier-syntax">INVOCATION_LIST_NT</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12"></a><b>&#167;12. </b>Further classification:
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">IMMUTABLE_NODE</span><span class="plain-syntax"> </span><a href="7-ptu.html#SP12" class="function-link"><span class="function-syntax">ParseTreeUsage::immutable</span></a>
<span class="definition-keyword">define</span> <span class="constant-syntax">SENTENCE_NODE</span><span class="plain-syntax"> </span><a href="7-ptu.html#SP12" class="function-link"><span class="function-syntax">ParseTreeUsage::second_level</span></a>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::second_level</span><span class="plain-syntax">(</span><span class="identifier-syntax">node_type_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax"> *</span><span class="identifier-syntax">metadata</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseTree::node_metadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">category</span><span class="plain-syntax"> == </span><span class="identifier-syntax">L2_NCAT</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::immutable</span><span class="plain-syntax">(</span><span class="identifier-syntax">node_type_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="7-ptu.html#SP12" class="function-link"><span class="function-syntax">ParseTreeUsage::is_specification_node_type</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::is_specification_node_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">node_type_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">t</span><span class="plain-syntax"> == </span><span class="constant-syntax">UNKNOWN_NT</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax"> *</span><span class="identifier-syntax">metadata</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseTree::node_metadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">t</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> ((</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">category</span><span class="plain-syntax"> == </span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">category</span><span class="plain-syntax"> == </span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">category</span><span class="plain-syntax"> == </span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">))) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::is_lvalue</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::is_lvalue</span></span>:<br/><a href="7-ptu.html#SP14_1">&#167;14.1</a><br/>Deciding to Defer - <a href="12-dtd.html#SP16">&#167;16</a>, <a href="12-dtd.html#SP23">&#167;23</a><br/>Specifications - <a href="14-sp.html#SP1">&#167;1</a>, <a href="14-sp.html#SP6">&#167;6</a><br/>Lvalues - <a href="14-lv.html#SP7">&#167;7</a><br/>Compiling from Specifications - <a href="14-cfs.html#SP7">&#167;7</a><br/>Dash - <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><br/>Compile Invocations Inline - <a href="25-cii.html#SP3_1_1_2">&#167;3.1.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax"> *</span><span class="identifier-syntax">metadata</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseTree::node_metadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">category</span><span class="plain-syntax"> == </span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::is_rvalue</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::is_rvalue</span></span>:<br/><a href="7-ptu.html#SP14_1">&#167;14.1</a><br/>Adjective Meanings - <a href="4-am.html#SP24">&#167;24</a><br/>Simplifications - <a href="11-sm.html#SP10_4">&#167;10.4</a><br/>Specifications - <a href="14-sp.html#SP1">&#167;1</a>, <a href="14-sp.html#SP6">&#167;6</a><br/>Compiling from Specifications - <a href="14-cfs.html#SP7">&#167;7</a><br/>Phrase Runtime Context Data - <a href="22-prcd.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax"> *</span><span class="identifier-syntax">metadata</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseTree::node_metadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">category</span><span class="plain-syntax"> == </span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::is_value</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::is_value</span></span>:<br/>Property Knowledge - <a href="9-pk.html#SP4">&#167;4</a><br/>Specifications - <a href="14-sp.html#SP7_5">&#167;7.5</a><br/>Dash - <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><br/>Compile Invocations - <a href="25-ci.html#SP3_2_3_4_1_1_1">&#167;3.2.3.4.1.1.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax"> *</span><span class="identifier-syntax">metadata</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseTree::node_metadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> ((</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">category</span><span class="plain-syntax"> == </span><span class="constant-syntax">LVALUE_NCAT</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">category</span><span class="plain-syntax"> == </span><span class="constant-syntax">RVALUE_NCAT</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::is_condition</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::is_condition</span></span>:<br/><a href="7-ptu.html#SP14_1">&#167;14.1</a><br/>Adjective Meanings - <a href="4-am.html#SP24">&#167;24</a><br/>Specifications - <a href="14-sp.html#SP6">&#167;6</a><br/>Conditions - <a href="14-cn.html#SP15">&#167;15</a><br/>Compiling from Specifications - <a href="14-cfs.html#SP7">&#167;7</a><br/>Dash - <a href="14-ds2.html#SP19_6_2">&#167;19.6.2</a><br/>Compile Phrases - <a href="25-cp.html#SP5_3_2">&#167;5.3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_tree_node_type</span><span class="plain-syntax"> *</span><span class="identifier-syntax">metadata</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseTree::node_metadata</span><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">metadata</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">category</span><span class="plain-syntax"> == </span><span class="constant-syntax">COND_NCAT</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::is_phrasal</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::is_phrasal</span></span>:<br/>Terms - <a href="11-tr.html#SP10">&#167;10</a><br/>Binding and Substitution - <a href="11-bas.html#SP19">&#167;19</a><br/>Cinders and Deferrals - <a href="12-cad.html#SP6">&#167;6</a><br/>Local Variables - <a href="24-lv.html#SP34">&#167;34</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::test_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">), </span><span class="constant-syntax">PHRASAL_NFLAG</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><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="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::allow_in_assertions</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::allow_in_assertions</span></span>:<br/>Make Assertions - <a href="9-ma.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::verify_structure</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::test_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">), </span><span class="identifier-syntax">ASSERT_NFLAG</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14"></a><b>&#167;14. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PARSE_TREE_LOGGER</span><span class="plain-syntax"> </span><a href="7-ptu.html#SP14" class="function-link"><span class="function-syntax">ParseTreeUsage::log_node</span></a>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::log_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"$M"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::get_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"$N"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">node_type</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">))) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"'%W'"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">node_type</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">UNKNOWN_NT</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">node_type</span><span class="plain-syntax"> &lt;= </span><span class="constant-syntax">TEST_VALUE_NT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ptu.html#SP14_1" class="named-paragraph-link"><span class="named-paragraph">Log annotations of specification nodes</span><span class="named-paragraph-number">14.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ptu.html#SP14_2" class="named-paragraph-link"><span class="named-paragraph">Log annotations of structural nodes</span><span class="named-paragraph-number">14.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14_1"></a><b>&#167;14.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Log annotations of specification nodes</span><span class="named-paragraph-number">14.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"-$u"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="7-ptu.html#SP12" class="function-link"><span class="function-syntax">ParseTreeUsage::is_lvalue</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) </span><a href="14-lv.html#SP11" class="function-link"><span class="function-syntax">Lvalues::log</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="7-ptu.html#SP12" class="function-link"><span class="function-syntax">ParseTreeUsage::is_rvalue</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) </span><a href="14-rv.html#SP22" class="function-link"><span class="function-syntax">Rvalues::log</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="7-ptu.html#SP12" class="function-link"><span class="function-syntax">ParseTreeUsage::is_condition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) </span><a href="14-cn.html#SP13" class="function-link"><span class="function-syntax">Conditions::log</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_vu</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"-vu:"</span><span class="plain-syntax">); </span><a href="6-nv.html#SP24" class="function-link"><span class="function-syntax">NewVerbs::log</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ParseTree::get_vu</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)); }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_prep</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"-prep:$p"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::get_prep</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)); }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ptu.html#SP14">&#167;14</a>.</li></ul>
<p class="commentary firstcommentary"><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="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Log annotations of structural nodes</span><span class="named-paragraph-number">14.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">show_eval</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">show_refers</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">creation_site_ANNOT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (created here)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">node_type</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ADJECTIVE_NT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">show_eval</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">HEADING_NT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (level %d)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">heading_level_ANNOT</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COMMON_NOUN_NT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">show_refers</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">KIND_NT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">show_refers</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RELATIONSHIP_NT:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Diagrams::log_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PROPER_NOUN_NT:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Diagrams::log_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (x%d)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">show_refers</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">AVERB_NT:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" ($V)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">verb_id_ANNOT</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Diagrams::log_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TOKEN_NT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" [%d/%d]"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_class_ANNOT</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_dash_dash_ANNOT</span><span class="plain-syntax">)); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INVOCATION_LIST_NT:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CODE_BLOCK_NT:</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">control_structure_phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">csp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseTree::get_control_structure_used</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">); </span><span class="identifier-syntax">ControlStructures::log</span><span class="plain-syntax">(</span><span class="identifier-syntax">csp</span><span class="plain-syntax">); </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">node_type</span><span class="plain-syntax"> == </span><span class="identifier-syntax">INVOCATION_LIST_NT</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">indentation_level_ANNOT</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_kind_required_by_context</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" requires:$u"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::get_kind_required_by_context</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">show_refers</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" refers:$j"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::get_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)); }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_evaluation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" eval:$P"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::get_evaluation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)); }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::int_annotation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">implicitly_refers_to_ANNOT</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (implicit)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">show_eval</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ParseTree::get_evaluation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" eval:$P"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::get_evaluation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_defn_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" language:%J"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::get_defn_language</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ParseTree::get_creation_proposition</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (creation $D)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">ParseTree::get_creation_proposition</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="7-ptu.html#SP14">&#167;14</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP15"></a><b>&#167;15. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::write_to_file</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::write_to_file</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">(), </span><a href="1-wtc.html#SP10" class="function-link"><span class="function-syntax">Task::parse_tree_file</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTreeUsage::verify</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">ParseTreeUsage::verify</span></span>:<br/>How To Compile - <a href="1-htc.html#SP2_3">&#167;2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::verify</span><span class="plain-syntax">(</span><a href="1-wtc.html#SP5" class="function-link"><span class="function-syntax">Task::syntax_tree</span></a><span class="plain-syntax">());</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16"></a><b>&#167;16. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PARSE_TREE_TRAVERSE_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">instance</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="6-nv.html">&#10094;</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-nl.html">3</a></li><li class="progresschapter"><a href="4-its.html">4</a></li><li class="progresschapter"><a href="5-lp.html">5</a></li><li class="progresschapter"><a href="6-bp.html">6</a></li><li class="progresscurrentchapter">7</li><li class="progresscurrent">ptu</li><li class="progresssection"><a href="7-hdn.html">hdn</a></li><li class="progresssection"><a href="7-ns.html">ns</a></li><li class="progresssection"><a href="7-oaf.html">oaf</a></li><li class="progresssection"><a href="7-rs.html">rs</a></li><li class="progresschapter"><a href="8-ef.html">8</a></li><li class="progresschapter"><a href="9-ita.html">9</a></li><li class="progresschapter"><a href="10-aots.html">10</a></li><li class="progresschapter"><a href="11-itpc.html">11</a></li><li class="progresschapter"><a href="12-ter.html">12</a></li><li class="progresschapter"><a href="13-kak.html">13</a></li><li class="progresschapter"><a href="14-sp.html">14</a></li><li class="progresschapter"><a href="15-pr.html">15</a></li><li class="progresschapter"><a href="16-is.html">16</a></li><li class="progresschapter"><a href="17-tl.html">17</a></li><li class="progresschapter"><a href="18-lc.html">18</a></li><li class="progresschapter"><a href="19-tc.html">19</a></li><li class="progresschapter"><a href="20-eq.html">20</a></li><li class="progresschapter"><a href="21-rl.html">21</a></li><li class="progresschapter"><a href="22-itp.html">22</a></li><li class="progresschapter"><a href="23-ad.html">23</a></li><li class="progresschapter"><a href="24-lv.html">24</a></li><li class="progresschapter"><a href="25-in.html">25</a></li><li class="progresschapter"><a href="26-fc.html">26</a></li><li class="progresschapter"><a href="27-hr.html">27</a></li><li class="progressnext"><a href="7-hdn.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>