mirror of
https://github.com/ganelson/inform.git
synced 2024-06-09 11:58:10 +03:00
Improved supervisor/words bridge
This commit is contained in:
parent
6f179ce3a4
commit
d8ff772b1f
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
v10.1.0-alpha.1+6Q39 'Krypton' (5 May 2020)
|
||||
v10.1.0-alpha.1+6Q40 'Krypton' (6 May 2020)
|
||||
|
||||
## About Inform 7
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: alpha.1
|
||||
Build Date: 5 May 2020
|
||||
Build Number: 6Q39
|
||||
Build Date: 6 May 2020
|
||||
Build Number: 6Q40
|
||||
|
|
|
@ -189,7 +189,6 @@ most of these worker functions are in the <span class="extract"><span class="ext
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="7-ns.html#SP8" class="function-link"><span class="function-syntax">Sentences::VPs::traverse</span></a><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="7-oaf.html#SP3" class="function-link"><span class="function-syntax">Sentences::Rearrangement::tidy_up_ofs_and_froms</span></a><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="7-rs.html#SP3" class="function-link"><span class="function-syntax">Sentences::RuleSubtrees::register_recently_lexed_phrases</span></a><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">SourceText::declare_source_loaded</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><a href="13-kak.html#SP6" class="function-link"><span class="function-syntax">Kinds::Knowledge::include_templates_for_kinds</span></a><span class="plain-syntax">)</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="1-wtc.html#SP4" class="function-link"><span class="function-syntax">Task::advance_stage_to</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SEMANTIC_II_CSEQ</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Semantic analysis II"</span><span class="plain-syntax">, -1);</span>
|
||||
|
|
|
@ -168,57 +168,55 @@ also makes it easier for us to manipulate the results.
|
|||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§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 class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">SYNTAX_TREE_FURTHER_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="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="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="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="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="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="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="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="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="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">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="identifier-syntax">ParseTree::md</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">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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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><span class="identifier-syntax">ParseTree::md</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="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="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="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="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="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="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>§10. </b></p>
|
||||
|
|
|
@ -66,7 +66,7 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Compiler Tools</a></li><li><a href="index.html">inbuild</a></li><li><a href="index.html#1">Chapter 1: Outside of inform7</a></li><li><b>Main</b></li></ul></div>
|
||||
<p class="purpose">A command-line interface for Inbuild functions which are not part of the normal operation of the Inform compiler.</p>
|
||||
|
||||
<ul class="toc"><li><a href="1-mn.html#SP1">§1. Settings variables</a></li><li><a href="1-mn.html#SP2">§2. Main routine</a></li><li><a href="1-mn.html#SP2_6">§2.6. Target list</a></li><li><a href="1-mn.html#SP2_7">§2.7. Command line</a></li><li><a href="1-mn.html#SP5">§5. Interface to Words module</a></li><li><a href="1-mn.html#SP6">§6. Interface to Syntax module</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-mn.html#SP1">§1. Settings variables</a></li><li><a href="1-mn.html#SP2">§2. Main routine</a></li><li><a href="1-mn.html#SP2_6">§2.6. Target list</a></li><li><a href="1-mn.html#SP2_7">§2.7. Command line</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Settings variables. </b>The following will be set at the command line.
|
||||
</p>
|
||||
|
@ -464,18 +464,6 @@ subordinate to any switch; we take it as the name of a copy.
|
|||
<span class="plain-syntax"> </span><a href="1-mn.html#SP2_6" class="function-link"><span class="function-syntax">Main::add_file_or_path_as_target</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. Interface to Words module. </b>We use the mighty Preform natural-language parser only a little when
|
||||
Inbuild runs on its own, but it needs to be told what C type to use when
|
||||
identifying natural languages.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PREFORM_LANGUAGE_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. Interface to Syntax module. </b>Again, we make a fairly light use of <span class="extract"><span class="extract-syntax">syntax</span></span> when Inbuild runs alone.
|
||||
</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="../supervisor-module/6-st.html#SP7" class="function-link"><span class="function-syntax">SourceText::node_metadata</span></a>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="M-rc.html">❮</a></li><li class="progresschapter"><a href="M-ui.html">M</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">mn</li><li class="progressnextoff">❯</li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
|
|
@ -87,14 +87,14 @@ function togglePopup(material_id) {
|
|||
<span class="definition-keyword">define</span> <span class="constant-syntax">ASSERT_NFLAG</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000008</span><span class="plain-syntax"> </span><span class="comment-syntax"> allow this on either side of an assertion?</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">TwoLikelihoods_LINERROR</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Diagrams::setup</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">Diagrams::setup</span></span>:<br/>Linguistics Module - <a href="1-lm.html#SP3">§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::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">AVERB_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"AVERB_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">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">RELATIONSHIP_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"RELATIONSHIP_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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">CALLED_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"CALLED_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">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">WITH_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"WITH_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">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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">AND_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"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">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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">KIND_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"KIND_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"PROPER_NOUN_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">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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">PROPERTY_LIST_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"PROPERTY_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">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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="constant-syntax">AVERB_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"AVERB_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">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="constant-syntax">RELATIONSHIP_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"RELATIONSHIP_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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="constant-syntax">CALLED_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"CALLED_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">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="constant-syntax">WITH_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"WITH_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">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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="constant-syntax">AND_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"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">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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="constant-syntax">KIND_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"KIND_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="constant-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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="constant-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"PROPER_NOUN_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">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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="constant-syntax">PROPERTY_LIST_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"PROPERTY_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">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-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="constant-syntax">AVERB_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">verbal_certainty_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">AVERB_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">sentence_is_existential_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">AVERB_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">possessive_verb_ANNOT</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -115,7 +115,7 @@ function togglePopup(material_id) {
|
|||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Unit::start_diagrams</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">Unit::start_diagrams</span></span>:<br/>Program Control - <a href="1-pc.html#SP1">§1</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">trace_sentences</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="../syntax-module/2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">((</span><span class="reserved-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">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
|
||||
<span class="plain-syntax"> </span><a href="../syntax-module/2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><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">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L2_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="reserved-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">syntax_tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -140,7 +140,7 @@ fields are blank.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="function-syntax">CopyErrors::new_F</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">CopyErrors::new_F</span></span>:<br/>Extension Services - <a href="5-es.html#SP2_2">§2.2</a><br/>Source Text - <a href="6-st.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">, </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="function-syntax">CopyErrors::new_F</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">CopyErrors::new_F</span></span>:<br/>Extension Services - <a href="5-es.html#SP2_2">§2.2</a><br/>Source Text - <a href="6-st.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">, </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax"> = </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cat</span><span class="plain-syntax">, </span><span class="identifier-syntax">subcat</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CE</span><span class="plain-syntax">-></span><span class="element-syntax">details_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">F</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">CE</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -144,7 +144,7 @@ for later reporting. These are stored in a list.
|
|||
</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">Copies::attach_error</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">Copies::attach_error</span></span>:<br/>Extension Services - <a href="5-es.html#SP2_2">§2.2</a>, <a href="5-es.html#SP2_2_3">§2.2.3</a>, <a href="5-es.html#SP2_2_3_2">§2.2.3.2</a>, <a href="5-es.html#SP2_3">§2.3</a><br/>Kit Services - <a href="5-ks.html#SP5">§5</a>, <a href="5-ks.html#SP5_1">§5.1</a>, <a href="5-ks.html#SP5_3">§5.3</a><br/>Project Services - <a href="5-ps2.html#SP26">§26</a><br/>Source Text - <a href="6-st.html#SP1">§1</a>, <a href="6-st.html#SP2">§2</a>, <a href="6-st.html#SP4">§4</a>, <a href="6-st.html#SP12">§12</a><br/>Headings - <a href="6-hdn.html#SP13_1">§13.1</a>, <a href="6-hdn.html#SP13_2">§13.2</a>, <a href="6-hdn.html#SP23_1">§23.1</a>, <a href="6-hdn.html#SP24_1">§24.1</a>, <a href="6-hdn.html#SP23_2">§23.2</a>, <a href="6-hdn.html#SP23_3">§23.3</a><br/>The Bibliographic Sentence - <a href="6-tbs.html#SP1">§1</a><br/>Inclusions - <a href="6-inc.html#SP3_1">§3.1</a>, <a href="6-inc.html#SP6_1_1">§6.1.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>, <a href="6-inc.html#SP7_1">§7.1</a>, <a href="6-inc.html#SP9_1">§9.1</a>, <a href="6-inc.html#SP11">§11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Copies::attach_error</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">Copies::attach_error</span></span>:<br/>Extension Services - <a href="5-es.html#SP2_2">§2.2</a>, <a href="5-es.html#SP2_2_3">§2.2.3</a>, <a href="5-es.html#SP2_2_3_2">§2.2.3.2</a>, <a href="5-es.html#SP2_3">§2.3</a><br/>Kit Services - <a href="5-ks.html#SP5">§5</a>, <a href="5-ks.html#SP5_1">§5.1</a>, <a href="5-ks.html#SP5_3">§5.3</a><br/>Project Services - <a href="5-ps2.html#SP26">§26</a><br/>Source Text - <a href="6-st.html#SP2">§2</a>, <a href="6-st.html#SP3">§3</a>, <a href="6-st.html#SP4">§4</a>, <a href="6-st.html#SP12">§12</a><br/>Headings - <a href="6-hdn.html#SP13_1">§13.1</a>, <a href="6-hdn.html#SP13_2">§13.2</a>, <a href="6-hdn.html#SP23_1">§23.1</a>, <a href="6-hdn.html#SP24_1">§24.1</a>, <a href="6-hdn.html#SP23_2">§23.2</a>, <a href="6-hdn.html#SP23_3">§23.3</a><br/>The Bibliographic Sentence - <a href="6-tbs.html#SP1">§1</a><br/>Inclusions - <a href="6-inc.html#SP3_1">§3.1</a>, <a href="6-inc.html#SP6_1_1">§6.1.1</a>, <a href="6-inc.html#SP6_1_2">§6.1.2</a>, <a href="6-inc.html#SP7_1">§7.1</a>, <a href="6-inc.html#SP9_1">§9.1</a>, <a href="6-inc.html#SP11">§11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">C</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no copy to attach to"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ce.html#SP4" class="function-link"><span class="function-syntax">CopyErrors::supply_attached_copy</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">-></span><span class="element-syntax">errors_reading_source_text</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -130,6 +130,7 @@ folders anyway; maybe we should leave well be.)
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">project</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no project"</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">S</span><span class="plain-syntax">-></span><span class="identifier-syntax">associated_copy</span><span class="plain-syntax">-></span><span class="element-syntax">edition</span><span class="plain-syntax">-></span><span class="element-syntax">work</span><span class="plain-syntax">-></span><span class="element-syntax">genre</span><span class="plain-syntax"> == </span><span class="identifier-syntax">project_bundle_genre</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Pathnames::create_in_file_system</span><span class="plain-syntax">(</span><a href="5-ps2.html#SP4" class="function-link"><span class="function-syntax">Projects::materials_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">project</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="6-st.html#SP5" class="function-link"><span class="function-syntax">SourceText::bulk_of_source_loaded</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Task::carry_out</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
|
|
|
@ -400,7 +400,7 @@ This is that time.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">census_mode</span><span class="plain-syntax">) </span><span class="identifier-syntax">doc_only</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">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">synopsis</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-es.html#SP6_1" class="named-paragraph-link"><span class="named-paragraph">Concoct a synopsis for the extension to be read</span><span class="named-paragraph-number">6.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-></span><span class="element-syntax">read_into_file</span><span class="plain-syntax"> = </span><a href="6-st.html#SP1" class="function-link"><span class="function-syntax">SourceText::read_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">synopsis</span><span class="plain-syntax">, </span><span class="identifier-syntax">doc_only</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-></span><span class="element-syntax">read_into_file</span><span class="plain-syntax"> = </span><a href="6-st.html#SP3" class="function-link"><span class="function-syntax">SourceText::read_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">synopsis</span><span class="plain-syntax">, </span><span class="identifier-syntax">doc_only</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">synopsis</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">E</span><span class="plain-syntax">-></span><span class="identifier-syntax">read_into_file</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">E</span><span class="plain-syntax">-></span><span class="identifier-syntax">read_into_file</span><span class="plain-syntax">-></span><span class="identifier-syntax">your_ref</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_inbuild_copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">E</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -927,7 +927,7 @@ it comes.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::set_start_of_source</span><span class="plain-syntax">(</span><span class="identifier-syntax">lexer_wordcount</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">-></span><span class="identifier-syntax">as_source_file</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><a href="6-st.html#SP1" class="function-link"><span class="function-syntax">SourceText::read_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">-></span><span class="element-syntax">source_source</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="6-st.html#SP3" class="function-link"><span class="function-syntax">SourceText::read_file</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">as_copy</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">-></span><span class="element-syntax">source_source</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">l</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ParseTree::push_attachment_point</span><span class="plain-syntax">(</span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">syntax_tree</span><span class="plain-syntax">, </span><span class="identifier-syntax">proj</span><span class="plain-syntax">-></span><span class="element-syntax">syntax_tree</span><span class="plain-syntax">-></span><span class="identifier-syntax">root_node</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::break_into_project_copy</span><span class="plain-syntax">(</span>
|
||||
|
|
|
@ -67,17 +67,43 @@ function togglePopup(material_id) {
|
|||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inbuild Modules</a></li><li><a href="index.html">supervisor</a></li><li><a href="index.html#6">Chapter 6: Inform Source Text</a></li><li><b>Source Text</b></li></ul></div>
|
||||
<p class="purpose">Code for reading Inform 7 source text, which Inbuild uses for both extensions and projects.</p>
|
||||
|
||||
<ul class="toc"><li><a href="6-st.html#SP10">§10. Sentence division</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="6-st.html#SP1">§1. Bridge to the Lexer</a></li><li><a href="6-st.html#SP4">§4. Bridge to the syntax analyser</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. </b>This short function is a bridge to the lexer, and is used for reading
|
||||
text files of source into either projects or extensions. Note that it
|
||||
doesn't attach the fed text to the copy: the copy may need to contain text
|
||||
from multiple files and indeed from elsewhere.
|
||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Bridge to the Lexer. </b>Firstly, we need to tell the <a href="../words-module/index.html" class="internal">words</a> module what type to use when referencing
|
||||
natural languages.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PREFORM_LANGUAGE_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">inform_language</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>Lexical errors — overly long words, half-open quotations, and such — are
|
||||
converted into copy errors and attached to the copy currently being worked on.
|
||||
The following callback function performs that service.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><a href="../words-module/index.html" class="internal">words</a> has no convenient way to keep track of what copy we're working on,
|
||||
so we will simply store it in a global variable.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">LEXER_PROBLEM_HANDLER</span><span class="plain-syntax"> </span><a href="6-st.html#SP2" class="function-link"><span class="function-syntax">SourceText::lexer_problem_handler</span></a>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">currently_lexing_into</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">SourceText::lexer_problem_handler</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">desc</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">word</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">err</span><span class="plain-syntax"> == </span><span class="identifier-syntax">MEMORY_OUT_LEXERERROR</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Errors::fatal</span><span class="plain-syntax">(</span><span class="string-syntax">"Out of memory: unable to create lexer workspace"</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">currently_lexing_into</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax"> = </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_WT</span></a><span class="plain-syntax">(</span><span class="constant-syntax">LEXER_CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="identifier-syntax">word</span><span class="plain-syntax">, </span><span class="identifier-syntax">desc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">currently_lexing_into</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>This next function is our bridge to the lexer (see <a href="../words-module/3-tff.html" class="internal">Text From Files (in words)</a>),
|
||||
and is used for reading text files of source into either projects or extensions.
|
||||
Note that it doesn't attach the fed text to the copy: the caller must do that,
|
||||
perhaps combining our feed with that of others.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">currently_lexing_into</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="identifier-syntax">source_file</span><span class="plain-syntax"> *</span><span class="function-syntax">SourceText::read_file</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">SourceText::read_file</span></span>:<br/>Extension Services - <a href="5-es.html#SP6">§6</a><br/>Project Services - <a href="5-ps2.html#SP27_2">§27.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">synopsis</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">documentation_only</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">primary</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">currently_lexing_into</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
|
||||
|
@ -94,7 +120,7 @@ from multiple files and indeed from elsewhere.
|
|||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fclose</span><span class="plain-syntax">(</span><span class="identifier-syntax">handle</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">documentation_only</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="6-st.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Tell console output about the file</span><span class="named-paragraph-number">1.1</span></a></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">documentation_only</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="6-st.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Tell console output about the file</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -102,64 +128,123 @@ from multiple files and indeed from elsewhere.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">sf</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP1_1"></a><b>§1.1. </b>This is where messages like
|
||||
<p class="commentary firstcommentary"><a id="SP3_1"></a><b>§3.1. </b>This is where messages like
|
||||
</p>
|
||||
|
||||
<pre class="ConsoleText-displayed-code all-displayed-code code-font">
|
||||
<span class="ConsoleText-plain-syntax"> I've also read Standard Rules by Graham Nelson, which is 27204 words long.</span>
|
||||
</pre>
|
||||
<p class="commentary">are printed to <span class="extract"><span class="ConsoleText-extract-syntax">stdout</span></span> (not <span class="extract"><span class="ConsoleText-extract-syntax">stderr</span></span>), in something of an affectionate nod
|
||||
to TeX's traditional console output, though occasionally I think silence is
|
||||
<p class="commentary">are printed to <span class="extract"><span class="ConsoleText-extract-syntax">stdout</span></span> (not <span class="extract"><span class="ConsoleText-extract-syntax">stderr</span></span>), though occasionally I think silence is
|
||||
golden and that these messages could go. It's a moot point for almost all users,
|
||||
though, because the console output is concealed from them by the Inform
|
||||
application.
|
||||
though, because the console output is concealed from them by the Inform UI
|
||||
applications.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Tell console output about the file</span><span class="named-paragraph-number">1.1</span></span><span class="ConsoleText-comment-syntax"> =</span>
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Tell console output about the file</span><span class="named-paragraph-number">3.1</span></span><span class="ConsoleText-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">wc</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">message</span><span class="plain-syntax"> = </span><span class="string-syntax">"I've also read %S, which is %d words long.\n"</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">primary</span><span class="plain-syntax">) </span><span class="identifier-syntax">message</span><span class="plain-syntax"> = </span><span class="string-syntax">"I've now read %S, which is %d words long.\n"</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">message</span><span class="plain-syntax"> = </span><span class="string-syntax">"I've also read %S, which is %d words long.\n"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TextFromFiles::total_word_count</span><span class="plain-syntax">(</span><span class="identifier-syntax">sf</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TextFromFiles::total_word_count</span><span class="plain-syntax">(</span><span class="identifier-syntax">sf</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDOUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">synopsis</span><span class="plain-syntax">, </span><span class="identifier-syntax">wc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">STREAM_FLUSH</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDOUT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="identifier-syntax">message</span><span class="plain-syntax">, </span><span class="identifier-syntax">synopsis</span><span class="plain-syntax">, </span><span class="identifier-syntax">wc</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="6-st.html#SP1">§1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b></p>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="6-st.html#SP3">§3</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. Bridge to the syntax analyser. </b>Similarly, <a href="index.html" class="internal">supervisor</a> sits on top of the <a href="../syntax-module/index.html" class="internal">syntax</a> module, which forms
|
||||
up the stream of words from the lexer into syntax trees. This too produces
|
||||
potential errors, and these will also convert into copy errors, but now we
|
||||
have a more elegant way to keep track of the copy; <a href="../syntax-module/index.html" class="internal">syntax</a> can be passed
|
||||
a sort of "your ref" pointer to it.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">LEXER_PROBLEM_HANDLER</span><span class="plain-syntax"> </span><a href="6-st.html#SP2" class="function-link"><span class="function-syntax">SourceText::lexer_problem_handler</span></a>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">SYNTAX_PROBLEM_REF_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> </span><span class="comment-syntax"> the "your ref" is a pointer to this type</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">SYNTAX_PROBLEM_HANDLER</span><span class="plain-syntax"> </span><a href="6-st.html#SP4" class="function-link"><span class="function-syntax">SourceText::syntax_problem_handler</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">SourceText::lexer_problem_handler</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">desc</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">word</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">err</span><span class="plain-syntax"> == </span><span class="identifier-syntax">MEMORY_OUT_LEXERERROR</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Errors::fatal</span><span class="plain-syntax">(</span><span class="string-syntax">"Out of memory: unable to create lexer workspace"</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">currently_lexing_into</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax"> = </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_WT</span></a><span class="plain-syntax">(</span><span class="constant-syntax">LEXER_CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">err</span><span class="plain-syntax">, </span><span class="identifier-syntax">word</span><span class="plain-syntax">, </span><span class="identifier-syntax">desc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">currently_lexing_into</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b></p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">COPY_FILE_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b></p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">SYNTAX_PROBLEM_HANDLER</span><span class="plain-syntax"> </span><a href="6-st.html#SP4" class="function-link"><span class="function-syntax">SourceText::syntax_problem_handler</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">SourceText::syntax_problem_handler</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">err_no</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ref</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">inbuild_copy</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">ref</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">SourceText::syntax_problem_handler</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">err_no</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">SYNTAX_PROBLEM_REF_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">k</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">copy_error</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CE</span><span class="plain-syntax"> = </span><a href="2-ce.html#SP2" class="function-link"><span class="function-syntax">CopyErrors::new_N</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SYNTAX_CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">err_no</span><span class="plain-syntax">, </span><span class="identifier-syntax">k</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ce.html#SP3" class="function-link"><span class="function-syntax">CopyErrors::supply_wording</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">CE</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-cps.html#SP5" class="function-link"><span class="function-syntax">Copies::attach_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">CE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>Sentences in the source text are of five categories: dividing sentences,
|
||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>The <a href="../inform7/index.html" class="internal">inform7</a> compiler will eventually make a much more detailed syntax
|
||||
tree, extending the one we make here: but we will basically just break the
|
||||
text into sentences, arrange those under headings, and take action on just a
|
||||
few so-called "structural sentences" which have to be dealt with early on.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><a href="../syntax-module/index.html" class="internal">syntax</a> allows us to create a callback function which will be called
|
||||
whenever a new sentence is made. What we use it for reflects that fact that
|
||||
the vast bulk of the source text is read by <a href="index.html" class="internal">supervisor</a> early in a run of
|
||||
<a href="../inform7/index.html" class="internal">inform7</a>, with just a few sentences ("inventions") added later. The bulk
|
||||
part is parsed collectively, but the later inventions have to be marked as
|
||||
needing to be parsed one by one. So, when <a href="index.html" class="internal">supervisor</a> has definitely
|
||||
finished loading the bulk in, it calls:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">bulk_of_source_loaded</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">SourceText::bulk_of_source_loaded</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">SourceText::bulk_of_source_loaded</span></span>:<br/>Inform7 Skill - <a href="3-is2.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">bulk_of_source_loaded</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>And here is the callback function. It's only ever needed for <a href="../inform7/index.html" class="internal">inform7</a>,
|
||||
not for <a href="../inbuild/index.html" class="internal">inbuild</a>, which isn't in the inventions business.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">SENTENCE_ANNOTATION_FUNCTION</span><span class="plain-syntax"> </span><a href="6-st.html#SP6" class="function-link"><span class="function-syntax">SourceText::annotate_new_sentence</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">SourceText::annotate_new_sentence</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new</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">bulk_of_source_loaded</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::annotate_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">new</span><span class="plain-syntax">, </span><span class="identifier-syntax">sentence_unparsed_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::VPs::seek</span><span class="plain-syntax">(</span><span class="identifier-syntax">new</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b>The next tweak to <a href="../syntax-module/index.html" class="internal">syntax</a> is to give it some node metadata. <a href="../syntax-module/index.html" class="internal">syntax</a>
|
||||
itself places nodes of a small number of basic types into the syntax tree;
|
||||
we want to expand on those. (And the <a href="../core-module/index.html" class="internal">core</a> module will expand on them still
|
||||
further, so this still isn't everything. Note that we give our own version of
|
||||
<span class="extract"><span class="extract-syntax">INVOCATION_LIST_NT</span></span> only if <a href="../inform7/index.html" class="internal">inform7</a> is not the parent: that's because
|
||||
there's a slightly different version in <a href="../core-module/7-ptu.html" class="internal">Parse Tree Usage (in core)</a>.)
|
||||
</p>
|
||||
|
||||
<p class="commentary">The node types we're adding are for the "structural sentences" which we will
|
||||
look for below. (The asterisk notation isn't known to most Inform users: it
|
||||
increases output to the debugging log.)
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">SYNTAX_TREE_METADATA_SETUP</span><span class="plain-syntax"> </span><a href="6-st.html#SP7" class="function-link"><span class="function-syntax">SourceText::node_metadata</span></a>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">BIBLIOGRAPHIC_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> For the initial title sentence</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">ROUTINE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "Instead of taking something, ..."</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">INFORM6CODE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "Include (- ... -)</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">TABLE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "Table 1 - Counties of England"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">EQUATION_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "Equation 2 - Newton's Second Law"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">TRACE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> A sentence consisting of an asterisk and optional quoted text</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">INVOCATION_LIST_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Single invocation of a (possibly compound) phrase</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">list_node_type</span><span class="plain-syntax"> </span><span class="constant-syntax">ROUTINE_NT</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">list_entry_node_type</span><span class="plain-syntax"> </span><span class="constant-syntax">INVOCATION_LIST_NT</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">SourceText::node_metadata</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::md</span><span class="plain-syntax">(</span><span class="constant-syntax">BIBLIOGRAPHIC_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"BIBLIOGRAPHIC_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">L2_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="constant-syntax">ROUTINE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"ROUTINE_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">L2_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="constant-syntax">INFORM6CODE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"INFORM6CODE_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">L2_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="constant-syntax">TABLE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"TABLE_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">L2_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TABBED_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="constant-syntax">EQUATION_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"EQUATION_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">L2_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="constant-syntax">TRACE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"TRACE_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">L2_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">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::md</span><span class="plain-syntax">(</span><span class="constant-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="identifier-syntax">L2_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">endif</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b>Sentences in the source text are of five categories: dividing sentences,
|
||||
which divide up the source into segments; structural sentences, which split
|
||||
the source into different forms (standard text, tables, equations, I6 matter,
|
||||
and so on); nonstructural sentences, which make grammatical definitions and
|
||||
|
@ -212,10 +297,10 @@ source text.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">section</span><span class="plain-syntax"> ... ==> </span><span class="constant-syntax">5</span>
|
||||
|
||||
<span class="plain-syntax"><</span><span class="identifier-syntax">extension</span><span class="plain-syntax">-</span><span class="identifier-syntax">end</span><span class="plain-syntax">-</span><span class="identifier-syntax">marker</span><span class="plain-syntax">-</span><span class="identifier-syntax">sentence</span><span class="plain-syntax">> ::=</span>
|
||||
<span class="plain-syntax"> ... </span><span class="identifier-syntax">begin</span><span class="plain-syntax">/</span><span class="identifier-syntax">begins</span><span class="plain-syntax"> </span><span class="identifier-syntax">here</span><span class="plain-syntax"> | ==> -1; </span><span class="named-paragraph-container code-font"><a href="6-st.html#SP5_1" class="named-paragraph-link"><span class="named-paragraph">Check we can begin an extension here</span><span class="named-paragraph-number">5.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> ... </span><span class="identifier-syntax">end</span><span class="plain-syntax">/</span><span class="identifier-syntax">ends</span><span class="plain-syntax"> </span><span class="identifier-syntax">here</span><span class="plain-syntax"> ==> -2; </span><span class="named-paragraph-container code-font"><a href="6-st.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Check we can end an extension here</span><span class="named-paragraph-number">5.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> ... </span><span class="identifier-syntax">begin</span><span class="plain-syntax">/</span><span class="identifier-syntax">begins</span><span class="plain-syntax"> </span><span class="identifier-syntax">here</span><span class="plain-syntax"> | ==> -1; </span><span class="named-paragraph-container code-font"><a href="6-st.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Check we can begin an extension here</span><span class="named-paragraph-number">8.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> ... </span><span class="identifier-syntax">end</span><span class="plain-syntax">/</span><span class="identifier-syntax">ends</span><span class="plain-syntax"> </span><span class="identifier-syntax">here</span><span class="plain-syntax"> ==> -2; </span><span class="named-paragraph-container code-font"><a href="6-st.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Check we can end an extension here</span><span class="named-paragraph-number">8.2</span></a></span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5_1"></a><b>§5.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check we can begin an extension here</span><span class="named-paragraph-number">5.1</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP8_1"></a><b>§8.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check we can begin an extension here</span><span class="named-paragraph-number">8.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -225,8 +310,8 @@ source text.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax">: </span><span class="constant-syntax">SYNTAX_PROBLEM_HANDLER</span><span class="plain-syntax">(</span><span class="constant-syntax">ExtBeginsAfterEndsHere_SYNERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">sfsm_copy</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="6-st.html#SP5">§5</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP5_2"></a><b>§5.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check we can end an extension here</span><span class="named-paragraph-number">5.2</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="6-st.html#SP8">§8</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP8_2"></a><b>§8.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check we can end an extension here</span><span class="named-paragraph-number">8.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -236,7 +321,7 @@ source text.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax">: </span><span class="constant-syntax">SYNTAX_PROBLEM_HANDLER</span><span class="plain-syntax">(</span><span class="constant-syntax">ExtMultipleEndsHere_SYNERROR</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">sfsm_copy</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="6-st.html#SP5">§5</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="6-st.html#SP8">§8</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP_1"></a><b>§.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Detect a dividing sentence</span><span class="named-paragraph-number">.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
|
@ -255,36 +340,7 @@ source text.
|
|||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is never used.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>Structural sentences are defined as follows. (The asterisk notation isn't
|
||||
known to most Inform users: it increases output to the debugging log.)
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">BIBLIOGRAPHIC_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> For the initial title sentence</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">ROUTINE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "Instead of taking something, ..."</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">INFORM6CODE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "Include (- ... -)</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">TABLE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "Table 1 - Counties of England"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">EQUATION_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> "Equation 2 - Newton's Second Law"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">TRACE_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> A sentence consisting of an asterisk and optional quoted text</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">INVOCATION_LIST_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> Single invocation of a (possibly compound) phrase</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">list_node_type</span><span class="plain-syntax"> </span><span class="constant-syntax">ROUTINE_NT</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">list_entry_node_type</span><span class="plain-syntax"> </span><span class="constant-syntax">INVOCATION_LIST_NT</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </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">SourceText::node_metadata</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::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">BIBLIOGRAPHIC_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"BIBLIOGRAPHIC_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">L2_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">ROUTINE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"ROUTINE_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">L2_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">INFORM6CODE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"INFORM6CODE_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">L2_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_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"TABLE_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">L2_NCAT</span><span class="plain-syntax">, </span><span class="identifier-syntax">TABBED_CONTENT_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">EQUATION_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"EQUATION_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">L2_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">TRACE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"TRACE_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">L2_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">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</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_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="identifier-syntax">L2_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">endif</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b></p>
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"><</span><span class="identifier-syntax">structural</span><span class="plain-syntax">-</span><span class="identifier-syntax">sentence</span><span class="plain-syntax">> ::=</span>
|
||||
|
@ -299,7 +355,7 @@ known to most Inform users: it increases output to the debugging log.)
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">include</span><span class="plain-syntax"> ... </span><span class="identifier-syntax">by</span><span class="plain-syntax"> ... | ==> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">ssnt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">INCLUDE_NT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">include</span><span class="plain-syntax"> (- ... ==> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">ssnt</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFORM6CODE_NT</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>Properly speaking, despite the definition above, language modifying sentences
|
||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b>Properly speaking, despite the definition above, language modifying sentences
|
||||
are nonstructural. So what are they doing here? The answer is that we need to
|
||||
read them early on, because they affect the way that they parse all other
|
||||
sentences. Whereas other nonstructural sentences can wait, these can't.
|
||||
|
@ -310,29 +366,6 @@ sentences. Whereas other nonstructural sentences can wait, these can't.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">include</span><span class="plain-syntax"> (- ### </span><span class="identifier-syntax">in</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">preform</span><span class="plain-syntax"> </span><span class="identifier-syntax">grammar</span><span class="plain-syntax"> | ==> -2; </span><span class="identifier-syntax">ssnt</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFORM6CODE_NT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">use</span><span class="plain-syntax"> ... </span><span class="identifier-syntax">language</span><span class="plain-syntax"> </span><span class="identifier-syntax">element</span><span class="plain-syntax">/</span><span class="identifier-syntax">elements</span><span class="plain-syntax"> ==> -1</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. Sentence division. </b>Sentence division can happen either early in Inform's run, when the vast bulk
|
||||
of the source text is read, or at intermittent periods later when fresh text
|
||||
is generated internally. New sentences need to be parsed as they arise, not
|
||||
saved up to be parsed later, so we will use the following:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">SENTENCE_ANNOTATION_FUNCTION</span><span class="plain-syntax"> </span><a href="6-st.html#SP10" class="function-link"><span class="function-syntax">SourceText::annotate_new_sentence</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="identifier-syntax">text_loaded_from_source</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">SourceText::declare_source_loaded</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">text_loaded_from_source</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">SourceText::annotate_new_sentence</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new</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">text_loaded_from_source</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ParseTree::annotate_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">new</span><span class="plain-syntax">, </span><span class="identifier-syntax">sentence_unparsed_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::VPs::seek</span><span class="plain-syntax">(</span><span class="identifier-syntax">new</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. </b></p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NEW_BEGINEND_HANDLER</span><span class="plain-syntax"> </span><a href="6-st.html#SP11" class="function-link"><span class="function-syntax">SourceText::new_beginend</span></a>
|
||||
|
|
|
@ -333,9 +333,9 @@ as the first.
|
|||
<p class="commentary">Reading is performed by <a href="5-ps2.html#SP27" class="internal">Projects::read_source_text_for</a> and
|
||||
<a href="5-es.html#SP6" class="internal">Extensions::read_source_text_for</a>. For extensions this involves reading
|
||||
only a single file, but for projects it can involve multiple files. Each
|
||||
such is read by a call to <a href="6-st.html#SP1" class="internal">SourceText::read_file</a>, which then sends out
|
||||
such is read by a call to <a href="6-st.html#SP3" class="internal">SourceText::read_file</a>, which then sends out
|
||||
to the <a href="../words-module/index.html" class="internal">words</a> module to break the text file into a stream of words:
|
||||
see <a href="../words-module/3-tff.html" class="internal">Text From Files (in words)</a>. But it is <a href="6-st.html#SP1" class="internal">SourceText::read_file</a> which
|
||||
see <a href="../words-module/3-tff.html" class="internal">Text From Files (in words)</a>. But it is <a href="6-st.html#SP3" class="internal">SourceText::read_file</a> which
|
||||
prints console messages like these:
|
||||
</p>
|
||||
|
||||
|
|
|
@ -325,8 +325,8 @@ names for the node types here, as this is convenient for logging.
|
|||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. </b>The bitmap of node flags begins with:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">DONT_VISIT_NFLAG</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000001</span><span class="plain-syntax"> </span><span class="comment-syntax"> not visited in traverses</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">TABBED_CONTENT_NFLAG</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000002</span><span class="plain-syntax"> </span><span class="comment-syntax"> contains tab-delimited lists</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">DONT_VISIT_NFLAG</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000001</span><span class="plain-syntax"> </span><span class="comment-syntax"> not visited in traverses</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">TABBED_NFLAG</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000002</span><span class="plain-syntax"> </span><span class="comment-syntax"> contains tab-delimited lists</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. </b>Various modules conventionally use this global setting to toggle debugging
|
||||
log output:
|
||||
|
@ -343,29 +343,40 @@ log output:
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_tree_node_types</span><span class="plain-syntax">[</span><span class="identifier-syntax">NO_DEFINED_NT_VALUES</span><span class="plain-syntax">];</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTree::md</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">ParseTree::md</span></span>:<br/><a href="2-pt.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax"> </span><span class="identifier-syntax">ptnt</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-pt.html#SP19" class="function-link"><span class="function-syntax">ParseTree::valid_type</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ptnt</span><span class="plain-syntax">.</span><span class="element-syntax">identity</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"set bad metadata"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_tree_node_types</span><span class="plain-syntax">[</span><span class="identifier-syntax">ptnt</span><span class="plain-syntax">.</span><span class="element-syntax">identity</span><span class="plain-syntax"> - </span><span class="constant-syntax">BASE_OF_ENUMERATED_NTS</span><span class="plain-syntax">] = </span><span class="identifier-syntax">ptnt</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParseTree::md</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">ParseTree::md</span></span>:<br/><a href="2-pt.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">node_type_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">identity</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">node_type_name</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">min_children</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">max_children</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">category</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">node_flags</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-pt.html#SP19" class="function-link"><span class="function-syntax">ParseTree::valid_type</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">identity</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"set bad metadata"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ptnt</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> &(</span><span class="identifier-syntax">parse_tree_node_types</span><span class="plain-syntax">[</span><span class="identifier-syntax">identity</span><span class="plain-syntax"> - </span><span class="constant-syntax">BASE_OF_ENUMERATED_NTS</span><span class="plain-syntax">]);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ptnt</span><span class="plain-syntax">-></span><span class="identifier-syntax">identity</span><span class="plain-syntax"> = </span><span class="identifier-syntax">identity</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ptnt</span><span class="plain-syntax">-></span><span class="identifier-syntax">node_type_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">node_type_name</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ptnt</span><span class="plain-syntax">-></span><span class="identifier-syntax">min_children</span><span class="plain-syntax"> = </span><span class="identifier-syntax">min_children</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ptnt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_children</span><span class="plain-syntax"> = </span><span class="identifier-syntax">max_children</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ptnt</span><span class="plain-syntax">-></span><span class="identifier-syntax">category</span><span class="plain-syntax"> = </span><span class="identifier-syntax">category</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ptnt</span><span class="plain-syntax">-></span><span class="identifier-syntax">node_flags</span><span class="plain-syntax"> = </span><span class="identifier-syntax">node_flags</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. </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">ParseTree::metadata_setup</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">ParseTree::metadata_setup</span></span>:<br/>Syntax Module - <a href="1-sm.html#SP3">§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><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">((</span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">INVALID_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"(INVALID_NT)"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">INVALID_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">((</span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">ROOT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"ROOT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L1_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">DONT_VISIT_NFLAG</span><span class="plain-syntax"> });</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">((</span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">INCLUSION_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"INCLUSION_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L1_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">DONT_VISIT_NFLAG</span><span class="plain-syntax"> });</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">((</span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">HEADING_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"HEADING_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L1_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">((</span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">INCLUDE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"INCLUDE_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">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">((</span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">BEGINHERE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"BEGINHERE_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">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">((</span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">ENDHERE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"ENDHERE_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">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">((</span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">SENTENCE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"SENTENCE_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">((</span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="constant-syntax">AMBIGUITY_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"AMBIGUITY_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L1_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> });</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INVALID_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"(INVALID_NT)"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">INVALID_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">(</span><span class="constant-syntax">ROOT_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"ROOT_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L1_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">DONT_VISIT_NFLAG</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INCLUSION_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"INCLUSION_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L1_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">DONT_VISIT_NFLAG</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">(</span><span class="constant-syntax">HEADING_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"HEADING_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L1_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">(</span><span class="constant-syntax">INCLUDE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"INCLUDE_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">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">(</span><span class="constant-syntax">BEGINHERE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"BEGINHERE_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">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">(</span><span class="constant-syntax">ENDHERE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"ENDHERE_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">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SENTENCE_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"SENTENCE_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L2_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">(</span><span class="constant-syntax">AMBIGUITY_NT</span><span class="plain-syntax">, </span><span class="string-syntax">"AMBIGUITY_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">INFTY</span><span class="plain-syntax">, </span><span class="constant-syntax">L1_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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">UNKNOWN_NT</span>
|
||||
<span class="plain-syntax"> </span><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">((</span><span class="reserved-syntax">parse_tree_node_type</span><span class="plain-syntax">) { </span><span class="identifier-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">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><a href="2-pt.html#SP16" class="function-link"><span class="function-syntax">ParseTree::md</span></a><span class="plain-syntax">(</span><span class="identifier-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">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">endif</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">PARSE_TREE_METADATA_SETUP</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PARSE_TREE_METADATA_SETUP</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">SYNTAX_TREE_METADATA_SETUP</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SYNTAX_TREE_METADATA_SETUP</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">SYNTAX_TREE_FURTHER_METADATA_SETUP</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SYNTAX_TREE_FURTHER_METADATA_SETUP</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -120,7 +120,7 @@ the last sentence having been a rule preamble tells us that the current one
|
|||
is probably a phrase, and so on — and the following is its state.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="plain-syntax">@</span><span class="reserved-syntax">default</span><span class="plain-syntax"> </span><span class="constant-syntax">COPY_FILE_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span>
|
||||
<pre class="definitions code-font"><span class="plain-syntax">@</span><span class="reserved-syntax">default</span><span class="plain-syntax"> </span><span class="constant-syntax">SYNTAX_PROBLEM_REF_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">source_file</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sfsm_source_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
@ -128,7 +128,7 @@ is probably a phrase, and so on — and the following is its state.
|
|||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sfsm_skipping_material_at_level</span><span class="plain-syntax"> = -1;</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sfsm_in_tabbed_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sfsm_main_source_start_wn</span><span class="plain-syntax"> = -1;</span>
|
||||
<span class="constant-syntax">COPY_FILE_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sfsm_copy</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="constant-syntax">SYNTAX_PROBLEM_REF_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sfsm_copy</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sfsm_project</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::set_start_of_source</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wn</span><span class="plain-syntax">) {</span>
|
||||
|
@ -145,17 +145,17 @@ finite state machine.
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::break</span><span class="plain-syntax">(</span><span class="reserved-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-snt.html#SP5" class="function-link"><span class="function-syntax">Sentences::break_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">Sentences::break_into_project_copy</span><span class="plain-syntax">(</span><span class="reserved-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="constant-syntax">COPY_FILE_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::break_into_project_copy</span><span class="plain-syntax">(</span><span class="reserved-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="constant-syntax">SYNTAX_PROBLEM_REF_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">build_project</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-snt.html#SP5" class="function-link"><span class="function-syntax">Sentences::break_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">build_project</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">Sentences::break_into_extension_copy</span><span class="plain-syntax">(</span><span class="reserved-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="constant-syntax">COPY_FILE_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Sentences::break_into_extension_copy</span><span class="plain-syntax">(</span><span class="reserved-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="constant-syntax">SYNTAX_PROBLEM_REF_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">C</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">build_project</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-snt.html#SP5" class="function-link"><span class="function-syntax">Sentences::break_inner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">, </span><span class="identifier-syntax">build_project</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">Sentences::break_inner</span><span class="plain-syntax">(</span><span class="reserved-syntax">parse_node_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">is_extension</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">COPY_FILE_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from_copy</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">build_project</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">SYNTAX_PROBLEM_REF_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from_copy</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">build_project</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (((</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">))) && (</span><span class="identifier-syntax">compare_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">), </span><span class="identifier-syntax">PARBREAK_V</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::trim_first_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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::empty</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
|
@ -224,7 +224,7 @@ since their entries are governed by different lexical and semantic rules.)
|
|||
|
||||
<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">structural</span><span class="plain-syntax">-</span><span class="identifier-syntax">sentence</span><span class="plain-syntax">>(</span><span class="identifier-syntax">Wordings::from</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">sentence_start</span><span class="plain-syntax">))) &&</span>
|
||||
<span class="plain-syntax"> (</span><a href="2-pt.html#SP19" class="function-link"><span class="function-syntax">ParseTree::test_flag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ssnt</span><span class="plain-syntax">, </span><span class="constant-syntax">TABBED_CONTENT_NFLAG</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> (</span><a href="2-pt.html#SP19" class="function-link"><span class="function-syntax">ParseTree::test_flag</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ssnt</span><span class="plain-syntax">, </span><span class="constant-syntax">TABBED_NFLAG</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sfsm_in_tabbed_mode</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">else</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sfsm_in_tabbed_mode</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
|
|
@ -367,15 +367,3 @@ subordinate to any switch; we take it as the name of a copy.
|
|||
void Main::bareword(int id, text_stream *arg, void *state) {
|
||||
Main::add_file_or_path_as_target(arg, TRUE);
|
||||
}
|
||||
|
||||
@h Interface to Words module.
|
||||
We use the mighty Preform natural-language parser only a little when
|
||||
Inbuild runs on its own, but it needs to be told what C type to use when
|
||||
identifying natural languages.
|
||||
|
||||
@d PREFORM_LANGUAGE_TYPE struct inform_language
|
||||
|
||||
@h Interface to Syntax module.
|
||||
Again, we make a fairly light use of |syntax| when Inbuild runs alone.
|
||||
|
||||
@d PARSE_TREE_METADATA_SETUP SourceText::node_metadata
|
||||
|
|
|
@ -64,6 +64,7 @@ int Inform7Skill::inform7_internally(build_skill *skill, build_step *S,
|
|||
if (project == NULL) internal_error("no project");
|
||||
if (S->associated_copy->edition->work->genre == project_bundle_genre)
|
||||
Pathnames::create_in_file_system(Projects::materials_path(project));
|
||||
SourceText::bulk_of_source_loaded();
|
||||
#ifdef CORE_MODULE
|
||||
return Task::carry_out(S);
|
||||
#endif
|
||||
|
|
|
@ -3,14 +3,38 @@
|
|||
Code for reading Inform 7 source text, which Inbuild uses for both extensions
|
||||
and projects.
|
||||
|
||||
@ This short function is a bridge to the lexer, and is used for reading
|
||||
text files of source into either projects or extensions. Note that it
|
||||
doesn't attach the fed text to the copy: the copy may need to contain text
|
||||
from multiple files and indeed from elsewhere.
|
||||
@h Bridge to the Lexer.
|
||||
Firstly, we need to tell the //words// module what type to use when referencing
|
||||
natural languages.
|
||||
|
||||
@d PREFORM_LANGUAGE_TYPE struct inform_language
|
||||
|
||||
@ Lexical errors -- overly long words, half-open quotations, and such -- are
|
||||
converted into copy errors and attached to the copy currently being worked on.
|
||||
The following callback function performs that service.
|
||||
|
||||
//words// has no convenient way to keep track of what copy we're working on,
|
||||
so we will simply store it in a global variable.
|
||||
|
||||
@d LEXER_PROBLEM_HANDLER SourceText::lexer_problem_handler
|
||||
|
||||
=
|
||||
inbuild_copy *currently_lexing_into = NULL;
|
||||
void SourceText::lexer_problem_handler(int err, text_stream *desc, wchar_t *word) {
|
||||
if (err == MEMORY_OUT_LEXERERROR)
|
||||
Errors::fatal("Out of memory: unable to create lexer workspace");
|
||||
if (currently_lexing_into) {
|
||||
copy_error *CE = CopyErrors::new_WT(LEXER_CE, err, word, desc);
|
||||
Copies::attach_error(currently_lexing_into, CE);
|
||||
}
|
||||
}
|
||||
|
||||
@ This next function is our bridge to the lexer (see //words: Text From Files//),
|
||||
and is used for reading text files of source into either projects or extensions.
|
||||
Note that it doesn't attach the fed text to the copy: the caller must do that,
|
||||
perhaps combining our feed with that of others.
|
||||
|
||||
=
|
||||
source_file *SourceText::read_file(inbuild_copy *C, filename *F, text_stream *synopsis,
|
||||
int documentation_only, int primary) {
|
||||
currently_lexing_into = C;
|
||||
|
@ -39,52 +63,108 @@ source_file *SourceText::read_file(inbuild_copy *C, filename *F, text_stream *sy
|
|||
= (text as ConsoleText)
|
||||
I've also read Standard Rules by Graham Nelson, which is 27204 words long.
|
||||
=
|
||||
are printed to |stdout| (not |stderr|), in something of an affectionate nod
|
||||
to TeX's traditional console output, though occasionally I think silence is
|
||||
are printed to |stdout| (not |stderr|), though occasionally I think silence is
|
||||
golden and that these messages could go. It's a moot point for almost all users,
|
||||
though, because the console output is concealed from them by the Inform
|
||||
application.
|
||||
though, because the console output is concealed from them by the Inform UI
|
||||
applications.
|
||||
|
||||
@<Tell console output about the file@> =
|
||||
int wc;
|
||||
char *message;
|
||||
char *message = "I've also read %S, which is %d words long.\n";
|
||||
if (primary) message = "I've now read %S, which is %d words long.\n";
|
||||
else message = "I've also read %S, which is %d words long.\n";
|
||||
wc = TextFromFiles::total_word_count(sf);
|
||||
int wc = TextFromFiles::total_word_count(sf);
|
||||
WRITE_TO(STDOUT, message, synopsis, wc);
|
||||
STREAM_FLUSH(STDOUT);
|
||||
LOG(message, synopsis, wc);
|
||||
|
||||
@
|
||||
|
||||
@d LEXER_PROBLEM_HANDLER SourceText::lexer_problem_handler
|
||||
|
||||
=
|
||||
void SourceText::lexer_problem_handler(int err, text_stream *desc, wchar_t *word) {
|
||||
if (err == MEMORY_OUT_LEXERERROR)
|
||||
Errors::fatal("Out of memory: unable to create lexer workspace");
|
||||
if (currently_lexing_into) {
|
||||
copy_error *CE = CopyErrors::new_WT(LEXER_CE, err, word, desc);
|
||||
Copies::attach_error(currently_lexing_into, CE);
|
||||
}
|
||||
}
|
||||
|
||||
@
|
||||
|
||||
@d COPY_FILE_TYPE inbuild_copy
|
||||
|
||||
@
|
||||
@h Bridge to the syntax analyser.
|
||||
Similarly, //supervisor// sits on top of the //syntax// module, which forms
|
||||
up the stream of words from the lexer into syntax trees. This too produces
|
||||
potential errors, and these will also convert into copy errors, but now we
|
||||
have a more elegant way to keep track of the copy; //syntax// can be passed
|
||||
a sort of "your ref" pointer to it.
|
||||
|
||||
@d SYNTAX_PROBLEM_REF_TYPE inbuild_copy /* the "your ref" is a pointer to this type */
|
||||
@d SYNTAX_PROBLEM_HANDLER SourceText::syntax_problem_handler
|
||||
|
||||
=
|
||||
void SourceText::syntax_problem_handler(int err_no, wording W, void *ref, int k) {
|
||||
inbuild_copy *C = (inbuild_copy *) ref;
|
||||
void SourceText::syntax_problem_handler(int err_no, wording W,
|
||||
SYNTAX_PROBLEM_REF_TYPE *C, int k) {
|
||||
copy_error *CE = CopyErrors::new_N(SYNTAX_CE, err_no, k);
|
||||
CopyErrors::supply_wording(CE, W);
|
||||
Copies::attach_error(C, CE);
|
||||
}
|
||||
|
||||
@ The //inform7// compiler will eventually make a much more detailed syntax
|
||||
tree, extending the one we make here: but we will basically just break the
|
||||
text into sentences, arrange those under headings, and take action on just a
|
||||
few so-called "structural sentences" which have to be dealt with early on.
|
||||
|
||||
//syntax// allows us to create a callback function which will be called
|
||||
whenever a new sentence is made. What we use it for reflects that fact that
|
||||
the vast bulk of the source text is read by //supervisor// early in a run of
|
||||
//inform7//, with just a few sentences ("inventions") added later. The bulk
|
||||
part is parsed collectively, but the later inventions have to be marked as
|
||||
needing to be parsed one by one. So, when //supervisor// has definitely
|
||||
finished loading the bulk in, it calls:
|
||||
|
||||
=
|
||||
int bulk_of_source_loaded = FALSE;
|
||||
void SourceText::bulk_of_source_loaded(void) {
|
||||
bulk_of_source_loaded = TRUE;
|
||||
}
|
||||
|
||||
@ And here is the callback function. It's only ever needed for //inform7//,
|
||||
not for //inbuild//, which isn't in the inventions business.
|
||||
|
||||
@d SENTENCE_ANNOTATION_FUNCTION SourceText::annotate_new_sentence
|
||||
|
||||
=
|
||||
void SourceText::annotate_new_sentence(parse_node *new) {
|
||||
if (bulk_of_source_loaded) {
|
||||
ParseTree::annotate_int(new, sentence_unparsed_ANNOT, FALSE);
|
||||
#ifdef CORE_MODULE
|
||||
Sentences::VPs::seek(new);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ The next tweak to //syntax// is to give it some node metadata. //syntax//
|
||||
itself places nodes of a small number of basic types into the syntax tree;
|
||||
we want to expand on those. (And the //core// module will expand on them still
|
||||
further, so this still isn't everything. Note that we give our own version of
|
||||
|INVOCATION_LIST_NT| only if //inform7// is not the parent: that's because
|
||||
there's a slightly different version in //core: Parse Tree Usage//.)
|
||||
|
||||
The node types we're adding are for the "structural sentences" which we will
|
||||
look for below. (The asterisk notation isn't known to most Inform users: it
|
||||
increases output to the debugging log.)
|
||||
|
||||
@d SYNTAX_TREE_METADATA_SETUP SourceText::node_metadata
|
||||
|
||||
@e BIBLIOGRAPHIC_NT /* For the initial title sentence */
|
||||
@e ROUTINE_NT /* "Instead of taking something, ..." */
|
||||
@e INFORM6CODE_NT /* "Include (- ... -) */
|
||||
@e TABLE_NT /* "Table 1 - Counties of England" */
|
||||
@e EQUATION_NT /* "Equation 2 - Newton's Second Law" */
|
||||
@e TRACE_NT /* A sentence consisting of an asterisk and optional quoted text */
|
||||
@e INVOCATION_LIST_NT /* Single invocation of a (possibly compound) phrase */
|
||||
|
||||
@d list_node_type ROUTINE_NT
|
||||
@d list_entry_node_type INVOCATION_LIST_NT
|
||||
|
||||
=
|
||||
void SourceText::node_metadata(void) {
|
||||
ParseTree::md(BIBLIOGRAPHIC_NT, "BIBLIOGRAPHIC_NT", 0, 0, L2_NCAT, 0);
|
||||
ParseTree::md(ROUTINE_NT, "ROUTINE_NT", 0, INFTY, L2_NCAT, 0);
|
||||
ParseTree::md(INFORM6CODE_NT, "INFORM6CODE_NT", 0, 0, L2_NCAT, 0);
|
||||
ParseTree::md(TABLE_NT, "TABLE_NT", 0, 0, L2_NCAT, TABBED_NFLAG);
|
||||
ParseTree::md(EQUATION_NT, "EQUATION_NT", 0, 0, L2_NCAT, 0);
|
||||
ParseTree::md(TRACE_NT, "TRACE_NT", 0, 0, L2_NCAT, 0);
|
||||
#ifndef CORE_MODULE
|
||||
ParseTree::md(INVOCATION_LIST_NT, "INVOCATION_LIST_NT", 0, INFTY, L2_NCAT, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ Sentences in the source text are of five categories: dividing sentences,
|
||||
which divide up the source into segments; structural sentences, which split
|
||||
the source into different forms (standard text, tables, equations, I6 matter,
|
||||
|
@ -153,33 +233,6 @@ source text.
|
|||
}
|
||||
}
|
||||
|
||||
@ Structural sentences are defined as follows. (The asterisk notation isn't
|
||||
known to most Inform users: it increases output to the debugging log.)
|
||||
|
||||
@e BIBLIOGRAPHIC_NT /* For the initial title sentence */
|
||||
@e ROUTINE_NT /* "Instead of taking something, ..." */
|
||||
@e INFORM6CODE_NT /* "Include (- ... -) */
|
||||
@e TABLE_NT /* "Table 1 - Counties of England" */
|
||||
@e EQUATION_NT /* "Equation 2 - Newton's Second Law" */
|
||||
@e TRACE_NT /* A sentence consisting of an asterisk and optional quoted text */
|
||||
@e INVOCATION_LIST_NT /* Single invocation of a (possibly compound) phrase */
|
||||
|
||||
@d list_node_type ROUTINE_NT
|
||||
@d list_entry_node_type INVOCATION_LIST_NT
|
||||
|
||||
@ =
|
||||
void SourceText::node_metadata(void) {
|
||||
ParseTree::md((parse_tree_node_type) { BIBLIOGRAPHIC_NT, "BIBLIOGRAPHIC_NT", 0, 0, L2_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { ROUTINE_NT, "ROUTINE_NT", 0, INFTY, L2_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { INFORM6CODE_NT, "INFORM6CODE_NT", 0, 0, L2_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { TABLE_NT, "TABLE_NT", 0, 0, L2_NCAT, TABBED_CONTENT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { EQUATION_NT, "EQUATION_NT", 0, 0, L2_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { TRACE_NT, "TRACE_NT", 0, 0, L2_NCAT, 0 });
|
||||
#ifndef CORE_MODULE
|
||||
ParseTree::md((parse_tree_node_type) { INVOCATION_LIST_NT, "INVOCATION_LIST_NT", 0, INFTY, L2_NCAT, 0 });
|
||||
#endif
|
||||
}
|
||||
|
||||
@
|
||||
|
||||
=
|
||||
|
@ -205,29 +258,6 @@ sentences. Whereas other nonstructural sentences can wait, these can't.
|
|||
include (- ### in the preform grammar | ==> -2; ssnt = INFORM6CODE_NT;
|
||||
use ... language element/elements ==> -1
|
||||
|
||||
@h Sentence division.
|
||||
Sentence division can happen either early in Inform's run, when the vast bulk
|
||||
of the source text is read, or at intermittent periods later when fresh text
|
||||
is generated internally. New sentences need to be parsed as they arise, not
|
||||
saved up to be parsed later, so we will use the following:
|
||||
|
||||
@d SENTENCE_ANNOTATION_FUNCTION SourceText::annotate_new_sentence
|
||||
|
||||
=
|
||||
int text_loaded_from_source = FALSE;
|
||||
void SourceText::declare_source_loaded(void) {
|
||||
text_loaded_from_source = TRUE;
|
||||
}
|
||||
|
||||
void SourceText::annotate_new_sentence(parse_node *new) {
|
||||
if (text_loaded_from_source) {
|
||||
ParseTree::annotate_int(new, sentence_unparsed_ANNOT, FALSE);
|
||||
#ifdef CORE_MODULE
|
||||
Sentences::VPs::seek(new);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@
|
||||
|
||||
@d NEW_BEGINEND_HANDLER SourceText::new_beginend
|
||||
|
|
|
@ -113,7 +113,6 @@ most of these worker functions are in the |core| module, some are not.
|
|||
BENCH(Sentences::VPs::traverse)
|
||||
BENCH(Sentences::Rearrangement::tidy_up_ofs_and_froms)
|
||||
BENCH(Sentences::RuleSubtrees::register_recently_lexed_phrases)
|
||||
BENCH(SourceText::declare_source_loaded)
|
||||
BENCH(Kinds::Knowledge::include_templates_for_kinds)
|
||||
|
||||
Task::advance_stage_to(SEMANTIC_II_CSEQ, I"Semantic analysis II", -1);
|
||||
|
|
|
@ -101,57 +101,55 @@ also makes it easier for us to manipulate the results.
|
|||
|
||||
@
|
||||
|
||||
@d PARSE_TREE_METADATA_SETUP ParseTreeUsage::md
|
||||
@d SYNTAX_TREE_FURTHER_METADATA_SETUP ParseTreeUsage::md
|
||||
|
||||
=
|
||||
void ParseTreeUsage::md(void) {
|
||||
/* first, the structural nodes: */
|
||||
SourceText::node_metadata();
|
||||
ParseTree::md(ALLOWED_NT, "ALLOWED_NT", 1, 1, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::md(EVERY_NT, "EVERY_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::md(COMMON_NOUN_NT, "COMMON_NOUN_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::md(ACTION_NT, "ACTION_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::md(ADJECTIVE_NT, "ADJECTIVE_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::md(PROPERTYCALLED_NT, "PROPERTYCALLED_NT", 2, 2, L3_NCAT, 0);
|
||||
ParseTree::md(TOKEN_NT, "TOKEN_NT", 0, INFTY, L3_NCAT, 0);
|
||||
ParseTree::md(X_OF_Y_NT, "X_OF_Y_NT", 2, 2, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::md(CREATED_NT, "CREATED_NT", 0, 0, L3_NCAT, ASSERT_NFLAG);
|
||||
|
||||
ParseTree::md((parse_tree_node_type) { ALLOWED_NT, "ALLOWED_NT", 1, 1, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { EVERY_NT, "EVERY_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { COMMON_NOUN_NT, "COMMON_NOUN_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { ACTION_NT, "ACTION_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { ADJECTIVE_NT, "ADJECTIVE_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { PROPERTYCALLED_NT, "PROPERTYCALLED_NT", 2, 2, L3_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { TOKEN_NT, "TOKEN_NT", 0, INFTY, L3_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { X_OF_Y_NT, "X_OF_Y_NT", 2, 2, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { CREATED_NT, "CREATED_NT", 0, 0, L3_NCAT, ASSERT_NFLAG });
|
||||
|
||||
ParseTree::md((parse_tree_node_type) { CODE_BLOCK_NT, "CODE_BLOCK_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { INVOCATION_LIST_NT, "INVOCATION_LIST_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { INVOCATION_LIST_SAY_NT, "INVOCATION_LIST_SAY_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { INVOCATION_NT, "INVOCATION_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { VOID_CONTEXT_NT, "VOID_CONTEXT_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { RVALUE_CONTEXT_NT, "RVALUE_CONTEXT_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { LVALUE_CONTEXT_NT, "LVALUE_CONTEXT_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { LVALUE_TR_CONTEXT_NT, "LVALUE_TR_CONTEXT_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { SPECIFIC_RVALUE_CONTEXT_NT, "SPECIFIC_RVALUE_CONTEXT_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { MATCHING_RVALUE_CONTEXT_NT, "MATCHING_RVALUE_CONTEXT_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { NEW_LOCAL_CONTEXT_NT, "NEW_LOCAL_CONTEXT_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { LVALUE_LOCAL_CONTEXT_NT, "LVALUE_LOCAL_CONTEXT_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { CONDITION_CONTEXT_NT, "CONDITION_CONTEXT_NT", 0, INFTY, L4_NCAT, 0 });
|
||||
ParseTree::md(CODE_BLOCK_NT, "CODE_BLOCK_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(INVOCATION_LIST_NT, "INVOCATION_LIST_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(INVOCATION_LIST_SAY_NT, "INVOCATION_LIST_SAY_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(INVOCATION_NT, "INVOCATION_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(VOID_CONTEXT_NT, "VOID_CONTEXT_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(RVALUE_CONTEXT_NT, "RVALUE_CONTEXT_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(LVALUE_CONTEXT_NT, "LVALUE_CONTEXT_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(LVALUE_TR_CONTEXT_NT, "LVALUE_TR_CONTEXT_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(SPECIFIC_RVALUE_CONTEXT_NT, "SPECIFIC_RVALUE_CONTEXT_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(MATCHING_RVALUE_CONTEXT_NT, "MATCHING_RVALUE_CONTEXT_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(NEW_LOCAL_CONTEXT_NT, "NEW_LOCAL_CONTEXT_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(LVALUE_LOCAL_CONTEXT_NT, "LVALUE_LOCAL_CONTEXT_NT", 0, INFTY, L4_NCAT, 0);
|
||||
ParseTree::md(CONDITION_CONTEXT_NT, "CONDITION_CONTEXT_NT", 0, INFTY, L4_NCAT, 0);
|
||||
|
||||
/* now the specification nodes: */
|
||||
|
||||
ParseTree::md((parse_tree_node_type) { UNKNOWN_NT, "UNKNOWN_NT", 0, 0, UNKNOWN_NCAT, 0 });
|
||||
ParseTree::md(UNKNOWN_NT, "UNKNOWN_NT", 0, 0, UNKNOWN_NCAT, 0);
|
||||
|
||||
ParseTree::md((parse_tree_node_type) { CONSTANT_NT, "CONSTANT_NT", 0, 0, RVALUE_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { PHRASE_TO_DECIDE_VALUE_NT, "PHRASE_TO_DECIDE_VALUE_NT", 1, 1, RVALUE_NCAT, PHRASAL_NFLAG });
|
||||
ParseTree::md(CONSTANT_NT, "CONSTANT_NT", 0, 0, RVALUE_NCAT, 0);
|
||||
ParseTree::md(PHRASE_TO_DECIDE_VALUE_NT, "PHRASE_TO_DECIDE_VALUE_NT", 1, 1, RVALUE_NCAT, PHRASAL_NFLAG);
|
||||
|
||||
ParseTree::md((parse_tree_node_type) { LOCAL_VARIABLE_NT, "LOCAL_VARIABLE_NT", 0, 0, LVALUE_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { NONLOCAL_VARIABLE_NT, "NONLOCAL_VARIABLE_NT", 0, 0, LVALUE_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { PROPERTY_VALUE_NT, "PROPERTY_VALUE_NT", 2, 2, LVALUE_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { TABLE_ENTRY_NT, "TABLE_ENTRY_NT", 1, 4, LVALUE_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { LIST_ENTRY_NT, "LIST_ENTRY_NT", 2, 2, LVALUE_NCAT, 0 });
|
||||
ParseTree::md(LOCAL_VARIABLE_NT, "LOCAL_VARIABLE_NT", 0, 0, LVALUE_NCAT, 0);
|
||||
ParseTree::md(NONLOCAL_VARIABLE_NT, "NONLOCAL_VARIABLE_NT", 0, 0, LVALUE_NCAT, 0);
|
||||
ParseTree::md(PROPERTY_VALUE_NT, "PROPERTY_VALUE_NT", 2, 2, LVALUE_NCAT, 0);
|
||||
ParseTree::md(TABLE_ENTRY_NT, "TABLE_ENTRY_NT", 1, 4, LVALUE_NCAT, 0);
|
||||
ParseTree::md(LIST_ENTRY_NT, "LIST_ENTRY_NT", 2, 2, LVALUE_NCAT, 0);
|
||||
|
||||
ParseTree::md((parse_tree_node_type) { LOGICAL_NOT_NT, "LOGICAL_NOT_NT", 1, 1, COND_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { LOGICAL_TENSE_NT, "LOGICAL_TENSE_NT", 1, 1, COND_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { LOGICAL_AND_NT, "LOGICAL_AND_NT", 2, 2, COND_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { LOGICAL_OR_NT, "LOGICAL_OR_NT", 2, 2, COND_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { TEST_PROPOSITION_NT, "TEST_PROPOSITION_NT", 0, 0, COND_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { TEST_PHRASE_OPTION_NT, "TEST_PHRASE_OPTION_NT", 0, 0, COND_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { TEST_VALUE_NT, "TEST_VALUE_NT", 1, 1, COND_NCAT, 0 });
|
||||
ParseTree::md(LOGICAL_NOT_NT, "LOGICAL_NOT_NT", 1, 1, COND_NCAT, 0);
|
||||
ParseTree::md(LOGICAL_TENSE_NT, "LOGICAL_TENSE_NT", 1, 1, COND_NCAT, 0);
|
||||
ParseTree::md(LOGICAL_AND_NT, "LOGICAL_AND_NT", 2, 2, COND_NCAT, 0);
|
||||
ParseTree::md(LOGICAL_OR_NT, "LOGICAL_OR_NT", 2, 2, COND_NCAT, 0);
|
||||
ParseTree::md(TEST_PROPOSITION_NT, "TEST_PROPOSITION_NT", 0, 0, COND_NCAT, 0);
|
||||
ParseTree::md(TEST_PHRASE_OPTION_NT, "TEST_PHRASE_OPTION_NT", 0, 0, COND_NCAT, 0);
|
||||
ParseTree::md(TEST_VALUE_NT, "TEST_VALUE_NT", 1, 1, COND_NCAT, 0);
|
||||
}
|
||||
|
||||
@
|
||||
|
|
|
@ -22,14 +22,14 @@ To construct standard verb-phrase nodes in the parse tree.
|
|||
|
||||
=
|
||||
void Diagrams::setup(void) {
|
||||
ParseTree::md((parse_tree_node_type) { AVERB_NT, "AVERB_NT", 0, 0, L3_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { RELATIONSHIP_NT, "RELATIONSHIP_NT", 0, 2, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { CALLED_NT, "CALLED_NT", 2, 2, L3_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { WITH_NT, "WITH_NT", 2, 2, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { AND_NT, "AND_NT", 2, 2, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { KIND_NT, "KIND_NT", 0, 1, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { PROPER_NOUN_NT, "PROPER_NOUN_NT", 0, 0, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { PROPERTY_LIST_NT, "PROPERTY_LIST_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG });
|
||||
ParseTree::md(AVERB_NT, "AVERB_NT", 0, 0, L3_NCAT, 0);
|
||||
ParseTree::md(RELATIONSHIP_NT, "RELATIONSHIP_NT", 0, 2, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::md(CALLED_NT, "CALLED_NT", 2, 2, L3_NCAT, 0);
|
||||
ParseTree::md(WITH_NT, "WITH_NT", 2, 2, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::md(AND_NT, "AND_NT", 2, 2, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::md(KIND_NT, "KIND_NT", 0, 1, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::md(PROPER_NOUN_NT, "PROPER_NOUN_NT", 0, 0, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::md(PROPERTY_LIST_NT, "PROPERTY_LIST_NT", 0, INFTY, L3_NCAT, ASSERT_NFLAG);
|
||||
ParseTree::allow_annotation(AVERB_NT, verbal_certainty_ANNOT);
|
||||
ParseTree::allow_annotation(AVERB_NT, sentence_is_existential_ANNOT);
|
||||
ParseTree::allow_annotation(AVERB_NT, possessive_verb_ANNOT);
|
||||
|
|
|
@ -58,7 +58,7 @@ int my_first_verb = TRUE;
|
|||
|
||||
void Unit::start_diagrams(void) {
|
||||
trace_sentences = TRUE;
|
||||
ParseTree::md((parse_tree_node_type) { UNKNOWN_NT, "UNKNOWN_NT", 0, INFTY, L2_NCAT, 0 });
|
||||
ParseTree::md(UNKNOWN_NT, "UNKNOWN_NT", 0, INFTY, L2_NCAT, 0);
|
||||
}
|
||||
|
||||
parse_node_tree *syntax_tree = NULL;
|
||||
|
|
|
@ -222,8 +222,8 @@ typedef struct parse_tree_node_type {
|
|||
|
||||
@ The bitmap of node flags begins with:
|
||||
|
||||
@d DONT_VISIT_NFLAG 0x00000001 /* not visited in traverses */
|
||||
@d TABBED_CONTENT_NFLAG 0x00000002 /* contains tab-delimited lists */
|
||||
@d DONT_VISIT_NFLAG 0x00000001 /* not visited in traverses */
|
||||
@d TABBED_NFLAG 0x00000002 /* contains tab-delimited lists */
|
||||
|
||||
@ Various modules conventionally use this global setting to toggle debugging
|
||||
log output:
|
||||
|
@ -239,27 +239,38 @@ Note that the sequence here must exactly match the enumeration above.
|
|||
=
|
||||
parse_tree_node_type parse_tree_node_types[NO_DEFINED_NT_VALUES];
|
||||
|
||||
void ParseTree::md(parse_tree_node_type ptnt) {
|
||||
if (ParseTree::valid_type(ptnt.identity) == FALSE) internal_error("set bad metadata");
|
||||
parse_tree_node_types[ptnt.identity - BASE_OF_ENUMERATED_NTS] = ptnt;
|
||||
void ParseTree::md(node_type_t identity, char *node_type_name, int min_children,
|
||||
int max_children, int category, int node_flags) {
|
||||
if (ParseTree::valid_type(identity) == FALSE) internal_error("set bad metadata");
|
||||
parse_tree_node_type *ptnt =
|
||||
&(parse_tree_node_types[identity - BASE_OF_ENUMERATED_NTS]);
|
||||
ptnt->identity = identity;
|
||||
ptnt->node_type_name = node_type_name;
|
||||
ptnt->min_children = min_children;
|
||||
ptnt->max_children = max_children;
|
||||
ptnt->category = category;
|
||||
ptnt->node_flags = node_flags;
|
||||
}
|
||||
|
||||
@ =
|
||||
void ParseTree::metadata_setup(void) {
|
||||
ParseTree::md((parse_tree_node_type) { INVALID_NT, "(INVALID_NT)", 0, INFTY, INVALID_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { ROOT_NT, "ROOT_NT", 0, INFTY, L1_NCAT, DONT_VISIT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { INCLUSION_NT, "INCLUSION_NT", 0, INFTY, L1_NCAT, DONT_VISIT_NFLAG });
|
||||
ParseTree::md((parse_tree_node_type) { HEADING_NT, "HEADING_NT", 0, INFTY, L1_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { INCLUDE_NT, "INCLUDE_NT", 0, 0, L2_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { BEGINHERE_NT, "BEGINHERE_NT", 0, 0, L2_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { ENDHERE_NT, "ENDHERE_NT", 0, 0, L2_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { SENTENCE_NT, "SENTENCE_NT", 0, INFTY, L2_NCAT, 0 });
|
||||
ParseTree::md((parse_tree_node_type) { AMBIGUITY_NT, "AMBIGUITY_NT", 0, INFTY, L1_NCAT, 0 });
|
||||
ParseTree::md(INVALID_NT, "(INVALID_NT)", 0, INFTY, INVALID_NCAT, 0);
|
||||
ParseTree::md(ROOT_NT, "ROOT_NT", 0, INFTY, L1_NCAT, DONT_VISIT_NFLAG);
|
||||
ParseTree::md(INCLUSION_NT, "INCLUSION_NT", 0, INFTY, L1_NCAT, DONT_VISIT_NFLAG);
|
||||
ParseTree::md(HEADING_NT, "HEADING_NT", 0, INFTY, L1_NCAT, 0);
|
||||
ParseTree::md(INCLUDE_NT, "INCLUDE_NT", 0, 0, L2_NCAT, 0);
|
||||
ParseTree::md(BEGINHERE_NT, "BEGINHERE_NT", 0, 0, L2_NCAT, 0);
|
||||
ParseTree::md(ENDHERE_NT, "ENDHERE_NT", 0, 0, L2_NCAT, 0);
|
||||
ParseTree::md(SENTENCE_NT, "SENTENCE_NT", 0, INFTY, L2_NCAT, 0);
|
||||
ParseTree::md(AMBIGUITY_NT, "AMBIGUITY_NT", 0, INFTY, L1_NCAT, 0);
|
||||
#ifdef UNKNOWN_NT
|
||||
ParseTree::md((parse_tree_node_type) { UNKNOWN_NT, "UNKNOWN_NT", 0, INFTY, L3_NCAT, 0 });
|
||||
ParseTree::md(UNKNOWN_NT, "UNKNOWN_NT", 0, INFTY, L3_NCAT, 0);
|
||||
#endif
|
||||
#ifdef PARSE_TREE_METADATA_SETUP
|
||||
PARSE_TREE_METADATA_SETUP();
|
||||
#ifdef SYNTAX_TREE_METADATA_SETUP
|
||||
SYNTAX_TREE_METADATA_SETUP();
|
||||
#endif
|
||||
#ifdef SYNTAX_TREE_FURTHER_METADATA_SETUP
|
||||
SYNTAX_TREE_FURTHER_METADATA_SETUP();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ So we carry out the sentence breaking with a simple finite state machine --
|
|||
the last sentence having been a rule preamble tells us that the current one
|
||||
is probably a phrase, and so on -- and the following is its state.
|
||||
|
||||
@default COPY_FILE_TYPE void
|
||||
@default SYNTAX_PROBLEM_REF_TYPE void
|
||||
|
||||
=
|
||||
source_file *sfsm_source_file = NULL;
|
||||
|
@ -56,7 +56,7 @@ int sfsm_inside_rule_mode = FALSE;
|
|||
int sfsm_skipping_material_at_level = -1;
|
||||
int sfsm_in_tabbed_mode = FALSE;
|
||||
int sfsm_main_source_start_wn = -1;
|
||||
COPY_FILE_TYPE *sfsm_copy = NULL;
|
||||
SYNTAX_PROBLEM_REF_TYPE *sfsm_copy = NULL;
|
||||
void *sfsm_project = NULL;
|
||||
|
||||
void Sentences::set_start_of_source(int wn) {
|
||||
|
@ -72,17 +72,17 @@ finite state machine.
|
|||
void Sentences::break(parse_node_tree *T, wording W) {
|
||||
Sentences::break_inner(T, W, FALSE, NULL, NULL);
|
||||
}
|
||||
void Sentences::break_into_project_copy(parse_node_tree *T, wording W, COPY_FILE_TYPE *C,
|
||||
void Sentences::break_into_project_copy(parse_node_tree *T, wording W, SYNTAX_PROBLEM_REF_TYPE *C,
|
||||
void *build_project) {
|
||||
Sentences::break_inner(T, W, FALSE, C, build_project);
|
||||
}
|
||||
void Sentences::break_into_extension_copy(parse_node_tree *T, wording W, COPY_FILE_TYPE *C,
|
||||
void Sentences::break_into_extension_copy(parse_node_tree *T, wording W, SYNTAX_PROBLEM_REF_TYPE *C,
|
||||
void *build_project) {
|
||||
Sentences::break_inner(T, W, TRUE, C, build_project);
|
||||
}
|
||||
|
||||
void Sentences::break_inner(parse_node_tree *T, wording W, int is_extension,
|
||||
COPY_FILE_TYPE *from_copy, void *build_project) {
|
||||
SYNTAX_PROBLEM_REF_TYPE *from_copy, void *build_project) {
|
||||
while (((Wordings::nonempty(W))) && (compare_word(Wordings::first_wn(W), PARBREAK_V)))
|
||||
W = Wordings::trim_first_word(W);
|
||||
if (Wordings::empty(W)) return;
|
||||
|
@ -142,7 +142,7 @@ since their entries are governed by different lexical and semantic rules.)
|
|||
|
||||
@<Go into table sentence mode if necessary@> =
|
||||
if ((<structural-sentence>(Wordings::from(W, sentence_start))) &&
|
||||
(ParseTree::test_flag(ssnt, TABBED_CONTENT_NFLAG)))
|
||||
(ParseTree::test_flag(ssnt, TABBED_NFLAG)))
|
||||
sfsm_in_tabbed_mode = TRUE;
|
||||
else
|
||||
sfsm_in_tabbed_mode = FALSE;
|
||||
|
|
Loading…
Reference in a new issue