mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 16:44:21 +03:00
Factored out Instrumentation for Preform
This commit is contained in:
parent
31d1467869
commit
a26271906d
|
@ -227,7 +227,7 @@ gargantuan debugging logs if enabled.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">problem_count</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">problem_count</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">TemplateReader::report_unacted_upon_interventions</span><span class="plain-syntax">();</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">TemplateReader::report_unacted_upon_interventions</span><span class="plain-syntax">();</span>
|
||||||
<span class="plain-syntax"> </span><span class="comment-syntax"> Memory::log_statistics();</span>
|
<span class="plain-syntax"> </span><span class="comment-syntax"> Memory::log_statistics();</span>
|
||||||
<span class="plain-syntax"> </span><span class="comment-syntax"> LoadPreform::log();</span>
|
<span class="plain-syntax"> </span><span class="comment-syntax"> Instrumentation::log();</span>
|
||||||
<span class="plain-syntax"> </span><span class="comment-syntax"> Index::DocReferences::log_statistics();</span>
|
<span class="plain-syntax"> </span><span class="comment-syntax"> Index::DocReferences::log_statistics();</span>
|
||||||
<span class="plain-syntax"> </span><span class="comment-syntax"> NewVerbs::log_all();</span>
|
<span class="plain-syntax"> </span><span class="comment-syntax"> NewVerbs::log_all();</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
|
|
|
@ -4293,7 +4293,7 @@ at run time.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Beginning Dashperiment:\n"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Beginning Dashperiment:\n"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">test_tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">last_alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">test_tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">last_alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="function-syntax"><s-value-uncached>-></span><span class="identifier-syntax">multiplicitous</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="function-syntax"><s-value-uncached>-></span><span class="identifier-syntax">multiplicitous</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="function-syntax"><s-value-uncached>-></span><span class="identifier-syntax">watched</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="function-syntax"><s-value-uncached>-></span><span class="identifier-syntax">ins</span><span class="plain-syntax">.</span><span class="identifier-syntax">watched</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</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">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="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="plain-syntax"> </span><span class="identifier-syntax">wording</span><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="plain-syntax"> </span><span class="identifier-syntax">wording</span><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>
|
||||||
|
@ -4311,7 +4311,7 @@ at run time.
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Failed to parse: %W\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Failed to parse: %W\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="function-syntax"><s-value-uncached>-></span><span class="identifier-syntax">multiplicitous</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="function-syntax"><s-value-uncached>-></span><span class="identifier-syntax">multiplicitous</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="function-syntax"><s-value-uncached>-></span><span class="identifier-syntax">watched</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="function-syntax"><s-value-uncached>-></span><span class="identifier-syntax">ins</span><span class="plain-syntax">.</span><span class="identifier-syntax">watched</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> > </span><span class="constant-syntax">1</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">n</span><span class="plain-syntax"> > </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">holder</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">AMBIGUITY_NT</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">holder</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">AMBIGUITY_NT</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">holder</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">test_tree</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">holder</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">test_tree</span><span class="plain-syntax">;</span>
|
||||||
|
|
|
@ -170,7 +170,7 @@ this because we need access to it very quickly when parsing text substitutions.)
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</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="identifier-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</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">pr</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"The production at fault is:\n"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"The production at fault is:\n"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LoadPreform::log_production</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">); </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Instrumentation::log_production</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">); </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(1, </span><span class="string-syntax">"(no nonterminal)"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(1, </span><span class="string-syntax">"(no nonterminal)"</span><span class="plain-syntax">);</span>
|
||||||
|
@ -189,7 +189,7 @@ this because we need access to it very quickly when parsing text substitutions.)
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(3, &(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">match_number</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(3, &(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">match_number</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LoadPreform::write_ptoken</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Instrumentation::write_ptoken</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</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">pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_stream</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_stream</span><span class="plain-syntax">(4, </span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">);</span>
|
||||||
|
|
|
@ -342,7 +342,7 @@ and we also understand "only R" and "everything" and "nothing".
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">RQW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><debugging-log-request></span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">RQW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><debugging-log-request></span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ns.html#SP13_1_1" class="named-paragraph-link"><span class="named-paragraph">See if this is a simple request for debugging information</span><span class="named-paragraph-number">13.1.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="7-ns.html#SP13_1_1" class="named-paragraph-link"><span class="named-paragraph">See if this is a simple request for debugging information</span><span class="named-paragraph-number">13.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><<r>></span><span class="plain-syntax"> & </span><span class="constant-syntax">PREFORM_DLR</span><span class="plain-syntax">) { </span><span class="identifier-syntax">Nonterminals::watch</span><span class="plain-syntax">(</span><span class="function-syntax"><<rp>></span><span class="plain-syntax">, </span><span class="identifier-syntax">new_state</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><<r>></span><span class="plain-syntax"> & </span><span class="constant-syntax">PREFORM_DLR</span><span class="plain-syntax">) { </span><span class="identifier-syntax">Instrumentation::watch</span><span class="plain-syntax">(</span><span class="function-syntax"><<rp>></span><span class="plain-syntax">, </span><span class="identifier-syntax">new_state</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="7-ns.html#SP13">§13</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="7-ns.html#SP13">§13</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP13_1_1"></a><b>§13.1.1. </b>Otherwise a request must be the name of a single debugging aspect.
|
<p class="commentary firstcommentary"><a id="SP13_1_1"></a><b>§13.1.1. </b>Otherwise a request must be the name of a single debugging aspect.
|
||||||
|
|
|
@ -244,7 +244,7 @@ single avinue.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">first</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</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">first</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">second</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</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">second</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">second</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</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">second</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">second</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">)) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LoadPreform::log_production</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</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">Instrumentation::log_production</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="3-vc.html#SP12" class="function-link"><span class="function-syntax">Conjugation::trie_definition_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="string-syntax">"trie line with more than 2 words"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="3-vc.html#SP12" class="function-link"><span class="function-syntax">Conjugation::trie_definition_error</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="string-syntax">"trie line with more than 2 words"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-np.html#SP7_1_1" class="named-paragraph-link"><span class="named-paragraph">Consider the one- or two-token production in this nonterminal</span><span class="named-paragraph-number">7.1.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-np.html#SP7_1_1" class="named-paragraph-link"><span class="named-paragraph">Consider the one- or two-token production in this nonterminal</span><span class="named-paragraph-number">7.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
|
|
@ -70,7 +70,7 @@ The following does the suffixing:
|
||||||
<span class="Preform-function-syntax"><comparative-construction></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><comparative-construction></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">than</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">than</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b></p>
|
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
|
|
@ -936,7 +936,7 @@ to some routine of her own, gazumping this one.
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">INFLECTIONS_ERROR_HANDLER</span>
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">INFLECTIONS_ERROR_HANDLER</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</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">pr</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"The production at fault is:\n"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"The production at fault is:\n"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LoadPreform::log_production</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">); </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Instrumentation::log_production</span><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">); </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</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">ERM</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">ERM</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">nt</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
|
||||||
|
@ -951,7 +951,7 @@ to some routine of her own, gazumping this one.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</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">pr</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">TEMP</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">TEMP</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LoadPreform::write_ptoken</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Instrumentation::write_ptoken</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</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">pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">, </span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</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">ERM</span><span class="plain-syntax">, </span><span class="string-syntax">"line %d ('%S'): "</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">match_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEMP</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">ERM</span><span class="plain-syntax">, </span><span class="string-syntax">"line %d ('%S'): "</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">match_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">);</span>
|
||||||
|
@ -1074,7 +1074,7 @@ as markers in verb conjugations.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-pp.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresscurrent">vc</li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="4-ei.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-pp.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ai.html">ai</a></li><li class="progresssection"><a href="3-dcl.html">dcl</a></li><li class="progresssection"><a href="3-plr.html">plr</a></li><li class="progresssection"><a href="3-ga.html">ga</a></li><li class="progresssection"><a href="3-pp.html">pp</a></li><li class="progresscurrent">vc</li><li class="progresschapter"><a href="4-ei.html">4</a></li><li class="progressnext"><a href="4-ei.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
|
@ -144,7 +144,7 @@ dictionary and the "Official Scrabble Wordlist".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-indef-b></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-indef-b></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-indef-c></span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-indef-c></span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>Exceptions to the exceptions:
|
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>Exceptions to the exceptions:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ dictionary and the "Official Scrabble Wordlist".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">urial*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">urial*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">uvarovite*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> a rare emerald-green garnet, Ca3Cr2(SiO4)3</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">uvarovite*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> a rare emerald-green garnet, Ca3Cr2(SiO4)3</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>Then the exceptions:
|
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>Then the exceptions:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ dictionary and the "Official Scrabble Wordlist".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">uva*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">uva*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">uvu*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">uvu*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>And finally the basic rules:
|
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>And finally the basic rules:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -287,7 +287,7 @@ dictionary and the "Official Scrabble Wordlist".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">yt*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> e.g., Ytterbium, Yttrium</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">yt*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> e.g., Ytterbium, Yttrium</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">yw*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">yw*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. Plural inflections. </b>The following takes a single word, assumes it to be a noun which meaningfully
|
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. Plural inflections. </b>The following takes a single word, assumes it to be a noun which meaningfully
|
||||||
has a plural, and modifies it to the plural form. ("Golf" is a noun which
|
has a plural, and modifies it to the plural form. ("Golf" is a noun which
|
||||||
doesn't sensibly have a plural; the algorithm here would return "golves".)
|
doesn't sensibly have a plural; the algorithm here would return "golves".)
|
||||||
|
@ -333,7 +333,7 @@ of a sibilant plus "o" suffix to include an "e", so that Conway produces
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-plural-regular-inflections></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-plural-regular-inflections></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-plural-append-s></span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-plural-append-s></span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b>See Conway's table A.2. The following nouns, mostly names of kinds of animal,
|
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b>See Conway's table A.2. The following nouns, mostly names of kinds of animal,
|
||||||
have the same plural as singular form: for example, chamois, salmon, goldfish.
|
have the same plural as singular form: for example, chamois, salmon, goldfish.
|
||||||
</p>
|
</p>
|
||||||
|
@ -391,7 +391,7 @@ have the same plural as singular form: for example, chamois, salmon, goldfish.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">elk</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">elk</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">pincers</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">pincers</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>We may as well pluralise pronouns while we're at it.
|
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>We may as well pluralise pronouns while we're at it.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -420,7 +420,7 @@ have the same plural as singular form: for example, chamois, salmon, goldfish.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">themself</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">themselves</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">themself</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">themselves</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">oneself</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">oneselves</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">oneself</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">oneselves</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b>We now reach Conway step 4. These are irregular plurals mostly coming
|
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b>We now reach Conway step 4. These are irregular plurals mostly coming
|
||||||
from archaisms.
|
from archaisms.
|
||||||
</p>
|
</p>
|
||||||
|
@ -441,7 +441,7 @@ from archaisms.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">soliloquy</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">soliloquies</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">soliloquy</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">soliloquies</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">trilby</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">trilbys</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">trilby</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">trilbys</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. </b>Step 5. Now we reach a batch of irregular but fairly general inflected
|
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. </b>Step 5. Now we reach a batch of irregular but fairly general inflected
|
||||||
endings; for example, protozoon to protozoa, or metamorphosis to metamorphoses.
|
endings; for example, protozoon to protozoa, or metamorphosis to metamorphoses.
|
||||||
Note that we differ from Conway in pluralizing blouse as blouses, not blice.
|
Note that we differ from Conway in pluralizing blouse as blouses, not blice.
|
||||||
|
@ -461,7 +461,7 @@ Note that we differ from Conway in pluralizing blouse as blouses, not blice.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*sis</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3ses</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*sis</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3ses</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*xis</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3xes</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*xis</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3xes</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. </b>Step 6. These are inflections from Latin and Greek which have survived
|
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. </b>Step 6. These are inflections from Latin and Greek which have survived
|
||||||
into modern English:
|
into modern English:
|
||||||
</p>
|
</p>
|
||||||
|
@ -493,7 +493,7 @@ into modern English:
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">erratum</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">errata</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">erratum</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">errata</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ovum</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ova</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ovum</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">ova</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. </b>Step 11a. (We're not implementing Conway's steps in sequence: see below.)
|
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. </b>Step 11a. (We're not implementing Conway's steps in sequence: see below.)
|
||||||
These -o endings are mostly loan words from Romance languages whose original
|
These -o endings are mostly loan words from Romance languages whose original
|
||||||
inflections are assimilated.
|
inflections are assimilated.
|
||||||
|
@ -534,7 +534,7 @@ inflections are assimilated.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">stylo</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">stylos</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">stylo</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">stylos</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">tempo</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">tempos</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">tempo</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">tempos</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. </b>Conway steps 8 to 11. These are regular inflections depending only on
|
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. </b>Conway steps 8 to 11. These are regular inflections depending only on
|
||||||
word endings.
|
word endings.
|
||||||
</p>
|
</p>
|
||||||
|
@ -620,7 +620,7 @@ word endings.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*yo</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1oes</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*yo</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1oes</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*zo</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0s</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*zo</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0s</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. </b>Lastly, the fallback if none of the above cases match: append an -s, of
|
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. </b>Lastly, the fallback if none of the above cases match: append an -s, of
|
||||||
course.
|
course.
|
||||||
</p>
|
</p>
|
||||||
|
@ -629,7 +629,7 @@ course.
|
||||||
<span class="Preform-function-syntax"><en-trie-plural-append-s></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><en-trie-plural-append-s></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0s</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> Step 13</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0s</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> Step 13</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. Verb inflections. </b>"Le verbe est l'âme d'une langue" (attributed to Georges Duhamel). And the
|
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. Verb inflections. </b>"Le verbe est l'âme d'une langue" (attributed to Georges Duhamel). And the
|
||||||
care of the soul is, of course, complicated. For example, the source text can
|
care of the soul is, of course, complicated. For example, the source text can
|
||||||
say something like this:
|
say something like this:
|
||||||
|
@ -787,7 +787,7 @@ Inform assertion sentences, but are needed for text substitutions.)
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">won't</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><informal-negated-modal-conjugation></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">won't</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><informal-negated-modal-conjugation></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><regular-verb-conjugation></span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><regular-verb-conjugation></span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP21"></a><b>§21. </b>We will start with two auxiliary verbs, that is, verbs used to construct
|
<p class="commentary firstcommentary"><a id="SP21"></a><b>§21. </b>We will start with two auxiliary verbs, that is, verbs used to construct
|
||||||
forms of other verbs. The first is "to have"; as we'll see, English uses
|
forms of other verbs. The first is "to have"; as we'll see, English uses
|
||||||
this to construct perfect tenses:
|
this to construct perfect tenses:
|
||||||
|
@ -850,7 +850,7 @@ for "[have]".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><not-instance-of-verb-at-run-time></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><not-instance-of-verb-at-run-time></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><to-have-tabulation></span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><to-have-tabulation></span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP22"></a><b>§22. </b>Tabulations give instructions for how to construct 120 possible versions
|
<p class="commentary firstcommentary"><a id="SP22"></a><b>§22. </b>Tabulations give instructions for how to construct 120 possible versions
|
||||||
of the verb. These are divided up first into active and passive "moods":
|
of the verb. These are divided up first into active and passive "moods":
|
||||||
</p>
|
</p>
|
||||||
|
@ -989,7 +989,7 @@ are used for the six persons.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a2+</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">had</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a2+</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">had</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a2-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">had</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a2-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">had</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP23"></a><b>§23. </b>And this is an example of splitting into cases for the six persons,
|
<p class="commentary firstcommentary"><a id="SP23"></a><b>§23. </b>And this is an example of splitting into cases for the six persons,
|
||||||
1PS, 2PS, 3PS, 1PP, 2PP, 3PP. I have, you have, he has, we have, you have,
|
1PS, 2PS, 3PS, 1PP, 2PP, 3PP. I have, you have, he has, we have, you have,
|
||||||
they have. (This is more excitingly varied in other languages, of course.)
|
they have. (This is more excitingly varied in other languages, of course.)
|
||||||
|
@ -999,7 +999,7 @@ they have. (This is more excitingly varied in other languages, of course.)
|
||||||
<span class="Preform-function-syntax"><to-have-present></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><to-have-present></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">has</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">has</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP24"></a><b>§24. </b>Next we have "to do", which is like "to have" in being fairly regular,
|
<p class="commentary firstcommentary"><a id="SP24"></a><b>§24. </b>Next we have "to do", which is like "to have" in being fairly regular,
|
||||||
as irregular verbs go. But we treat this as a special case because, again,
|
as irregular verbs go. But we treat this as a special case because, again,
|
||||||
we're going to need as an auxiliary verb when forming negatives ("Peter
|
we're going to need as an auxiliary verb when forming negatives ("Peter
|
||||||
|
@ -1065,7 +1065,7 @@ may have to revisit this for languages other than English.)
|
||||||
<span class="Preform-function-syntax"><to-do-present></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><to-do-present></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">does</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">does</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP25"></a><b>§25. </b>Regular English verbs, then, look like so. We will, for the first time,
|
<p class="commentary firstcommentary"><a id="SP25"></a><b>§25. </b>Regular English verbs, then, look like so. We will, for the first time,
|
||||||
make heavy use of our numbered verb forms: for example, for the verb
|
make heavy use of our numbered verb forms: for example, for the verb
|
||||||
"to take", they would be "take" (1), "taking" (2), "taken" (3),
|
"to take", they would be "take" (1), "taking" (2), "taken" (3),
|
||||||
|
@ -1097,7 +1097,7 @@ to "grabs onto", "grabbing onto" and so on.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">6</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-past></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">6</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-past></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><regular-verb-tabulation></span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><regular-verb-tabulation></span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP26"></a><b>§26. </b>Here we see our auxiliary verbs in use. For the negated present tense,
|
<p class="commentary firstcommentary"><a id="SP26"></a><b>§26. </b>Here we see our auxiliary verbs in use. For the negated present tense,
|
||||||
"Peter does not carry the ball"; for the negated past tense, "Peter did
|
"Peter does not carry the ball"; for the negated past tense, "Peter did
|
||||||
not carry the ball" — in both cases, this is "to do" plus the infinitive
|
not carry the ball" — in both cases, this is "to do" plus the infinitive
|
||||||
|
@ -1121,7 +1121,7 @@ a bequest".)
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">will</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">will</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">p*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">p*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP27"></a><b>§27. </b>This looks odd, but what it says is that the present tense of a regular
|
<p class="commentary firstcommentary"><a id="SP27"></a><b>§27. </b>This looks odd, but what it says is that the present tense of a regular
|
||||||
English verb is always the infinitive (I take, you take, we take, and so on)
|
English verb is always the infinitive (I take, you take, we take, and so on)
|
||||||
except for third person singular (he takes), which is different. (It's usually
|
except for third person singular (he takes), which is different. (It's usually
|
||||||
|
@ -1133,7 +1133,7 @@ as we'll see.)
|
||||||
<span class="Preform-function-syntax"><regular-verb-present></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><regular-verb-present></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">5</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">5</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP28"></a><b>§28. </b>Now for our most irregular verb: "to be".
|
<p class="commentary firstcommentary"><a id="SP28"></a><b>§28. </b>Now for our most irregular verb: "to be".
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -1159,7 +1159,7 @@ as we'll see.)
|
||||||
<span class="Preform-function-syntax"><to-be-past></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><to-be-past></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">was</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">was</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">was</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">was</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">were</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP29"></a><b>§29. </b>Except for tense formation (Peter "will" take the ball), the most common
|
<p class="commentary firstcommentary"><a id="SP29"></a><b>§29. </b>Except for tense formation (Peter "will" take the ball), the most common
|
||||||
modal verb which can be used in Inform source text is "can". For example:
|
modal verb which can be used in Inform source text is "can". For example:
|
||||||
</p>
|
</p>
|
||||||
|
@ -1198,7 +1198,7 @@ to elide, so we always pronounce it that way and the spelling now follows.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5+</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">will</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5+</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">will</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">will</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">will</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP30"></a><b>§30. </b>Inform has only a simple understanding of what "can" means, so it doesn't
|
<p class="commentary firstcommentary"><a id="SP30"></a><b>§30. </b>Inform has only a simple understanding of what "can" means, so it doesn't
|
||||||
allow the source text to use "can" in combination with arbitrary verbs.
|
allow the source text to use "can" in combination with arbitrary verbs.
|
||||||
Instead, each legal combination has to be declared explicitly:
|
Instead, each legal combination has to be declared explicitly:
|
||||||
|
@ -1241,7 +1241,7 @@ Jane".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">p</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">p</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP31"></a><b>§31. </b>The following handles the other English modal verbs ("might", "should"
|
<p class="commentary firstcommentary"><a id="SP31"></a><b>§31. </b>The following handles the other English modal verbs ("might", "should"
|
||||||
and so on) surprisingly easily. The notation <span class="extract"><span class="Preform-extract-syntax">++1</span></span> means that the verb
|
and so on) surprisingly easily. The notation <span class="extract"><span class="Preform-extract-syntax">++1</span></span> means that the verb
|
||||||
being modified should appear in verb form 1, and so on: for example,
|
being modified should appear in verb form 1, and so on: for example,
|
||||||
|
@ -1266,7 +1266,7 @@ being modified should appear in verb form 1, and so on: for example,
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5+</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5+</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5-</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP32"></a><b>§32. </b>That completes our basic kit of verbs nicely. What's left is used only
|
<p class="commentary firstcommentary"><a id="SP32"></a><b>§32. </b>That completes our basic kit of verbs nicely. What's left is used only
|
||||||
for generating text at run-time — for printing adaptive messages, that is;
|
for generating text at run-time — for printing adaptive messages, that is;
|
||||||
none of these oddball exceptional cases is otherwise used as a verb in
|
none of these oddball exceptional cases is otherwise used as a verb in
|
||||||
|
@ -1328,7 +1328,7 @@ dialects — and we aren't even going to try to cope with that.
|
||||||
<span class="Preform-function-syntax"><contracted-to-be-past-negated></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><contracted-to-be-past-negated></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">wasn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">wasn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">wasn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">wasn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">weren't</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP33"></a><b>§33. </b>And now "to 've", the contracted form of "to have". A subtle dialect
|
<p class="commentary firstcommentary"><a id="SP33"></a><b>§33. </b>And now "to 've", the contracted form of "to have". A subtle dialect
|
||||||
point here concerns the negated present tense:
|
point here concerns the negated present tense:
|
||||||
</p>
|
</p>
|
||||||
|
@ -1379,7 +1379,7 @@ go with those.
|
||||||
<span class="Preform-function-syntax"><contracted-to-have-present></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><contracted-to-have-present></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'s</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'s</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">'ve</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP34"></a><b>§34. </b>Now we come to "aren't", a negated form of "to be", but where the
|
<p class="commentary firstcommentary"><a id="SP34"></a><b>§34. </b>Now we come to "aren't", a negated form of "to be", but where the
|
||||||
contraction occurs between the verb and the "not" rather than between
|
contraction occurs between the verb and the "not" rather than between
|
||||||
the subject and the verb.
|
the subject and the verb.
|
||||||
|
@ -1417,7 +1417,7 @@ that option here.)
|
||||||
<span class="Preform-function-syntax"><arent-perfect></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><arent-perfect></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">hasn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">hasn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP35"></a><b>§35. </b>And finally: the contracted informal negatives of various modal verbs which
|
<p class="commentary firstcommentary"><a id="SP35"></a><b>§35. </b>And finally: the contracted informal negatives of various modal verbs which
|
||||||
it's useful to be able to print, like the "can't" in
|
it's useful to be able to print, like the "can't" in
|
||||||
</p>
|
</p>
|
||||||
|
@ -1450,7 +1450,7 @@ of "modal" itself arguable. This is the best we can do.
|
||||||
<span class="Preform-function-syntax"><informal-negated-modal-present></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><informal-negated-modal-present></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">7</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">7</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP36"></a><b>§36. </b>Together with special rules for can't, which is inevitably slightly different:
|
<p class="commentary firstcommentary"><a id="SP36"></a><b>§36. </b>Together with special rules for can't, which is inevitably slightly different:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -1468,7 +1468,7 @@ of "modal" itself arguable. This is the best we can do.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a4+</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">t2</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a4+</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">t2</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">haven't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">)</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">been</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5+</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">won't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a5+</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">won't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">be</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">able</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">++1</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP37"></a><b>§37. </b>We have special tries just to list the forms of the cases we will
|
<p class="commentary firstcommentary"><a id="SP37"></a><b>§37. </b>We have special tries just to list the forms of the cases we will
|
||||||
deal with. Tries can do fancy things (see below), but here they act just as
|
deal with. Tries can do fancy things (see below), but here they act just as
|
||||||
a look-up table: for example, "won't" has present "won't", past
|
a look-up table: for example, "won't" has present "won't", past
|
||||||
|
@ -1516,7 +1516,7 @@ signs can be used if we absolutely have to introduce spaces.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">couldn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">couldn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">couldn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">couldn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">shouldn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">shouldn't</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">shouldn't</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">shouldn't</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP38"></a><b>§38. </b>That's the end of the conjugations — the easy part, it turns out. We now
|
<p class="commentary firstcommentary"><a id="SP38"></a><b>§38. </b>That's the end of the conjugations — the easy part, it turns out. We now
|
||||||
need to create the four tries to make verb forms out of the infinitive:
|
need to create the four tries to make verb forms out of the infinitive:
|
||||||
the present participle, the past participle, the third-person singular
|
the present participle, the past participle, the third-person singular
|
||||||
|
@ -1574,7 +1574,7 @@ version of Greenbaum's rules above.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-regular-b-present-participle></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-regular-b-present-participle></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-regular-c-present-participle></span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-trie-regular-c-present-participle></span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP40"></a><b>§40. </b>First of all there are some irregular cases — some for the usual suspects,
|
<p class="commentary firstcommentary"><a id="SP40"></a><b>§40. </b>First of all there are some irregular cases — some for the usual suspects,
|
||||||
but others for oddball verbs where English breaks the normal phonetic rules
|
but others for oddball verbs where English breaks the normal phonetic rules
|
||||||
for the sake of clarity. For example, the participle of "singe" ought to
|
for the sake of clarity. For example, the participle of "singe" ought to
|
||||||
|
@ -1770,7 +1770,7 @@ from the act of producing a song.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">stye</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">stye</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">undersaye</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1ing</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">undersaye</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1ing</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP41"></a><b>§41. </b>Now some exceptional forms where consonant doubling doesn't occur:
|
<p class="commentary firstcommentary"><a id="SP41"></a><b>§41. </b>Now some exceptional forms where consonant doubling doesn't occur:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -1791,7 +1791,7 @@ from the act of producing a song.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*alog</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> dialoging, cataloging</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*alog</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> dialoging, cataloging</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*daub</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> daubing, bedaubing</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*daub</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> daubing, bedaubing</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP42"></a><b>§42. </b>And now rules for consonant doubling:
|
<p class="commentary firstcommentary"><a id="SP42"></a><b>§42. </b>And now rules for consonant doubling:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -1843,7 +1843,7 @@ from the act of producing a song.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*<ei>v</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ving</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*<ei>v</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ving</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*iz</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0zing</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*iz</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0zing</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP43"></a><b>§43. </b>Finally:
|
<p class="commentary firstcommentary"><a id="SP43"></a><b>§43. </b>Finally:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -1857,7 +1857,7 @@ from the act of producing a song.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*e</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*e</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ing</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ing</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP44"></a><b>§44. </b>Next the past participle. As noted above, for most verbs this is the same
|
<p class="commentary firstcommentary"><a id="SP44"></a><b>§44. </b>Next the past participle. As noted above, for most verbs this is the same
|
||||||
as the past (e.g., he agreed and it was agreed); but there's a list of
|
as the past (e.g., he agreed and it was agreed); but there's a list of
|
||||||
exceptions for Anglo-Saxon survivals (e.g., he chose and it was chosen).
|
exceptions for Anglo-Saxon survivals (e.g., he chose and it was chosen).
|
||||||
|
@ -2024,7 +2024,7 @@ removed.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">wring</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">wrung</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">wring</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">wrung</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">write</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">written</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">write</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">written</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP45"></a><b>§45. </b>That's the mandatory participles sorted out; so now we move on to the two
|
<p class="commentary firstcommentary"><a id="SP45"></a><b>§45. </b>That's the mandatory participles sorted out; so now we move on to the two
|
||||||
additional verb forms used by English. First, the present form: a curiosity
|
additional verb forms used by English. First, the present form: a curiosity
|
||||||
of English is that this is almost always formed as if it were the plural of the
|
of English is that this is almost always formed as if it were the plural of the
|
||||||
|
@ -2042,7 +2042,7 @@ of exceptions to this.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">has</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">have</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">has</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">does</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">do</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">does</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP46"></a><b>§46. </b>Second, the past. This is harder. Once again we have a catalogue of
|
<p class="commentary firstcommentary"><a id="SP46"></a><b>§46. </b>Second, the past. This is harder. Once again we have a catalogue of
|
||||||
Anglo-Saxon past forms (e.g., he chose, not he chooses); and after those
|
Anglo-Saxon past forms (e.g., he chose, not he chooses); and after those
|
||||||
are out of the way, the rules are the same as for the present participle,
|
are out of the way, the rules are the same as for the present participle,
|
||||||
|
@ -2675,7 +2675,7 @@ when to double the consonant, which again depends on stress.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*y</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1ied</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> shied, tried</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*y</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1ied</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> shied, tried</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ed</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ed</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP47"></a><b>§47. Present to past participles. </b>Sentences like
|
<p class="commentary firstcommentary"><a id="SP47"></a><b>§47. Present to past participles. </b>Sentences like
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -3184,7 +3184,7 @@ cases followed by two general rules.
|
||||||
<span class="Preform-function-syntax"><en-trie-pasturise-regular></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><en-trie-pasturise-regular></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3ed</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> e.g., "smashing" to "smashed"</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*ing</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3ed</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> e.g., "smashing" to "smashed"</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP48"></a><b>§48. Adjective agreements. </b>English doesn't inflect adjectives at all (let's not argue about "blond"
|
<p class="commentary firstcommentary"><a id="SP48"></a><b>§48. Adjective agreements. </b>English doesn't inflect adjectives at all (let's not argue about "blond"
|
||||||
and "blonde"), so the following are just stubs.
|
and "blonde"), so the following are just stubs.
|
||||||
</p>
|
</p>
|
||||||
|
@ -3205,7 +3205,7 @@ and "blonde"), so the following are just stubs.
|
||||||
<span class="Preform-function-syntax"><adjective-to-feminine-plural></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><adjective-to-feminine-plural></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP49"></a><b>§49. </b>Grading of adjectives is more interesting. These spelling rules are taken
|
<p class="commentary firstcommentary"><a id="SP49"></a><b>§49. </b>Grading of adjectives is more interesting. These spelling rules are taken
|
||||||
from the Oxford English Grammar at 4.24, "Gradability and comparison".
|
from the Oxford English Grammar at 4.24, "Gradability and comparison".
|
||||||
Something we can't easily implement is that a final vowel plus consonant
|
Something we can't easily implement is that a final vowel plus consonant
|
||||||
|
@ -3237,7 +3237,7 @@ rare in English adjectives.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*<aeiou><bcdfghkmlnprstvxyz></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0+est</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*<aeiou><bcdfghkmlnprstvxyz></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0+est</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0est</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0est</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP50"></a><b>§50. </b>To the best of my knowledge there's no technical term for "the noun which
|
<p class="commentary firstcommentary"><a id="SP50"></a><b>§50. </b>To the best of my knowledge there's no technical term for "the noun which
|
||||||
is formed from an adjective to refer to the quality it measures", so the
|
is formed from an adjective to refer to the quality it measures", so the
|
||||||
Inform source code calls this the "quiddity". English permits several
|
Inform source code calls this the "quiddity". English permits several
|
||||||
|
@ -3257,7 +3257,7 @@ sometimes less elegant, but never means the wrong thing.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*<bcdfghkmlnprstvwxyz>y</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1iness</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> e.g. "happy" to "happiness"</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*<bcdfghkmlnprstvwxyz>y</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1iness</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> e.g. "happy" to "happiness"</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ness</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0ness</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP51"></a><b>§51. </b>English has almost no noun cases at all, with the only exceptions being
|
<p class="commentary firstcommentary"><a id="SP51"></a><b>§51. </b>English has almost no noun cases at all, with the only exceptions being
|
||||||
Anglo-Saxon pronouns (thus we distinguish "they" and "them" as nominative
|
Anglo-Saxon pronouns (thus we distinguish "they" and "them" as nominative
|
||||||
and accusative, for example); and pronouns we handle separately in any
|
and accusative, for example); and pronouns we handle separately in any
|
||||||
|
@ -3271,7 +3271,7 @@ case. We won't bother to distinguish gender:
|
||||||
<span class="Preform-function-syntax"><noun-declension></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><noun-declension></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-noun-declension-group></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-noun-declension-tables></span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">*</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-noun-declension-group></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-noun-declension-tables></span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP52"></a><b>§52. </b>And the sorting into groups sorts everything into "group 1", the only group:
|
<p class="commentary firstcommentary"><a id="SP52"></a><b>§52. </b>And the sorting into groups sorts everything into "group 1", the only group:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -3282,7 +3282,7 @@ case. We won't bother to distinguish gender:
|
||||||
<span class="Preform-function-syntax"><en-noun-declension-tables></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><en-noun-declension-tables></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-noun-declension-uninflected></span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><en-noun-declension-uninflected></span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP53"></a><b>§53. </b>And in this single group, nominative and accusative forms are identical
|
<p class="commentary firstcommentary"><a id="SP53"></a><b>§53. </b>And in this single group, nominative and accusative forms are identical
|
||||||
to the stem in both singular and plural.
|
to the stem in both singular and plural.
|
||||||
</p>
|
</p>
|
||||||
|
@ -3292,7 +3292,7 @@ to the stem in both singular and plural.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP54"></a><b>§54. </b>English articles only inflect slightly, to show indefinite plurals; they
|
<p class="commentary firstcommentary"><a id="SP54"></a><b>§54. </b>English articles only inflect slightly, to show indefinite plurals; they
|
||||||
don't distinguish nominative from accusative.
|
don't distinguish nominative from accusative.
|
||||||
</p>
|
</p>
|
||||||
|
@ -3307,7 +3307,7 @@ don't distinguish nominative from accusative.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">the</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-vc.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">ei</li><li class="progressnextoff">❯</li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-vc.html">❮</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-ld.html">2</a></li><li class="progresschapter"><a href="3-ai.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">ei</li><li class="progressnextoff">❯</li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
|
@ -87,7 +87,7 @@ adjectives, verbs and nouns, it can't make new pronouns.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">it/him/her</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 1 </span><span class="Preform-comment-syntax"> singular</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">it/him/her</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 1 </span><span class="Preform-comment-syntax"> singular</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">them</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">them</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. Possessives. </b>Inform uses these not only for parsing but also to inflect text. For example,
|
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. Possessives. </b>Inform uses these not only for parsing but also to inflect text. For example,
|
||||||
if every person is given a nose, the player will see it as "my nose" not
|
if every person is given a nose, the player will see it as "my nose" not
|
||||||
"your nose". Inform handles such inflections by converting a pronoun in
|
"your nose". Inform handles such inflections by converting a pronoun in
|
||||||
|
@ -108,7 +108,7 @@ person to second person).
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">its/his/her</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 1 </span><span class="Preform-comment-syntax"> singular</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">its/his/her</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 1 </span><span class="Preform-comment-syntax"> singular</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">their</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">their</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 2 </span><span class="Preform-comment-syntax"> plural</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. Articles. </b></p>
|
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. Articles. </b></p>
|
||||||
|
|
||||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="Preform-constant-syntax">DEF_ART</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> the definite article</span>
|
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="Preform-constant-syntax">DEF_ART</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> the definite article</span>
|
||||||
|
@ -121,7 +121,7 @@ person to second person).
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><indefinite-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><indefinite-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><definite-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><definite-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>The articles need to be single words, and the following two productions
|
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>The articles need to be single words, and the following two productions
|
||||||
have an unusual convention: they are required to have production numbers
|
have an unusual convention: they are required to have production numbers
|
||||||
which encode both the implied grammatical number and gender.
|
which encode both the implied grammatical number and gender.
|
||||||
|
@ -142,7 +142,7 @@ number in any case, so we end up with something quite dull:
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">/a/</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a/an</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">/a/</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a/an</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">/d/</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">some</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">/d/</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">some</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>These are useful for stripping optional articles from text:
|
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>These are useful for stripping optional articles from text:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -158,7 +158,7 @@ number in any case, so we end up with something quite dull:
|
||||||
<span class="Preform-function-syntax"><compulsory-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><compulsory-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><article></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b></p>
|
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -194,14 +194,14 @@ is never treated as a participle.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. Negation. </b></p>
|
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. Negation. </b></p>
|
||||||
|
|
||||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||||
<span class="Preform-function-syntax"><negated-clause></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><negated-clause></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">not</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. Marking for Preform efficiency. </b></p>
|
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. Marking for Preform efficiency. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
|
|
@ -185,7 +185,7 @@ Inform.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b>These are registered as excerpt meanings with the <span class="extract"><span class="Preform-extract-syntax">ADJECTIVE_MC</span></span> meaning
|
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b>These are registered as excerpt meanings with the <span class="extract"><span class="Preform-extract-syntax">ADJECTIVE_MC</span></span> meaning
|
||||||
code, so parsing a word range to match an adjective is easy. By construction
|
code, so parsing a word range to match an adjective is easy. By construction
|
||||||
there is only one <span class="extract"><span class="Preform-extract-syntax">adjectival_phrase</span></span> for any given excerpt of text, so
|
there is only one <span class="extract"><span class="Preform-extract-syntax">adjectival_phrase</span></span> for any given excerpt of text, so
|
||||||
|
|
|
@ -92,7 +92,7 @@ numbers run from 0 to 12 since that's what clocks need.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">eleven</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">eleven</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">twelve</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">twelve</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>And by an ordinal we mean a number such as <span class="extract"><span class="Preform-extract-syntax">fifth</span></span> or <span class="extract"><span class="Preform-extract-syntax">351st</span></span>; note that
|
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>And by an ordinal we mean a number such as <span class="extract"><span class="Preform-extract-syntax">fifth</span></span> or <span class="extract"><span class="Preform-extract-syntax">351st</span></span>; note that
|
||||||
this is not a noun, and isn't allowed as a constant value in Inform.
|
this is not a noun, and isn't allowed as a constant value in Inform.
|
||||||
</p>
|
</p>
|
||||||
|
@ -113,7 +113,7 @@ this is not a noun, and isn't allowed as a constant value in Inform.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">eleventh</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">eleventh</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">twelfth</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">twelfth</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>Those two nonterminals here simply supply text: for efficiency reasons we
|
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>Those two nonterminals here simply supply text: for efficiency reasons we
|
||||||
don't actually parse them, although they would give the correct response if
|
don't actually parse them, although they would give the correct response if
|
||||||
we did. Instead they're scanned for words which are marked with the appropriate
|
we did. Instead they're scanned for words which are marked with the appropriate
|
||||||
|
@ -144,11 +144,11 @@ numbers.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Optimiser::assign_bitmap_bit</span><span class="plain-syntax">(</span><span class="function-syntax"><cardinal-number></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">Optimiser::assign_bitmap_bit</span><span class="plain-syntax">(</span><span class="function-syntax"><cardinal-number></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">Optimiser::assign_bitmap_bit</span><span class="plain-syntax">(</span><span class="function-syntax"><ordinal-number></span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Optimiser::assign_bitmap_bit</span><span class="plain-syntax">(</span><span class="function-syntax"><ordinal-number></span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="function-syntax"><cardinal-number-in-words>-></span><span class="identifier-syntax">number_words_by_production</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="function-syntax"><cardinal-number-in-words>-></span><span class="identifier-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">number_words_by_production</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="function-syntax"><cardinal-number-in-words>-></span><span class="identifier-syntax">flag_words_in_production</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NUMBER_MC</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="function-syntax"><cardinal-number-in-words>-></span><span class="identifier-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">flag_words_in_production</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NUMBER_MC</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="function-syntax"><ordinal-number-in-words>-></span><span class="identifier-syntax">number_words_by_production</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="function-syntax"><ordinal-number-in-words>-></span><span class="identifier-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">number_words_by_production</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="function-syntax"><ordinal-number-in-words>-></span><span class="identifier-syntax">flag_words_in_production</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ORDINAL_MC</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="function-syntax"><ordinal-number-in-words>-></span><span class="identifier-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">flag_words_in_production</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ORDINAL_MC</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>Actual parsing is done here. We look at a single word to see if it's a
|
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>Actual parsing is done here. We look at a single word to see if it's a
|
||||||
|
@ -175,7 +175,7 @@ in decimal digits, perhaps with a minus sign.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP4_1"></a><b>§4.1. </b>These mustn't match any number too large to fit into the virtual machine
|
<p class="commentary firstcommentary"><a id="SP4_1"></a><b>§4.1. </b>These mustn't match any number too large to fit into the virtual machine
|
||||||
being compiled to, so "42000", for instance, is not a valid literal if Inform
|
being compiled to, so "42000", for instance, is not a valid literal if Inform
|
||||||
is parsing text in a work intended for the 16-bit Z-machine.
|
is parsing text in a work intended for the 16-bit Z-machine.
|
||||||
|
@ -213,7 +213,7 @@ project, with the user not realising the consequences.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-aap.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-lm.html">1</a></li><li class="progresschapter"><a href="2-em.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-aap.html">aap</a></li><li class="progresscurrent">cao</li><li class="progresssection"><a href="3-daq.html">daq</a></li><li class="progresssection"><a href="3-adj.html">adj</a></li><li class="progresssection"><a href="3-au.html">au</a></li><li class="progresssection"><a href="3-nns.html">nns</a></li><li class="progresschapter"><a href="4-vrb.html">4</a></li><li class="progresschapter"><a href="5-dgr.html">5</a></li><li class="progressnext"><a href="3-daq.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-aap.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-lm.html">1</a></li><li class="progresschapter"><a href="2-em.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-aap.html">aap</a></li><li class="progresscurrent">cao</li><li class="progresssection"><a href="3-daq.html">daq</a></li><li class="progresssection"><a href="3-adj.html">adj</a></li><li class="progresssection"><a href="3-au.html">au</a></li><li class="progresssection"><a href="3-nns.html">nns</a></li><li class="progresschapter"><a href="4-vrb.html">4</a></li><li class="progresschapter"><a href="5-dgr.html">5</a></li><li class="progressnext"><a href="3-daq.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
|
@ -509,7 +509,7 @@ no text appears in front of the number "three".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">greater</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">than</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">greater</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">than</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">other</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">than</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">other</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">than</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. Parsing the determiner at the head of a noun phrase. </b>We run through the possible determiners in reverse creation order, choosing the
|
<p class="commentary firstcommentary"><a id="SP14"></a><b>§14. Parsing the determiner at the head of a noun phrase. </b>We run through the possible determiners in reverse creation order, choosing the
|
||||||
first which matches. The following returns \(-1\) if nothing was found, or
|
first which matches. The following returns \(-1\) if nothing was found, or
|
||||||
else the first word number after the determiner words, and in that case
|
else the first word number after the determiner words, and in that case
|
||||||
|
@ -568,7 +568,7 @@ names like "three of clubs", meaning a single playing card.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> TRUE; return FAIL_NONTERMINAL</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> TRUE; return FAIL_NONTERMINAL</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> TRUE</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> TRUE</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. </b>English has an awkward ambiguity here: what does this mean?
|
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. </b>English has an awkward ambiguity here: what does this mean?
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -590,7 +590,7 @@ from determiner parsing:
|
||||||
<span class="Preform-function-syntax"><excluded-from-determiners></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><excluded-from-determiners></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">no</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">no</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">one</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. </b>We attempt to see if the word range begins with (or consists of) text which
|
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. </b>We attempt to see if the word range begins with (or consists of) text which
|
||||||
refers to the given determiner, returning the first word past this text and
|
refers to the given determiner, returning the first word past this text and
|
||||||
also (where appropriate) setting the number specified. For instance, for
|
also (where appropriate) setting the number specified. For instance, for
|
||||||
|
|
|
@ -122,7 +122,7 @@ and what has been the case in the past.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">never</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> IMPOSSIBLE_CE</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">never</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> IMPOSSIBLE_CE</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">initially</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> INITIALLY_CE</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">initially</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> INITIALLY_CE</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="4-prp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-lm.html">1</a></li><li class="progresschapter"><a href="2-em.html">2</a></li><li class="progresschapter"><a href="3-aap.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-vrb.html">vrb</a></li><li class="progresssection"><a href="4-vu.html">vu</a></li><li class="progresssection"><a href="4-prp.html">prp</a></li><li class="progresscurrent">aoc</li><li class="progresssection"><a href="4-apoo.html">apoo</a></li><li class="progresschapter"><a href="5-dgr.html">5</a></li><li class="progressnext"><a href="4-apoo.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="4-prp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-lm.html">1</a></li><li class="progresschapter"><a href="2-em.html">2</a></li><li class="progresschapter"><a href="3-aap.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-vrb.html">vrb</a></li><li class="progresssection"><a href="4-vu.html">vu</a></li><li class="progresssection"><a href="4-prp.html">prp</a></li><li class="progresscurrent">aoc</li><li class="progresssection"><a href="4-apoo.html">apoo</a></li><li class="progresschapter"><a href="5-dgr.html">5</a></li><li class="progressnext"><a href="4-apoo.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
|
@ -223,7 +223,7 @@ cannot contain any HR; this cuts down our parsing time considerably.
|
||||||
<span class="Preform-function-syntax"><historical-reference-possible></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><historical-reference-possible></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">once/twice/thrice/turn/turns/time/times</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">once/twice/thrice/turn/turns/time/times</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>Otherwise the grammar is straightforward:
|
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>Otherwise the grammar is straightforward:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -262,7 +262,7 @@ cannot contain any HR; this cuts down our parsing time considerably.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><ordinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><ordinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b></p>
|
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
|
|
@ -186,7 +186,7 @@ preposition, but note that it does so by testing in creation order.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>It's often useful to look for prepositions which can be combined with the
|
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>It's often useful to look for prepositions which can be combined with the
|
||||||
copular verb "to be". These are tested in order of the list of possible
|
copular verb "to be". These are tested in order of the list of possible
|
||||||
verb forms for "to be', which is constructed with longer prepositions first.
|
verb forms for "to be', which is constructed with longer prepositions first.
|
||||||
|
@ -210,7 +210,7 @@ So it will find the longest match.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b>This is exactly similar, except that it looks for prepositions combined
|
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. </b>This is exactly similar, except that it looks for prepositions combined
|
||||||
with a given "permitted verb".
|
with a given "permitted verb".
|
||||||
</p>
|
</p>
|
||||||
|
@ -232,12 +232,12 @@ with a given "permitted verb".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. </b></p>
|
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Prepositions::mark_for_preform</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">Prepositions::mark_for_preform</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Prepositions::mark_for_preform</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">Prepositions::mark_for_preform</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="function-syntax"><relative-clause-marker>-></span><span class="identifier-syntax">flag_words_in_production</span><span class="plain-syntax"> = </span><span class="constant-syntax">PREPOSITION_MC</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="function-syntax"><relative-clause-marker>-></span><span class="identifier-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">flag_words_in_production</span><span class="plain-syntax"> = </span><span class="constant-syntax">PREPOSITION_MC</span><span class="plain-syntax">;</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">Prepositions::preform_optimiser</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Prepositions::preform_optimiser</span></span>:<br/>Linguistics Module - <a href="1-lm.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Prepositions::preform_optimiser</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Prepositions::preform_optimiser</span></span>:<br/>Linguistics Module - <a href="1-lm.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||||
|
|
|
@ -545,7 +545,7 @@ which has a meaning.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. </b>A copular verb is one which implies the equality relation: in practice,
|
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. </b>A copular verb is one which implies the equality relation: in practice,
|
||||||
that means it's "to be". So the following matches "is", "were not",
|
that means it's "to be". So the following matches "is", "were not",
|
||||||
and so on.
|
and so on.
|
||||||
|
@ -568,7 +568,7 @@ and so on.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. </b>A noncopular verb is anything that isn't copular, but here we also require
|
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. </b>A noncopular verb is anything that isn't copular, but here we also require
|
||||||
it to be in the present tense and the negative sense. So, for example, "does
|
it to be in the present tense and the negative sense. So, for example, "does
|
||||||
not carry" qualifies; "is not" or "supports" don't qualify.
|
not carry" qualifies; "is not" or "supports" don't qualify.
|
||||||
|
@ -593,7 +593,7 @@ not carry" qualifies; "is not" or "supports" don't qualify.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP18"></a><b>§18. </b>A universal verb is one which implies the universal relation: in practice,
|
<p class="commentary firstcommentary"><a id="SP18"></a><b>§18. </b>A universal verb is one which implies the universal relation: in practice,
|
||||||
that means it's "to relate".
|
that means it's "to relate".
|
||||||
</p>
|
</p>
|
||||||
|
@ -614,7 +614,7 @@ that means it's "to relate".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP19"></a><b>§19. </b>Any verb usage which is negative in sense: this is used only to diagnose problems.
|
<p class="commentary firstcommentary"><a id="SP19"></a><b>§19. </b>Any verb usage which is negative in sense: this is used only to diagnose problems.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -635,7 +635,7 @@ that means it's "to relate".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP20"></a><b>§20. </b>Any verb usage which is in the past tense: this is used only to diagnose problems.
|
<p class="commentary firstcommentary"><a id="SP20"></a><b>§20. </b>Any verb usage which is in the past tense: this is used only to diagnose problems.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -656,7 +656,7 @@ that means it's "to relate".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP21"></a><b>§21. </b>The following are used only when recognising text expansions for adaptive
|
<p class="commentary firstcommentary"><a id="SP21"></a><b>§21. </b>The following are used only when recognising text expansions for adaptive
|
||||||
uses of verbs:
|
uses of verbs:
|
||||||
</p>
|
</p>
|
||||||
|
@ -691,7 +691,7 @@ uses of verbs:
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP22"></a><b>§22. </b>These three nonterminals are used by Inform only to recognise constant
|
<p class="commentary firstcommentary"><a id="SP22"></a><b>§22. </b>These three nonterminals are used by Inform only to recognise constant
|
||||||
names for verbs. For example, the parsing of the Inform constants "the verb take"
|
names for verbs. For example, the parsing of the Inform constants "the verb take"
|
||||||
or "the verb to be able to see" use these.
|
or "the verb to be able to see" use these.
|
||||||
|
@ -746,7 +746,7 @@ or "the verb to be able to see" use these.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">FALSE</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP23"></a><b>§23. Optimisation. </b></p>
|
<p class="commentary firstcommentary"><a id="SP23"></a><b>§23. Optimisation. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
|
|
@ -157,7 +157,7 @@ lookahead mode; this prevents needless memory allocation.
|
||||||
<span class="Preform-function-syntax"><nounphrase></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><nounphrase></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> GENERATE_RAW_NP</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> GENERATE_RAW_NP</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. Articled nounphrases (NP2). </b>Although, again, any text is acceptable, now we now take note of the definite
|
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. Articled nounphrases (NP2). </b>Although, again, any text is acceptable, now we now take note of the definite
|
||||||
or indefinite article, and also of whether it's used in the singular or the
|
or indefinite article, and also of whether it's used in the singular or the
|
||||||
plural.
|
plural.
|
||||||
|
@ -186,7 +186,7 @@ leave the text empty.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><if-not-deliberately-capitalised></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><definite-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[3]; </span><span class="named-paragraph-container code-font"><a href="5-np.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Annotate node by definite article</span><span class="named-paragraph-number">5.2</span></a></span><span class="Preform-constant-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><if-not-deliberately-capitalised></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><definite-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[3]; </span><span class="named-paragraph-container code-font"><a href="5-np.html#SP5_2" class="named-paragraph-link"><span class="named-paragraph">Annotate node by definite article</span><span class="named-paragraph-number">5.2</span></a></span><span class="Preform-constant-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<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">Annotate node by article</span><span class="named-paragraph-number">5.1</span></span><span class="Preform-comment-syntax"> =</span>
|
<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">Annotate node by article</span><span class="named-paragraph-number">5.1</span></span><span class="Preform-comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ a correctly paired way; otherwise they are the same.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">^<balanced-text></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; return FAIL_NONTERMINAL;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">^<balanced-text></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; return FAIL_NONTERMINAL;</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase-articled></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase-articled></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. List-divided nounphrases (NP3). </b>An "articled list" matches text like
|
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. List-divided nounphrases (NP3). </b>An "articled list" matches text like
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -265,7 +265,7 @@ a correctly paired way; otherwise they are the same.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase-articled-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase-articled-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_,/and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase-articled-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_,/and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase-articled-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>That builds into a lopsided binary tree: thus "the lion, a witch,
|
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b>That builds into a lopsided binary tree: thus "the lion, a witch,
|
||||||
and some wardrobes" becomes
|
and some wardrobes" becomes
|
||||||
</p>
|
</p>
|
||||||
|
@ -302,7 +302,7 @@ in the <span class="extract"><span class="extract-syntax">AND_NT</span></span> n
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_or}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase-alternative-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_or}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase-alternative-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_,/or}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase-alternative-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_,/or}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nounphrase-alternative-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. Worldly nounphrases (NP4). </b>That just leaves the big one. It comes in two versions, for the object and
|
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. Worldly nounphrases (NP4). </b>That just leaves the big one. It comes in two versions, for the object and
|
||||||
subject NPs of a regular sentence, but they are almost exactly the same. They
|
subject NPs of a regular sentence, but they are almost exactly the same. They
|
||||||
differ slightly, as we'll see, in the handling of relative phrases; when
|
differ slightly, as we'll see, in the handling of relative phrases; when
|
||||||
|
@ -335,7 +335,7 @@ accusative.)
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><if-not-deliberately-capitalised></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-relative-phrase-unlimited></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[2]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><if-not-deliberately-capitalised></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-relative-phrase-unlimited></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[2]</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-inner-without-rp></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-inner-without-rp></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. </b>So here we go with relative phrases. We've already seen that our two general
|
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. </b>So here we go with relative phrases. We've already seen that our two general
|
||||||
forms of NP differ only in the range of RPs allowed at the top level: here we
|
forms of NP differ only in the range of RPs allowed at the top level: here we
|
||||||
see, furthermore, that the only limitation is that in the subject of an
|
see, furthermore, that the only limitation is that in the subject of an
|
||||||
|
@ -390,7 +390,7 @@ in the case of a participle like "holding".
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-relative-phrase-implicit></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-relative-phrase-implicit></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-relative-phrase-explicit></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-relative-phrase-explicit></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. </b>Finally, we define what we mean by implicit and explicit relative phrases.
|
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. </b>Finally, we define what we mean by implicit and explicit relative phrases.
|
||||||
As examples, the right-hand sides of:
|
As examples, the right-hand sides of:
|
||||||
</p>
|
</p>
|
||||||
|
@ -420,7 +420,7 @@ directions, in particular, a little better.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><permitted-preposition></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_,/and</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; return FAIL_NONTERMINAL;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><permitted-preposition></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">_,/and</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; return FAIL_NONTERMINAL;</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><permitted-preposition></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-inner-without-rp></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; </span><span class="named-paragraph-container code-font"><a href="5-np.html#SP13_1" class="named-paragraph-link"><span class="named-paragraph">Work out a meaning</span><span class="named-paragraph-number">13.1</span></a></span><span class="Preform-constant-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><permitted-preposition></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-inner-without-rp></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; </span><span class="named-paragraph-container code-font"><a href="5-np.html#SP13_1" class="named-paragraph-link"><span class="named-paragraph">Work out a meaning</span><span class="named-paragraph-number">13.1</span></a></span><span class="Preform-constant-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP13_1"></a><b>§13.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Work out a meaning</span><span class="named-paragraph-number">13.1</span></span><span class="Preform-comment-syntax"> =</span>
|
<p class="commentary firstcommentary"><a id="SP13_1"></a><b>§13.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Work out a meaning</span><span class="named-paragraph-number">13.1</span></span><span class="Preform-comment-syntax"> =</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -528,7 +528,7 @@ speed optimisation, and doesn't affect the language's definition.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nominative-pronoun></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> GENERATE_RAW_NP; Annotations::write_int(*XP, nounphrase_article_ANNOT, IT_ART);</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><nominative-pronoun></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> GENERATE_RAW_NP; Annotations::write_int(*XP, nounphrase_article_ANNOT, IT_ART);</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-articled-balanced></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-articled-balanced></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = RP[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. </b>The tail of with-or-having parses for instance "with carrying capacity 5"
|
<p class="commentary firstcommentary"><a id="SP15"></a><b>§15. </b>The tail of with-or-having parses for instance "with carrying capacity 5"
|
||||||
in the NP
|
in the NP
|
||||||
</p>
|
</p>
|
||||||
|
@ -565,7 +565,7 @@ bogus object called "locking it".)
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-new-property-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-new-property-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_,/and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-new-property-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_,/and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-new-property-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. </b>The "and" tail is much easier:
|
<p class="commentary firstcommentary"><a id="SP16"></a><b>§16. </b>The "and" tail is much easier:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -574,7 +574,7 @@ bogus object called "locking it".)
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-inner></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">,</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-inner></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_,/and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-inner></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{_,/and}</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-inner></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Wordings::first_wn(W); *XP= RP[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. </b>Kind phrases are easier:
|
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. </b>Kind phrases are easier:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -595,7 +595,7 @@ but definite articles are not.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">kind/kinds</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = NounPhrases::PN_void(KIND_NT, W)</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">kind/kinds</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = NounPhrases::PN_void(KIND_NT, W)</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">kind/kinds</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-inner></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = NounPhrases::PN_single(KIND_NT, W, RP[1])</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">kind/kinds</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-inner></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> 0; *XP = NounPhrases::PN_single(KIND_NT, W, RP[1])</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP18"></a><b>§18. Relationship nodes. </b>A modest utility routine to construct and annotation RELATIONSHIP nodes.
|
<p class="commentary firstcommentary"><a id="SP18"></a><b>§18. Relationship nodes. </b>A modest utility routine to construct and annotation RELATIONSHIP nodes.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
|
@ -145,7 +145,7 @@ verb, such as:
|
||||||
<span class="Preform-function-syntax"><s-existential-np></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><s-existential-np></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">there</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Node::new(UNKNOWN_NT);</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">there</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> Node::new(UNKNOWN_NT);</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>We will want to spot adverbs of certainty adjacent to the verb itself;
|
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>We will want to spot adverbs of certainty adjacent to the verb itself;
|
||||||
English allows these either side, so "A man is usually happy" and "Peter
|
English allows these either side, so "A man is usually happy" and "Peter
|
||||||
certainly is happy" are both possible. Note that these adverbs can divide
|
certainly is happy" are both possible. Note that these adverbs can divide
|
||||||
|
@ -160,7 +160,7 @@ the plain", where "mainly" divides "lies" from "in".
|
||||||
<span class="Preform-function-syntax"><post-verb-certainty></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><post-verb-certainty></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><certainty></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><certainty></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> R[1]</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>Relative clauses ("a woman who is on the stage") are detected by the presence
|
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. </b>Relative clauses ("a woman who is on the stage") are detected by the presence
|
||||||
of a marker word before the verb (in this example, "who"). Of course, such
|
of a marker word before the verb (in this example, "who"). Of course, such
|
||||||
a word doesn't always mean we have a relative clause, so we will need to be a
|
a word doesn't always mean we have a relative clause, so we will need to be a
|
||||||
|
@ -174,7 +174,7 @@ little careful using this nonterminal.
|
||||||
<span class="Preform-function-syntax"><pre-verb-rc-marker></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><pre-verb-rc-marker></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><relative-clause-marker></span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><relative-clause-marker></span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>For purely pragmatic reasons, we'll want to avoid reading prepositions (and
|
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b>For purely pragmatic reasons, we'll want to avoid reading prepositions (and
|
||||||
thus implicit relative clauses, such as "the cat in the hat") where they occur
|
thus implicit relative clauses, such as "the cat in the hat") where they occur
|
||||||
after the word "called" in a sentence. For example, "a cat called Puss in
|
after the word "called" in a sentence. For example, "a cat called Puss in
|
||||||
|
@ -185,7 +185,7 @@ Boots" must not be thought to be in Boots.
|
||||||
<span class="Preform-function-syntax"><phrase-with-calling></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
<span class="Preform-function-syntax"><phrase-with-calling></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">called</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">called</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. Main nonterminal. </b>And so this nonterminal turns a sentence into a small parse tree. Between 2010
|
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. Main nonterminal. </b>And so this nonterminal turns a sentence into a small parse tree. Between 2010
|
||||||
and early 2016, this was implemented in straight Preform rather than as an
|
and early 2016, this was implemented in straight Preform rather than as an
|
||||||
internal, but that became simply too complicated to maintain once imperative
|
internal, but that became simply too complicated to maintain once imperative
|
||||||
|
@ -207,7 +207,7 @@ verbs were added to the grammar. Still, it was a pity.
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">rv</span><span class="Preform-plain-syntax">;</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">rv</span><span class="Preform-plain-syntax">;</span>
|
||||||
<span class="Preform-plain-syntax">}</span>
|
<span class="Preform-plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-prf.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b>The following routine is only very slightly recursive. It's used either
|
<p class="commentary firstcommentary"><a id="SP7"></a><b>§7. </b>The following routine is only very slightly recursive. It's used either
|
||||||
as above, to parse a whole sentence like "The coral snake is in the green
|
as above, to parse a whole sentence like "The coral snake is in the green
|
||||||
bucket", or else is called (once) from within itself to parse just the
|
bucket", or else is called (once) from within itself to parse just the
|
||||||
|
|
|
@ -145,7 +145,7 @@ by moving <span class="extract"><span class="extract-syntax">A</span></span> pas
|
||||||
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. Reading. </b></p>
|
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. Reading. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Wordings::length</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">Wordings::length</span></span>:<br/><a href="3-wrd.html#SP9">§9</a>, <a href="3-wrd.html#SP14">§14</a>, <a href="3-wrd.html#SP21">§21</a><br/>Word Assemblages - <a href="2-wa.html#SP4">§4</a>, <a href="2-wa.html#SP10">§10</a>, <a href="2-wa.html#SP11">§11</a><br/>Lexer - <a href="3-lxr.html#SP30">§30</a><br/>Loading Preform - <a href="4-lp.html#SP15_2">§15.2</a><br/>The Optimiser - <a href="4-to.html#SP5">§5</a><br/>Preform - <a href="4-prf.html#SP1">§1</a>, <a href="4-prf.html#SP1_2_1">§1.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-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="function-syntax">Wordings::length</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">Wordings::length</span></span>:<br/><a href="3-wrd.html#SP9">§9</a>, <a href="3-wrd.html#SP14">§14</a>, <a href="3-wrd.html#SP21">§21</a><br/>Word Assemblages - <a href="2-wa.html#SP4">§4</a>, <a href="2-wa.html#SP10">§10</a>, <a href="2-wa.html#SP11">§11</a><br/>Lexer - <a href="3-lxr.html#SP30">§30</a><br/>Loading Preform - <a href="4-lp.html#SP15_2">§15.2</a><br/>The Optimiser - <a href="4-to.html#SP5">§5</a><br/>Preform - <a href="4-prf.html#SP1">§1</a><br/>Instrumentation - <a href="4-ins.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-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="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP12" class="function-link"><span class="function-syntax">Wordings::empty</span></a><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><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP12" class="function-link"><span class="function-syntax">Wordings::empty</span></a><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><span class="constant-syntax">0</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">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">word_B</span><span class="plain-syntax"> - </span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">word_A</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</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">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">word_B</span><span class="plain-syntax"> - </span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">word_A</span><span class="plain-syntax"> + </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
@ -246,7 +246,7 @@ wordings.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">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="function-syntax">Wordings::nonempty</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Wordings::nonempty</span></span>:<br/><a href="3-wrd.html#SP11">§11</a>, <a href="3-wrd.html#SP14">§14</a><br/>Word Assemblages - <a href="2-wa.html#SP11">§11</a><br/>Identifiers - <a href="3-idn.html#SP3">§3</a><br/>Loading Preform - <a href="4-lp.html#SP15_2">§15.2</a>, <a href="4-lp.html#SP17">§17</a><br/>Basic Nonterminals - <a href="4-bn.html#SP7">§7</a>, <a href="4-bn.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-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="function-syntax">Wordings::nonempty</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Wordings::nonempty</span></span>:<br/><a href="3-wrd.html#SP11">§11</a>, <a href="3-wrd.html#SP14">§14</a><br/>Word Assemblages - <a href="2-wa.html#SP11">§11</a><br/>Identifiers - <a href="3-idn.html#SP3">§3</a><br/>Loading Preform - <a href="4-lp.html#SP15_2">§15.2</a><br/>Basic Nonterminals - <a href="4-bn.html#SP7">§7</a>, <a href="4-bn.html#SP8">§8</a><br/>Instrumentation - <a href="4-ins.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-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="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">word_A</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">word_B</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">word_A</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">word_A</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="identifier-syntax">word_B</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">W</span><span class="plain-syntax">.</span><span class="element-syntax">word_A</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
|
@ -393,7 +393,7 @@ colour.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="3-idn.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">ap</li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progressnext"><a href="4-nnt.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="3-idn.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresscurrent">ap</li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progresssection"><a href="4-ins.html">ins</a></li><li class="progressnext"><a href="4-nnt.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -183,7 +183,7 @@ of text <span class="extract"><span class="Preform-extract-syntax">""</span></sp
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This is <a href="4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
<ul class="endnotetexts"><li>This is <a href="4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="4-prf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresscurrent">bn</li><li class="progressnextoff">❯</li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="4-prf.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresscurrent">bn</li><li class="progresssection"><a href="4-ins.html">ins</a></li><li class="progressnext"><a href="4-ins.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
253
docs/words-module/4-ins.html
Normal file
253
docs/words-module/4-ins.html
Normal file
|
@ -0,0 +1,253 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Instrumentation</title>
|
||||||
|
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta http-equiv="Content-Language" content="en-gb">
|
||||||
|
|
||||||
|
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<script>
|
||||||
|
function togglePopup(material_id) {
|
||||||
|
var popup = document.getElementById(material_id);
|
||||||
|
popup.classList.toggle("show");
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body class="commentary-font">
|
||||||
|
<nav role="navigation">
|
||||||
|
<h1><a href="../index.html">
|
||||||
|
<img src="../docs-assets/Inform.png" height=72">
|
||||||
|
</a></h1>
|
||||||
|
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
||||||
|
<li><a href="../other.html">other tools</a></li>
|
||||||
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
||||||
|
<li><a href="../units.html">unit test tools</a></li>
|
||||||
|
</ul><h2>Compiler Webs</h2><ul>
|
||||||
|
<li><a href="../inbuild/index.html">inbuild</a></li>
|
||||||
|
<li><a href="../inform7/index.html">inform7</a></li>
|
||||||
|
<li><a href="../inter/index.html">inter</a></li>
|
||||||
|
</ul><h2>Inbuild Modules</h2><ul>
|
||||||
|
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
||||||
|
</ul><h2>Inform7 Modules</h2><ul>
|
||||||
|
<li><a href="../core-module/index.html">core</a></li>
|
||||||
|
<li><a href="../inflections-module/index.html">inflections</a></li>
|
||||||
|
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
||||||
|
<li><a href="../kinds-module/index.html">kinds</a></li>
|
||||||
|
<li><a href="../if-module/index.html">if</a></li>
|
||||||
|
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
||||||
|
<li><a href="../problems-module/index.html">problems</a></li>
|
||||||
|
<li><a href="../index-module/index.html">index</a></li>
|
||||||
|
</ul><h2>Inter Modules</h2><ul>
|
||||||
|
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
||||||
|
<li><a href="../building-module/index.html">building</a></li>
|
||||||
|
<li><a href="../codegen-module/index.html">codegen</a></li>
|
||||||
|
</ul><h2>Shared Modules</h2><ul>
|
||||||
|
<li><a href="../arch-module/index.html">arch</a></li>
|
||||||
|
<li><a href="../syntax-module/index.html">syntax</a></li>
|
||||||
|
<li><a href="index.html"><span class="selectedlink">words</span></a></li>
|
||||||
|
<li><a href="../html-module/index.html">html</a></li>
|
||||||
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<main role="main">
|
||||||
|
<!--Weave of 'Instrumentation' generated by Inweb-->
|
||||||
|
<div class="breadcrumbs">
|
||||||
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Shared Modules</a></li><li><a href="index.html">words</a></li><li><a href="index.html#4">Chapter 4: Parsing</a></li><li><b>Instrumentation</b></li></ul></div>
|
||||||
|
<p class="purpose">To provide debugging and tuning data on the Preform parser's performance.</p>
|
||||||
|
|
||||||
|
<ul class="toc"><li><a href="4-ins.html#SP1">§1. What data we collect</a></li><li><a href="4-ins.html#SP4">§4. Logging</a></li></ul><hr class="tocbar">
|
||||||
|
|
||||||
|
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. What data we collect. </b>This ought to be a privacy policy under GDPR, somehow. If so, our justification
|
||||||
|
for logging usage data would be this:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul class="items"><li>(a) the Preform parser does something very complicated and has to be tuned just
|
||||||
|
right to be efficient, so debugging logs are helpful;
|
||||||
|
</li><li>(b) but it runs millions of times in each Inform compilation, in a wide variety
|
||||||
|
of ways, and any kind of complete log would be both too large and too complex
|
||||||
|
to take in. We want to be selective, and to be able to summarise.
|
||||||
|
</li></ul>
|
||||||
|
<p class="commentary">So, in instrumentation mode, we gather the following data. For nonterminals,
|
||||||
|
we record the number of hits and misses. If a nonterminal is "watched", we
|
||||||
|
log its every parse.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">nonterminal_instrumentation_data</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">watched</span><span class="plain-syntax">; </span><span class="comment-syntax"> watch goings-on to the debugging log</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">nonterminal_tries</span><span class="plain-syntax">; </span><span class="comment-syntax"> for statistics collected in instrumented mode</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">nonterminal_matches</span><span class="plain-syntax">; </span><span class="comment-syntax"> ditto</span>
|
||||||
|
<span class="plain-syntax">} </span><span class="reserved-syntax">nonterminal_instrumentation_data</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Instrumentation::initialise_nonterminal_data</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">Instrumentation::initialise_nonterminal_data</span></span>:<br/>Nonterminals - <a href="4-nnt.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal_instrumentation_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ins</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-></span><span class="element-syntax">watched</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">ins</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_tries</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_matches</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Instrumentation::watch</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">watched</span><span class="plain-syntax"> = </span><span class="identifier-syntax">state</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">Instrumentation::note_nonterminal_match</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">Instrumentation::note_nonterminal_match</span></span>:<br/>Preform - <a href="4-prf.html#SP_1">§.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-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="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_tries</span><span class="plain-syntax">++;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_matches</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">Instrumentation::note_nonterminal_fail</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">Instrumentation::note_nonterminal_fail</span></span>:<br/>Preform - <a href="4-prf.html#SP1_1">§1.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_tries</span><span class="plain-syntax">++;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>The structure nonterminal_instrumentation_data is accessed in 4/prf and here.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. </b>We count the number of hits and misses on each production, and also store
|
||||||
|
some sample text matching it. (In fact, we store the longest text which ever
|
||||||
|
matches it.)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">production_instrumentation_data</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">production_tries</span><span class="plain-syntax">; </span><span class="comment-syntax"> for statistics collected in instrumented mode</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">production_matches</span><span class="plain-syntax">; </span><span class="comment-syntax"> ditto</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">sample_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> ditto</span>
|
||||||
|
<span class="plain-syntax">} </span><span class="reserved-syntax">production_instrumentation_data</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Instrumentation::initialise_production_data</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">Instrumentation::initialise_production_data</span></span>:<br/>Loading Preform - <a href="4-lp.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">production_instrumentation_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ins</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-></span><span class="element-syntax">production_tries</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-></span><span class="element-syntax">production_matches</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">ins</span><span class="plain-syntax">-></span><span class="element-syntax">sample_text</span><span class="plain-syntax"> = </span><span class="constant-syntax">EMPTY_WORDING</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">Instrumentation::note_production_match</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">Instrumentation::note_production_match</span></span>:<br/>Preform - <a href="4-prf.html#SP1_2_1">§1.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-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="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">production_tries</span><span class="plain-syntax">++;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">production_matches</span><span class="plain-syntax">++;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="identifier-syntax">sample_text</span><span class="plain-syntax">) < </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">))</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">sample_text</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Instrumentation::note_production_fail</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Instrumentation::note_production_fail</span></span>:<br/>Preform - <a href="4-prf.html#SP1_2_1">§1.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">production_tries</span><span class="plain-syntax">++;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>The structure production_instrumentation_data is private to this section.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP3"></a><b>§3. </b>At present, we collect no data on individual ptokens.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ptoken_instrumentation_data</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">to_keep_this_from_being_empty_which_is_nonstandard_C</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">} </span><span class="reserved-syntax">ptoken_instrumentation_data</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Instrumentation::initialise_ptoken_data</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Instrumentation::initialise_ptoken_data</span></span>:<br/>Loading Preform - <a href="4-lp.html#SP16_1">§16.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ptoken_instrumentation_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ins</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-></span><span class="element-syntax">to_keep_this_from_being_empty_which_is_nonstandard_C</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<ul class="endnotetexts"><li>The structure ptoken_instrumentation_data is private to this section.</li></ul>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP4"></a><b>§4. Logging. </b>Descending the wheels within wheels of the Preform data structures, then:
|
||||||
|
</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">Instrumentation::log</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</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">detailed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%d/%d: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_matches</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_tries</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%V: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::log_range_requirement</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">internal_definition</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" (internal)\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="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_production_list</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">next_production_list</span><span class="plain-syntax">)</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="4-ins.html#SP5" class="function-link"><span class="function-syntax">Instrumentation::log_production_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, </span><span class="identifier-syntax">detailed</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" min %d, max %d\n\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">min_nt_words</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </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">Instrumentation::log_production_list</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Instrumentation::log_production_list</span></span>:<br/><a href="4-ins.html#SP4">§4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">detailed</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" $J:\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">definition_language</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">first_production</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">next_production</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">); </span><a href="4-ins.html#SP6" class="function-link"><span class="function-syntax">Instrumentation::log_production</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">detailed</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" %d/%d: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">production_matches</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">production_tries</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP12" class="function-link"><span class="function-syntax">Wordings::nonempty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">sample_text</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"<%W>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">sample_text</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" ==> "</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::log_range_requirement</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">production_req</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </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">Instrumentation::log_production</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Instrumentation::log_production</span></span>:<br/><a href="4-ins.html#SP5">§5</a><br/>Preform - <a href="4-prf.html#SP1_2">§1.2</a>, <a href="4-prf.html#SP1_2_1">§1.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">detailed</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">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"<empty-production>"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="4-ins.html#SP7" class="function-link"><span class="function-syntax">Instrumentation::log_ptoken</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">detailed</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax">}</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">Instrumentation::log_ptoken</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Instrumentation::log_ptoken</span></span>:<br/><a href="4-ins.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">detailed</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">detailed</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_position</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"(@%d)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_position</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">detailed</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_number</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"(S%d)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_number</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">disallow_unexpected_upper</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"_"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"^"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_starts</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"{"</span><span class="plain-syntax">); </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">detailed</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%d:"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_starts</span><span class="plain-syntax">); }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_ptoken</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">alt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%V"</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</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">detailed</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"=%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">result_index</span><span class="plain-syntax">);</span>
|
||||||
|
<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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%V"</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"/"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_ends</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">detailed</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">":%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_ends</span><span class="plain-syntax">); </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"}"</span><span class="plain-syntax">); }</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<p class="commentary firstcommentary"><a id="SP8"></a><b>§8. </b>A less detailed form used in linguistic problem messages:
|
||||||
|
</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">Instrumentation::write_ptoken</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">disallow_unexpected_upper</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"_"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"^"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_starts</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"{"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_ptoken</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">alt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%V"</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">);</span>
|
||||||
|
<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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%V"</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"/"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax"> }</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_ends</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"}"</span><span class="plain-syntax">);</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
</pre>
|
||||||
|
<nav role="progress"><div class="progresscontainer">
|
||||||
|
<ul class="progressbar"><li class="progressprev"><a href="4-bn.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progresscurrent">ins</li><li class="progressnextoff">❯</li></ul></div>
|
||||||
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -67,7 +67,7 @@ function togglePopup(material_id) {
|
||||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Shared Modules</a></li><li><a href="index.html">words</a></li><li><a href="index.html#4">Chapter 4: Parsing</a></li><li><b>Loading Preform</b></li></ul></div>
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Shared Modules</a></li><li><a href="index.html">words</a></li><li><a href="index.html#4">Chapter 4: Parsing</a></li><li><b>Loading Preform</b></li></ul></div>
|
||||||
<p class="purpose">To read in structural definitions of natural language written in the meta-language Preform.</p>
|
<p class="purpose">To read in structural definitions of natural language written in the meta-language Preform.</p>
|
||||||
|
|
||||||
<ul class="toc"><li><a href="4-lp.html#SP1">§1. Reading Preform syntax from a file or text</a></li><li><a href="4-lp.html#SP5">§5. Reserved words in Preform</a></li><li><a href="4-lp.html#SP7">§7. Parsing Preform</a></li><li><a href="4-lp.html#SP8">§8. Production lists</a></li><li><a href="4-lp.html#SP11">§11. Productions and ptokens</a></li><li><a href="4-lp.html#SP14">§14. Reading productions</a></li><li><a href="4-lp.html#SP17">§17. Logging</a></li></ul><hr class="tocbar">
|
<ul class="toc"><li><a href="4-lp.html#SP1">§1. Reading Preform syntax from a file or text</a></li><li><a href="4-lp.html#SP5">§5. Reserved words in Preform</a></li><li><a href="4-lp.html#SP7">§7. Parsing Preform</a></li><li><a href="4-lp.html#SP8">§8. Production lists</a></li><li><a href="4-lp.html#SP11">§11. Productions and ptokens</a></li><li><a href="4-lp.html#SP14">§14. Reading productions</a></li></ul><hr class="tocbar">
|
||||||
|
|
||||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Reading Preform syntax from a file or text. </b>The parser reads source text against a specific language only, if
|
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Reading Preform syntax from a file or text. </b>The parser reads source text against a specific language only, if
|
||||||
<span class="extract"><span class="extract-syntax">primary_Preform_language</span></span> is set; or, if it isn't, from any language.
|
<span class="extract"><span class="extract-syntax">primary_Preform_language</span></span> is set; or, if it isn't, from any language.
|
||||||
|
@ -293,7 +293,7 @@ independent <a href="4-lp.html#SP8" class="internal">production_list</a> object.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">production_list</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">production_list</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure production_list is accessed in 4/to, 4/prf and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure production_list is accessed in 4/to, 4/prf, 4/ins and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b></p>
|
<p class="commentary firstcommentary"><a id="SP9"></a><b>§9. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
@ -368,28 +368,19 @@ only confuses the picture here.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="comment-syntax"> the linked list of ptokens</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="comment-syntax"> the linked list of ptokens</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">match_number</span><span class="plain-syntax">; </span><span class="comment-syntax"> 0 for </span><span class="extract"><span class="extract-syntax">/a/</span></span><span class="comment-syntax">, 1 for </span><span class="extract"><span class="extract-syntax">/b/</span></span><span class="comment-syntax"> and so on: see </span><a href="4-ap.html" class="internal">About Preform</a>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">match_number</span><span class="plain-syntax">; </span><span class="comment-syntax"> 0 for </span><span class="extract"><span class="extract-syntax">/a/</span></span><span class="comment-syntax">, 1 for </span><span class="extract"><span class="extract-syntax">/b/</span></span><span class="comment-syntax"> and so on: see </span><a href="4-ap.html" class="internal">About Preform</a>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_ranges</span><span class="plain-syntax">; </span><span class="comment-syntax"> actually one more, since range 0 is reserved (see above)</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_ranges</span><span class="plain-syntax">; </span><span class="comment-syntax"> actually one more, since range 0 is reserved</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="comment-syntax"> Optimiser data</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">production_optimisation_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">opt</span><span class="plain-syntax">; </span><span class="comment-syntax"> see </span><a href="4-to.html" class="internal">The Optimiser</a>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">min_pr_words</span><span class="plain-syntax">, </span><span class="identifier-syntax">max_pr_words</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">production_instrumentation_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">; </span><span class="comment-syntax"> see </span><a href="4-ins.html" class="internal">Instrumentation</a>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> </span><span class="identifier-syntax">production_req</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">no_struts</span><span class="plain-syntax">; </span><span class="comment-syntax"> the actual number, this time</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">struts</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_STRUTS_PER_PRODUCTION</span><span class="plain-syntax">]; </span><span class="comment-syntax"> first ptoken in strut</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_STRUTS_PER_PRODUCTION</span><span class="plain-syntax">]; </span><span class="comment-syntax"> length of the strut in words</span>
|
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="comment-syntax"> For debugging only</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">production_tries</span><span class="plain-syntax">; </span><span class="comment-syntax"> for statistics collected in instrumented mode</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">production_matches</span><span class="plain-syntax">; </span><span class="comment-syntax"> ditto</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">sample_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> ditto</span>
|
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_production</span><span class="plain-syntax">; </span><span class="comment-syntax"> within its production list</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_production</span><span class="plain-syntax">; </span><span class="comment-syntax"> within its production list</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">production</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">production</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure production is accessed in 4/to, 4/prf and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure production is accessed in 4/nnt, 4/to, 4/prf, 4/ins and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. </b>And at the bottom of the chain, the lowly ptoken. Even this can spawn another
|
<p class="commentary firstcommentary"><a id="SP12"></a><b>§12. </b>And at the bottom of God's great chain, the lowly ptoken. Even this can spawn
|
||||||
list, though: the token <span class="extract"><span class="extract-syntax">fried/green/tomatoes</span></span> is a list of three ptokens joined
|
another list, though: the token <span class="extract"><span class="extract-syntax">fried/green/tomatoes</span></span> is a list of three ptokens
|
||||||
by the <span class="extract"><span class="extract-syntax">alternative_ptoken</span></span> links.
|
joined by the <span class="extract"><span class="extract-syntax">alternative_ptoken</span></span> links.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="commentary">There are really only three kinds of ptoken, wildcards, fixed words, and
|
<p class="commentary">There are really only three kinds of ptoken, wildcards, fixed words, and
|
||||||
|
@ -421,17 +412,14 @@ the <span class="extract"><span class="extract-syntax">balanced_wildcard</span><
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">range_starts</span><span class="plain-syntax">; </span><span class="comment-syntax"> 1, 2, 3, ... if word range 1, 2, 3, ... starts with this</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">range_starts</span><span class="plain-syntax">; </span><span class="comment-syntax"> 1, 2, 3, ... if word range 1, 2, 3, ... starts with this</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">range_ends</span><span class="plain-syntax">; </span><span class="comment-syntax"> 1, 2, 3, ... if word range 1, 2, 3, ... ends with this</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">range_ends</span><span class="plain-syntax">; </span><span class="comment-syntax"> 1, 2, 3, ... if word range 1, 2, 3, ... ends with this</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="comment-syntax"> Optimiser data</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ptoken_optimisation_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">opt</span><span class="plain-syntax">; </span><span class="comment-syntax"> see </span><a href="4-to.html" class="internal">The Optimiser</a>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ptoken_position</span><span class="plain-syntax">; </span><span class="comment-syntax"> fixed position in range: 1, 2, ... for left, -1, -2, ... for right</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ptoken_instrumentation_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">; </span><span class="comment-syntax"> see </span><a href="4-ins.html" class="internal">Instrumentation</a>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">strut_number</span><span class="plain-syntax">; </span><span class="comment-syntax"> if this is part of a strut, what number? or -1 if not</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ptoken_is_fast</span><span class="plain-syntax">; </span><span class="comment-syntax"> can be checked in the fast pass of the parser</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> </span><span class="identifier-syntax">token_req</span><span class="plain-syntax">;</span>
|
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">; </span><span class="comment-syntax"> within its production list</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_ptoken</span><span class="plain-syntax">; </span><span class="comment-syntax"> within its production list</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure ptoken is accessed in 4/to, 4/prf and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure ptoken is accessed in 4/nnt, 4/to, 4/prf, 4/ins and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. </b>Each ptoken has a <span class="extract"><span class="extract-syntax">range_starts</span></span> and <span class="extract"><span class="extract-syntax">range_ends</span></span> number. This is either -1,
|
<p class="commentary firstcommentary"><a id="SP13"></a><b>§13. </b>Each ptoken has a <span class="extract"><span class="extract-syntax">range_starts</span></span> and <span class="extract"><span class="extract-syntax">range_ends</span></span> number. This is either -1,
|
||||||
or marks that the ptoken occurs as the first or last in a range (or both). For
|
or marks that the ptoken occurs as the first or last in a range (or both). For
|
||||||
example, in the production
|
example, in the production
|
||||||
|
@ -458,11 +446,8 @@ and so on.
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">no_ranges</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax"> so that they count from 1; range 0 is unused</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">no_ranges</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="comment-syntax"> so that they count from 1; range 0 is unused</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">no_struts</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> they will be detected later</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP1" class="function-link"><span class="function-syntax">Optimiser::initialise_production_data</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">min_pr_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_pr_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><a href="4-ins.html#SP2" class="function-link"><span class="function-syntax">Instrumentation::initialise_production_data</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">));</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_tries</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_matches</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">pr</span><span class="plain-syntax">-></span><span class="element-syntax">sample_text</span><span class="plain-syntax"> = </span><span class="constant-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">tail</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">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">head</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">tail</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-lp.html#SP14_1" class="named-paragraph-link"><span class="named-paragraph">Parse the row of production tokens into a linked list of ptokens</span><span class="named-paragraph-number">14.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-lp.html#SP14_1" class="named-paragraph-link"><span class="named-paragraph">Parse the row of production tokens into a linked list of ptokens</span><span class="named-paragraph-number">14.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
@ -730,9 +715,8 @@ becomes a fixed word; otherwise it could be any of the five categories.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">result_index</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">result_index</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_starts</span><span class="plain-syntax"> = -1; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_ends</span><span class="plain-syntax"> = -1;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_starts</span><span class="plain-syntax"> = -1; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_ends</span><span class="plain-syntax"> = -1;</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP1" class="function-link"><span class="function-syntax">Optimiser::initialise_ptoken_data</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">strut_number</span><span class="plain-syntax"> = -1;</span>
|
<span class="plain-syntax"> </span><a href="4-ins.html#SP3" class="function-link"><span class="function-syntax">Instrumentation::initialise_ptoken_data</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_is_fast</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="4-lp.html#SP16">§16</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="4-lp.html#SP16">§16</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP16_2"></a><b>§16.2. </b>If the text refers to a nonterminal which doesn't yet exist, then this
|
<p class="commentary firstcommentary"><a id="SP16_2"></a><b>§16.2. </b>If the text refers to a nonterminal which doesn't yet exist, then this
|
||||||
|
@ -765,98 +749,8 @@ never returns <span class="extract"><span class="extract-syntax">NULL</span></sp
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">) </span><a href="4-to.html#SP19" class="function-link"><span class="function-syntax">Optimiser::flag_words</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pc</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">) </span><a href="4-to.html#SP19" class="function-link"><span class="function-syntax">Optimiser::flag_words</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="identifier-syntax">pc</span><span class="plain-syntax">);</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="4-lp.html#SP16">§16</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="4-lp.html#SP16">§16</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP17"></a><b>§17. Logging. </b>Descending these wheels within wheels:
|
|
||||||
</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">LoadPreform::log</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</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">detailed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</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">INSTRUMENTED_PREFORM</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%d/%d: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_matches</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_tries</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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%V: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::log_range_requirement</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">));</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">internal_definition</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" (internal)\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="plain-syntax"> </span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_production_list</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">next_production_list</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" $J:\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">definition_language</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">first_production</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">next_production</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">); </span><a href="4-lp.html#SP18" class="function-link"><span class="function-syntax">LoadPreform::log_production</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">detailed</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">INSTRUMENTED_PREFORM</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" %d/%d: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_matches</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_tries</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP12" class="function-link"><span class="function-syntax">Wordings::nonempty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">sample_text</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"<%W>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">sample_text</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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" ==> "</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::log_range_requirement</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_req</span><span class="plain-syntax">));</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" min %d, max %d\n\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
</pre>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP18"></a><b>§18. </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">LoadPreform::log_production</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">LoadPreform::log_production</span></span>:<br/><a href="4-lp.html#SP17">§17</a><br/>Preform - <a href="4-prf.html#SP1_2">§1.2</a>, <a href="4-prf.html#SP1_2_1">§1.2.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">detailed</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">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"<empty-production>"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><a href="4-lp.html#SP19" class="function-link"><span class="function-syntax">LoadPreform::log_ptoken</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">detailed</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" "</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
</pre>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP19"></a><b>§19. </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">LoadPreform::log_ptoken</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">LoadPreform::log_ptoken</span></span>:<br/><a href="4-lp.html#SP18">§18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">detailed</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">detailed</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"(@%d)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</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">detailed</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">strut_number</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"(S%d)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">strut_number</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">disallow_unexpected_upper</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"_"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"^"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_starts</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"{"</span><span class="plain-syntax">); </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">detailed</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%d:"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_starts</span><span class="plain-syntax">); }</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_ptoken</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">alt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%V"</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</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">detailed</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"=%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">result_index</span><span class="plain-syntax">);</span>
|
|
||||||
<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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%V"</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"/"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_ends</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">detailed</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">":%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_ends</span><span class="plain-syntax">); </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"}"</span><span class="plain-syntax">); }</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
</pre>
|
|
||||||
<p class="commentary firstcommentary"><a id="SP20"></a><b>§20. </b>A less detailed form used in linguistic problem messages:
|
|
||||||
</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">LoadPreform::write_ptoken</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">disallow_unexpected_upper</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"_"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"^"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_starts</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"{"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_ptoken</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">alt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%V"</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">);</span>
|
|
||||||
<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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%V"</span><span class="plain-syntax">, </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"/"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_ends</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"}"</span><span class="plain-syntax">);</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
</pre>
|
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="4-nnt.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresscurrent">lp</li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progressnext"><a href="4-to.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="4-nnt.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresscurrent">lp</li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progresssection"><a href="4-ins.html">ins</a></li><li class="progressnext"><a href="4-to.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -20,20 +20,6 @@ function togglePopup(material_id) {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
<script>
|
|
||||||
MathJax = {
|
|
||||||
tex: {
|
|
||||||
inlineMath: '$', '$'], ['\\(', '\\)'
|
|
||||||
},
|
|
||||||
svg: {
|
|
||||||
fontCache: 'global'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript" id="MathJax-script" async
|
|
||||||
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
|
||||||
|
@ -81,7 +67,7 @@ MathJax = {
|
||||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Shared Modules</a></li><li><a href="index.html">words</a></li><li><a href="index.html#4">Chapter 4: Parsing</a></li><li><b>Nonterminals</b></li></ul></div>
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Shared Modules</a></li><li><a href="index.html">words</a></li><li><a href="index.html#4">Chapter 4: Parsing</a></li><li><b>Nonterminals</b></li></ul></div>
|
||||||
<p class="purpose">The angle-bracketed terms appearing in Preform grammar.</p>
|
<p class="purpose">The angle-bracketed terms appearing in Preform grammar.</p>
|
||||||
|
|
||||||
<ul class="toc"><li><a href="4-nnt.html#SP1">§1. How nonterminals are stored</a></li><li><a href="4-nnt.html#SP9">§9. Word ranges in a nonterminal</a></li><li><a href="4-nnt.html#SP10">§10. Other results</a></li><li><a href="4-nnt.html#SP11">§11. Watching</a></li></ul><hr class="tocbar">
|
<ul class="toc"><li><a href="4-nnt.html#SP1">§1. How nonterminals are stored</a></li><li><a href="4-nnt.html#SP9">§9. Word ranges in a nonterminal</a></li><li><a href="4-nnt.html#SP10">§10. Other results</a></li></ul><hr class="tocbar">
|
||||||
|
|
||||||
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. How nonterminals are stored. </b>Each different nonterminal defined in the <span class="extract"><span class="extract-syntax">Syntax.preform</span></span> code read in,
|
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. How nonterminals are stored. </b>Each different nonterminal defined in the <span class="extract"><span class="extract-syntax">Syntax.preform</span></span> code read in,
|
||||||
such as <any-integer>, is going to correspond to a global variable in the
|
such as <any-integer>, is going to correspond to a global variable in the
|
||||||
|
@ -194,7 +180,7 @@ use the constant <span class="extract"><span class="extract-syntax">INFINITE_WOR
|
||||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax"> </span><span class="constant-syntax">1000000000</span>
|
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax"> </span><span class="constant-syntax">1000000000</span>
|
||||||
<span class="definition-keyword">define</span> <span class="identifier-syntax">INTERNAL_NONTERMINAL</span><span class="plain-syntax">(</span><span class="identifier-syntax">quotedname</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">min</span><span class="plain-syntax">, </span><span class="identifier-syntax">max</span><span class="plain-syntax">)</span>
|
<span class="definition-keyword">define</span> <span class="identifier-syntax">INTERNAL_NONTERMINAL</span><span class="plain-syntax">(</span><span class="identifier-syntax">quotedname</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">min</span><span class="plain-syntax">, </span><span class="identifier-syntax">max</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><a href="4-nnt.html#SP8" class="function-link"><span class="function-syntax">Nonterminals::find</span></a><span class="plain-syntax">(</span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">quotedname</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><a href="4-nnt.html#SP8" class="function-link"><span class="function-syntax">Nonterminals::find</span></a><span class="plain-syntax">(</span><a href="2-vcb.html#SP15" class="function-link"><span class="function-syntax">Vocabulary::entry_for_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">quotedname</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">min</span><span class="plain-syntax">; </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">max</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">min</span><span class="plain-syntax">; </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">max</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">-></span><span class="element-syntax">internal_definition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">##</span><span class="identifier-syntax">R</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">-></span><span class="element-syntax">internal_definition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">##</span><span class="identifier-syntax">R</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">-></span><span class="element-syntax">marked_internal</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">identifier</span><span class="plain-syntax">-></span><span class="element-syntax">marked_internal</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -221,22 +207,13 @@ textual name is referred to as an "ID".
|
||||||
<span class="plain-syntax"> </span><span class="comment-syntax"> Storage for most recent correct match</span>
|
<span class="plain-syntax"> </span><span class="comment-syntax"> Storage for most recent correct match</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">range_result</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_RANGES_PER_PRODUCTION</span><span class="plain-syntax">]; </span><span class="comment-syntax"> storage for word ranges matched</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">range_result</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_RANGES_PER_PRODUCTION</span><span class="plain-syntax">]; </span><span class="comment-syntax"> storage for word ranges matched</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="comment-syntax"> Optimiser data</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">nonterminal_optimisation_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">opt</span><span class="plain-syntax">; </span><span class="comment-syntax"> see </span><a href="4-to.html" class="internal">The Optimiser</a>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">optimised_in_this_pass</span><span class="plain-syntax">; </span><span class="comment-syntax"> have the following been worked out yet?</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">nonterminal_instrumentation_data</span><span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">; </span><span class="comment-syntax"> see </span><a href="4-ins.html" class="internal">Instrumentation</a>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">min_nt_words</span><span class="plain-syntax">, </span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">; </span><span class="comment-syntax"> for speed</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> </span><span class="identifier-syntax">nonterminal_req</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">nt_req_bit</span><span class="plain-syntax">; </span><span class="comment-syntax"> which hashing category the words belong to, or </span>\(-1\)<span class="comment-syntax"> if none</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number_words_by_production</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">flag_words_in_production</span><span class="plain-syntax">;</span>
|
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="comment-syntax"> For debugging only</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">watched</span><span class="plain-syntax">; </span><span class="comment-syntax"> watch goings-on to the debugging log</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">nonterminal_tries</span><span class="plain-syntax">; </span><span class="comment-syntax"> for statistics collected in instrumented mode</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">nonterminal_matches</span><span class="plain-syntax">; </span><span class="comment-syntax"> ditto</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||||
<span class="plain-syntax">} </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax">} </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure nonterminal is accessed in 4/lp, 4/to, 4/prf and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure nonterminal is accessed in 4/lp, 4/to, 4/prf, 4/ins and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>A few notes on this are in order:
|
<p class="commentary firstcommentary"><a id="SP6"></a><b>§6. </b>A few notes on this are in order:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -289,20 +266,15 @@ when Preform grammar is parsed, not when Inform text is parsed.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">internal_definition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">internal_definition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">voracious</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">voracious</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="constant-syntax">MAX_RANGES_PER_PRODUCTION</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">range_result</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] = </span><span class="constant-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_production_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_production_list</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">compositor_fn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">compositor_fn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">multiplicitous</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">multiplicitous</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">optimised_in_this_pass</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_req_bit</span><span class="plain-syntax"> = -1;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">number_words_by_production</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">flag_words_in_production</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">watched</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax"><</span><span class="constant-syntax">MAX_RANGES_PER_PRODUCTION</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++)</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_tries</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_matches</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">range_result</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] = </span><span class="constant-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
<span class="plain-syntax"> </span><a href="4-to.html#SP1" class="function-link"><span class="function-syntax">Optimiser::initialise_nonterminal_data</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="4-ins.html#SP1" class="function-link"><span class="function-syntax">Instrumentation::initialise_nonterminal_data</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">nt</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">nt</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
@ -350,17 +322,8 @@ any single NT.
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">most_recent_result</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> the variable which </span><span class="extract"><span class="extract-syntax">inweb</span></span><span class="comment-syntax"> writes </span><span class="extract"><span class="extract-syntax"><<r>></span></span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">most_recent_result</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> the variable which </span><span class="extract"><span class="extract-syntax">inweb</span></span><span class="comment-syntax"> writes </span><span class="extract"><span class="extract-syntax"><<r>></span></span>
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">most_recent_result_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> the variable which </span><span class="extract"><span class="extract-syntax">inweb</span></span><span class="comment-syntax"> writes </span><span class="extract"><span class="extract-syntax"><<rp>></span></span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">most_recent_result_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> the variable which </span><span class="extract"><span class="extract-syntax">inweb</span></span><span class="comment-syntax"> writes </span><span class="extract"><span class="extract-syntax"><<rp>></span></span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary firstcommentary"><a id="SP11"></a><b>§11. Watching. </b>A "watched" nonterminal is one which the Preform parser logs its usage of;
|
|
||||||
this is helpful when debugging.
|
|
||||||
</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">Nonterminals::watch</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">) {</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">watched</span><span class="plain-syntax"> = </span><span class="identifier-syntax">state</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax">}</span>
|
|
||||||
</pre>
|
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="4-ap.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresscurrent">nnt</li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progressnext"><a href="4-lp.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="4-ap.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresscurrent">nnt</li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progresssection"><a href="4-ins.html">ins</a></li><li class="progressnext"><a href="4-lp.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -97,14 +97,12 @@ only about 6\% of its time here.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> **</span><span class="identifier-syntax">result_p</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">result_p</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">start_of_nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">time</span><span class="plain-syntax">(0);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">time_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">start_of_nt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">time</span><span class="plain-syntax">(0);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</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">"can't parse a null nonterminal"</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">nt</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">"can't parse a null nonterminal"</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">INSTRUMENTED_PREFORM</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_tries</span><span class="plain-syntax">++;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_tries</span><span class="plain-syntax">++;</span>
|
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">success_rval</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="comment-syntax"> what to return in the event of a successful match</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">success_rval</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="comment-syntax"> what to return in the event of a successful match</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">fail_nonterminal_quantum</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">fail_nonterminal_quantum</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">teppic</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ptraci</span><span class="plain-syntax">; </span><span class="comment-syntax"> Teppic saves Ptraci</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">teppic</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ptraci</span><span class="plain-syntax">; </span><span class="comment-syntax"> Teppic saves Ptraci</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ptraci</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">watched</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ptraci</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">ins</span><span class="plain-syntax">.</span><span class="element-syntax">watched</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">ptraci</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">ptraci</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">preform_lookahead_mode</span><span class="plain-syntax">) </span><span class="identifier-syntax">ptraci</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">preform_lookahead_mode</span><span class="plain-syntax">) </span><span class="identifier-syntax">ptraci</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
|
@ -112,10 +110,9 @@ only about 6\% of its time here.
|
||||||
<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">input_length</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::length</span></a><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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">input_length</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::length</span></a><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">nt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</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">input_length</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">input_length</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">))) {</span>
|
<span class="plain-syntax"> ((</span><span class="identifier-syntax">input_length</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">min_nt_words</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">input_length</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">)))</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2" class="named-paragraph-link"><span class="named-paragraph">Try to match the input text to the nonterminal</span><span class="named-paragraph-number">1.2</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2" class="named-paragraph-link"><span class="named-paragraph">Try to match the input text to the nonterminal</span><span class="named-paragraph-number">1.2</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">The nonterminal has failed to parse</span><span class="named-paragraph-number">1.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">The nonterminal has failed to parse</span><span class="named-paragraph-number">1.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
@ -127,6 +124,7 @@ only about 6\% of its time here.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><a href="4-ins.html#SP1" class="function-link"><span class="function-syntax">Instrumentation::note_nonterminal_fail</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ptraci</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Failed %V (time %d)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">time</span><span class="plain-syntax">(0)-</span><span class="identifier-syntax">start_of_nt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ptraci</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Failed %V (time %d)\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">time</span><span class="plain-syntax">(0)-</span><span class="identifier-syntax">start_of_nt</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ptraci</span><span class="plain-syntax"> = </span><span class="identifier-syntax">teppic</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ptraci</span><span class="plain-syntax"> = </span><span class="identifier-syntax">teppic</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
|
@ -140,11 +138,9 @@ and <span class="extract"><span class="extract-syntax">QP</span></span> will hol
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
|
<span class="plain-syntax"> </span><a href="4-ins.html#SP1" class="function-link"><span class="function-syntax">Instrumentation::note_nonterminal_match</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</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">result</span><span class="plain-syntax">) *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Q</span><span class="plain-syntax">; </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">result_p</span><span class="plain-syntax">) *</span><span class="identifier-syntax">result_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">QP</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">result</span><span class="plain-syntax">) *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Q</span><span class="plain-syntax">; </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">result_p</span><span class="plain-syntax">) *</span><span class="identifier-syntax">result_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">QP</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">most_recent_result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Q</span><span class="plain-syntax">; </span><span class="identifier-syntax">most_recent_result_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">QP</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">most_recent_result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Q</span><span class="plain-syntax">; </span><span class="identifier-syntax">most_recent_result_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">QP</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">INSTRUMENTED_PREFORM</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_matches</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">ptraci</span><span class="plain-syntax"> = </span><span class="identifier-syntax">teppic</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ptraci</span><span class="plain-syntax"> = </span><span class="identifier-syntax">teppic</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">success_rval</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">success_rval</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -165,7 +161,7 @@ an internal NT, or try all possible productions for an external one.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">unoptimised</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">unoptimised</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">internal_definition</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">internal_definition</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">voracious</span><span class="plain-syntax">) </span><span class="identifier-syntax">unoptimised</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">voracious</span><span class="plain-syntax">) </span><span class="identifier-syntax">unoptimised</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">unoptimised</span><span class="plain-syntax">) || (</span><a href="4-to.html#SP5" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_violates</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">unoptimised</span><span class="plain-syntax">) || (</span><a href="4-to.html#SP5" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_violates</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">, </span><span class="identifier-syntax">Q</span><span class="plain-syntax">; </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">QP</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">, </span><span class="identifier-syntax">Q</span><span class="plain-syntax">; </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">QP</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">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">) >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = (*(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">internal_definition</span><span class="plain-syntax">))(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, &</span><span class="identifier-syntax">Q</span><span class="plain-syntax">, &</span><span class="identifier-syntax">QP</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">) >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = (*(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">internal_definition</span><span class="plain-syntax">))(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, &</span><span class="identifier-syntax">Q</span><span class="plain-syntax">, &</span><span class="identifier-syntax">QP</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">r</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="identifier-syntax">Q</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">else</span><span class="plain-syntax"> { </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="identifier-syntax">Q</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; }</span>
|
||||||
|
@ -177,12 +173,12 @@ an internal NT, or try all possible productions for an external one.
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">ptraci</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">ptraci</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%V: <%W> violates "</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%V: <%W> violates "</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::log_range_requirement</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::log_range_requirement</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">unoptimised</span><span class="plain-syntax">) || (</span><a href="4-to.html#SP5" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_violates</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">unoptimised</span><span class="plain-syntax">) || (</span><a href="4-to.html#SP5" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_violates</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">)) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">acc_result</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="identifier-syntax">acc_result</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">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_production_list</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">next_production_list</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_production_list</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">next_production_list</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -193,8 +189,8 @@ an internal NT, or try all possible productions for an external one.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">first_production</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">next_production</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">first_production</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">next_production</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">violates</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">violates</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">unoptimised</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">unoptimised</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_req</span><span class="plain-syntax">.</span><span class="element-syntax">ditto_flag</span><span class="plain-syntax">) </span><span class="identifier-syntax">violates</span><span class="plain-syntax"> = </span><span class="identifier-syntax">last_v</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">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">production_req</span><span class="plain-syntax">.</span><span class="element-syntax">ditto_flag</span><span class="plain-syntax">) </span><span class="identifier-syntax">violates</span><span class="plain-syntax"> = </span><span class="identifier-syntax">last_v</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">violates</span><span class="plain-syntax"> = </span><a href="4-to.html#SP5" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_violates</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_req</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">violates</span><span class="plain-syntax"> = </span><a href="4-to.html#SP5" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_violates</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">production_req</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">last_v</span><span class="plain-syntax"> = </span><span class="identifier-syntax">violates</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">last_v</span><span class="plain-syntax"> = </span><span class="identifier-syntax">violates</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">violates</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">violates</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -202,9 +198,9 @@ an internal NT, or try all possible productions for an external one.
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">ptraci</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">ptraci</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"production in %V: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"production in %V: "</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-lp.html#SP18" class="function-link"><span class="function-syntax">LoadPreform::log_production</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="4-ins.html#SP6" class="function-link"><span class="function-syntax">Instrumentation::log_production</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">": <%W> violates "</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">": <%W> violates "</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::log_range_requirement</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_req</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::log_range_requirement</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">production_req</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
|
@ -218,7 +214,7 @@ an internal NT, or try all possible productions for an external one.
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">ptraci</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">ptraci</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%V: <%W> violates "</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"%V: <%W> violates "</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::log_range_requirement</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::log_range_requirement</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
|
@ -236,25 +232,16 @@ text against a production.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ptraci</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">ptraci</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_INDENT</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_INDENT</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Log the production match number</span><span class="named-paragraph-number">1.2.1.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Log the production match number</span><span class="named-paragraph-number">1.2.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-lp.html#SP18" class="function-link"><span class="function-syntax">LoadPreform::log_production</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">); </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="4-ins.html#SP6" class="function-link"><span class="function-syntax">Instrumentation::log_production</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">); </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\n"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</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">INSTRUMENTED_PREFORM</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_tries</span><span class="plain-syntax">++;</span>
|
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">slow_scan_needed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">slow_scan_needed</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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">added_to_result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">added_to_result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</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">endif</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">input_length</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">min_pr_words</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">input_length</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_pr_words</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">input_length</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">min_pr_words</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">input_length</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_pr_words</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">Q</span><span class="plain-syntax">; </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">QP</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">Q</span><span class="plain-syntax">; </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">QP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_2" class="named-paragraph-link"><span class="named-paragraph">Actually parse the given production, going to Fail if we can't</span><span class="named-paragraph-number">1.2.1.2</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_2" class="named-paragraph-link"><span class="named-paragraph">Actually parse the given production, going to Fail if we can't</span><span class="named-paragraph-number">1.2.1.2</span></a></span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="4-ins.html#SP2" class="function-link"><span class="function-syntax">Instrumentation::note_production_match</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</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">INSTRUMENTED_PREFORM</span><span class="plain-syntax"> </span><span class="comment-syntax"> record the sentence containing the longest example</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_matches</span><span class="plain-syntax">++;</span>
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">sample_text</span><span class="plain-syntax">) < </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">sample_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
|
|
||||||
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
|
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ptraci</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">ptraci</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Log the production match number</span><span class="named-paragraph-number">1.2.1.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Log the production match number</span><span class="named-paragraph-number">1.2.1.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"succeeded (%s): "</span><span class="plain-syntax">, (</span><span class="identifier-syntax">slow_scan_needed</span><span class="plain-syntax">)?</span><span class="string-syntax">"slowly"</span><span class="plain-syntax">:</span><span class="string-syntax">"quickly"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"succeeded (%s): "</span><span class="plain-syntax">, (</span><span class="identifier-syntax">slow_scan_needed</span><span class="plain-syntax">)?</span><span class="string-syntax">"slowly"</span><span class="plain-syntax">:</span><span class="string-syntax">"quickly"</span><span class="plain-syntax">);</span>
|
||||||
|
@ -264,6 +251,7 @@ text against a production.
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
|
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Fail:</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Fail:</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="4-ins.html#SP2" class="function-link"><span class="function-syntax">Instrumentation::note_production_fail</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pr</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">ptraci</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">ptraci</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Log the production match number</span><span class="named-paragraph-number">1.2.1.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Log the production match number</span><span class="named-paragraph-number">1.2.1.1</span></a></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">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
|
||||||
|
@ -374,8 +362,8 @@ are in those positions.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</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">wn</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">tc</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">wn</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">tc</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax">, </span><span class="identifier-syntax">tc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax">, </span><span class="identifier-syntax">tc</span><span class="plain-syntax">++) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax">, </span><span class="identifier-syntax">tc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax">, </span><span class="identifier-syntax">tc</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_is_fast</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_is_fast</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">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</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">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_position</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">p</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)+</span><span class="identifier-syntax">p</span><span class="plain-syntax">-1;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)+</span><span class="identifier-syntax">p</span><span class="plain-syntax">-1;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::last_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)+</span><span class="identifier-syntax">p</span><span class="plain-syntax">+1;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::last_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)+</span><span class="identifier-syntax">p</span><span class="plain-syntax">+1;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-prf.html#SP3" class="function-link"><span class="function-syntax">Preform::parse_fixed_word_ptoken</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-prf.html#SP3" class="function-link"><span class="function-syntax">Preform::parse_fixed_word_ptoken</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">, </span><span class="identifier-syntax">pt</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -404,7 +392,7 @@ and that for each \(i\) the \(i\)-th strut matches the text beginning at \(s_i\)
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">spos</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_STRUTS_PER_PRODUCTION</span><span class="plain-syntax">]; </span><span class="comment-syntax"> word numbers for where we are trying the struts</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_STRUTS_PER_PRODUCTION</span><span class="plain-syntax">]; </span><span class="comment-syntax"> word numbers for where we are trying the struts</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">NS</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">no_struts</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">NS</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">no_struts</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_2_3_1" class="named-paragraph-link"><span class="named-paragraph">Start from the lexicographically earliest strut position</span><span class="named-paragraph-number">1.2.1.2.3.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_2_3_1" class="named-paragraph-link"><span class="named-paragraph">Start from the lexicographically earliest strut position</span><span class="named-paragraph-number">1.2.1.2.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">backtrack_token</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">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">backtrack_token</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">backtrack_index</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">backtrack_to</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">backtrack_tc</span><span class="plain-syntax"> = -1;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">backtrack_index</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">backtrack_to</span><span class="plain-syntax"> = -1, </span><span class="identifier-syntax">backtrack_tc</span><span class="plain-syntax"> = -1;</span>
|
||||||
|
@ -433,14 +421,14 @@ handling the popular case of one strut separately.
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">NS</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</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">NS</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[0] = </span><a href="4-prf.html#SP2" class="function-link"><span class="function-syntax">Preform::next_strut_posn_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">struts</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[0], </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[0] = </span><a href="4-prf.html#SP2" class="function-link"><span class="function-syntax">Preform::next_strut_posn_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">struts</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[0], </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><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">spos</span><span class="plain-syntax">[0] == -1) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</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">spos</span><span class="plain-syntax">[0] == -1) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">NS</span><span class="plain-syntax"> > </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">NS</span><span class="plain-syntax"> > </span><span class="constant-syntax">1</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">s</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><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">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">s</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">s</span><span class="plain-syntax"><</span><span class="identifier-syntax">NS</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax">++) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">s</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">s</span><span class="plain-syntax"><</span><span class="identifier-syntax">NS</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">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] = </span><a href="4-prf.html#SP2" class="function-link"><span class="function-syntax">Preform::next_strut_posn_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">struts</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] = </span><a href="4-prf.html#SP2" class="function-link"><span class="function-syntax">Preform::next_strut_posn_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">struts</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] == -1) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</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">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] == -1) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] + </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] + </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] + </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] + </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -457,20 +445,20 @@ being unable to move forwards, at which point, we've lost.
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">NS</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</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">NS</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">NS</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">NS</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[0] = </span><a href="4-prf.html#SP2" class="function-link"><span class="function-syntax">Preform::next_strut_posn_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">struts</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[0]+1);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[0] = </span><a href="4-prf.html#SP2" class="function-link"><span class="function-syntax">Preform::next_strut_posn_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">struts</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[0]+1);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spos</span><span class="plain-syntax">[0] == -1) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</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">spos</span><span class="plain-syntax">[0] == -1) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">NS</span><span class="plain-syntax"> > </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">NS</span><span class="plain-syntax"> > </span><span class="constant-syntax">1</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">s</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">s</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">s</span><span class="plain-syntax">=</span><span class="identifier-syntax">NS</span><span class="plain-syntax">-1; </span><span class="identifier-syntax">s</span><span class="plain-syntax">>=0; </span><span class="identifier-syntax">s</span><span class="plain-syntax">--) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">s</span><span class="plain-syntax">=</span><span class="identifier-syntax">NS</span><span class="plain-syntax">-1; </span><span class="identifier-syntax">s</span><span class="plain-syntax">>=0; </span><span class="identifier-syntax">s</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">n</span><span class="plain-syntax"> = </span><a href="4-prf.html#SP2" class="function-link"><span class="function-syntax">Preform::next_strut_posn_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">struts</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">]+1);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><a href="4-prf.html#SP2" class="function-link"><span class="function-syntax">Preform::next_strut_posn_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">struts</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">]+1);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> != -1) { </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] = </span><span class="identifier-syntax">n</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">; }</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> != -1) { </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] = </span><span class="identifier-syntax">n</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">; }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">s</span><span class="plain-syntax"> == -1) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</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"> == -1) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</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">from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] + </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</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">from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] + </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax">++;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">s</span><span class="plain-syntax"><</span><span class="identifier-syntax">NS</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax">++) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">s</span><span class="plain-syntax"><</span><span class="identifier-syntax">NS</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">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] = </span><a href="4-prf.html#SP2" class="function-link"><span class="function-syntax">Preform::next_strut_posn_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">struts</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] = </span><a href="4-prf.html#SP2" class="function-link"><span class="function-syntax">Preform::next_strut_posn_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">struts</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">], </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] == -1) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</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">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] == -1) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">Fail</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] + </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] + </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] + </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">] + </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -574,11 +562,11 @@ quick no.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">wn</span><span class="plain-syntax"> > </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::last_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">FailThisStrutPosition</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">wn</span><span class="plain-syntax"> > </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::last_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">FailThisStrutPosition</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">wt</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">wt</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">voracious</span><span class="plain-syntax">) </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::last_wn</span></a><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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">voracious</span><span class="plain-syntax">) </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::last_wn</span></a><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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> == </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">))</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> == </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">))</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> + </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> + </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">min_nt_words</span><span class="plain-syntax"> - </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_2_3_3_3_1" class="named-paragraph-link"><span class="named-paragraph">Calculate how much to stretch this elastic ptoken</span><span class="named-paragraph-number">1.2.1.2.3.3.3.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-prf.html#SP1_2_1_2_3_3_3_1" class="named-paragraph-link"><span class="named-paragraph">Calculate how much to stretch this elastic ptoken</span><span class="named-paragraph-number">1.2.1.2.3.3.3.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">pt</span><span class="plain-syntax"> == </span><span class="identifier-syntax">backtrack_token</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">pt</span><span class="plain-syntax"> == </span><span class="identifier-syntax">backtrack_token</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -604,7 +592,7 @@ quick no.
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">q</span><span class="plain-syntax">?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">q</span><span class="plain-syntax">?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">q</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">FailThisStrutPosition</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">q</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">FailThisStrutPosition</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wt</span><span class="plain-syntax">+1;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">wt</span><span class="plain-syntax">+1;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="4-prf.html#SP1_2_1_2_3_3">§1.2.1.2.3.3</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="4-prf.html#SP1_2_1_2_3_3">§1.2.1.2.3.3</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP1_2_1_2_3_3_3_1"></a><b>§1.2.1.2.3.3.3.1. </b>How much text from the input should this ptoken match? We feed it as much
|
<p class="commentary firstcommentary"><a id="SP1_2_1_2_3_3_3_1"></a><b>§1.2.1.2.3.3.3.1. </b>How much text from the input should this ptoken match? We feed it as much
|
||||||
|
@ -634,10 +622,10 @@ probably gives the wrong answer.)
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lookahead</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nextpt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lookahead</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nextpt</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">lookahead</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::last_wn</span></a><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">lookahead</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::last_wn</span></a><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">else</span><span class="plain-syntax"> {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</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">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lookahead</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</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">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lookahead</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_position</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">p</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)+</span><span class="identifier-syntax">p</span><span class="plain-syntax">-2;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)+</span><span class="identifier-syntax">p</span><span class="plain-syntax">-2;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::last_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)+</span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">p</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::last_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)+</span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lookahead</span><span class="plain-syntax">-></span><span class="element-syntax">strut_number</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">lookahead</span><span class="plain-syntax">-></span><span class="element-syntax">strut_number</span><span class="plain-syntax">]-1;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lookahead</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_number</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spos</span><span class="plain-syntax">[</span><span class="identifier-syntax">lookahead</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_number</span><span class="plain-syntax">]-1;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">lookahead</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">lookahead</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> && (</span><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">) == </span><span class="constant-syntax">PTOKEN_ELASTIC</span><span class="plain-syntax">)) {</span>
|
<span class="plain-syntax"> && (</span><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">) == </span><span class="constant-syntax">PTOKEN_ELASTIC</span><span class="plain-syntax">)) {</span>
|
||||||
|
@ -686,10 +674,10 @@ last word in the input text.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">q</span><span class="plain-syntax"> = </span><a href="4-prf.html#SP1" class="function-link"><span class="function-syntax">Preform::parse_nt_against_word_range</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</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">q</span><span class="plain-syntax"> = </span><a href="4-prf.html#SP1" class="function-link"><span class="function-syntax">Preform::parse_nt_against_word_range</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">,</span>
|
||||||
<span class="plain-syntax"> </span><a href="3-wrd.html#SP6" class="function-link"><span class="function-syntax">Wordings::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</span><span class="plain-syntax">+</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">-1),</span>
|
<span class="plain-syntax"> </span><a href="3-wrd.html#SP6" class="function-link"><span class="function-syntax">Wordings::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</span><span class="plain-syntax">+</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">-1),</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="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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">q</span><span class="plain-syntax">?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax">) </span><span class="identifier-syntax">q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">q</span><span class="plain-syntax">?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">q</span><span class="plain-syntax">) </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> += </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</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">q</span><span class="plain-syntax">) </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> += </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pos</span><span class="plain-syntax">-</span><span class="identifier-syntax">from</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">len</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pos</span><span class="plain-syntax">-</span><span class="identifier-syntax">from</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">len</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">;</span>
|
||||||
|
@ -715,7 +703,7 @@ last word in the input text.
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="4-to.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresscurrent">prf</li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progressnext"><a href="4-bn.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="4-to.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresssection"><a href="4-to.html">to</a></li><li class="progresscurrent">prf</li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progresssection"><a href="4-ins.html">ins</a></li><li class="progressnext"><a href="4-bn.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -13,14 +13,6 @@
|
||||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
<script>
|
<script>
|
||||||
function togglePopup(material_id) {
|
|
||||||
var popup = document.getElementById(material_id);
|
|
||||||
popup.classList.toggle("show");
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
||||||
<script>
|
|
||||||
MathJax = {
|
MathJax = {
|
||||||
tex: {
|
tex: {
|
||||||
inlineMath: '$', '$'], ['\\(', '\\)'
|
inlineMath: '$', '$'], ['\\(', '\\)'
|
||||||
|
@ -34,6 +26,14 @@ MathJax = {
|
||||||
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
|
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function togglePopup(material_id) {
|
||||||
|
var popup = document.getElementById(material_id);
|
||||||
|
popup.classList.toggle("show");
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||||
|
|
||||||
|
@ -92,6 +92,53 @@ changed that.
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_round_of_nt_optimisation_made</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">first_round_of_nt_optimisation_made</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">nonterminal_optimisation_data</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">optimised_in_this_pass</span><span class="plain-syntax">; </span><span class="comment-syntax"> have the following been worked out yet?</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">min_nt_words</span><span class="plain-syntax">, </span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">; </span><span class="comment-syntax"> for speed</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> </span><span class="identifier-syntax">nonterminal_req</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">nt_req_bit</span><span class="plain-syntax">; </span><span class="comment-syntax"> which hashing category the words belong to, or </span>\(-1\)<span class="comment-syntax"> if none</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">number_words_by_production</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">unsigned</span><span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">flag_words_in_production</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">} </span><span class="reserved-syntax">nonterminal_optimisation_data</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::initialise_nonterminal_data</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">Optimiser::initialise_nonterminal_data</span></span>:<br/>Nonterminals - <a href="4-nnt.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal_optimisation_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opt</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">opt</span><span class="plain-syntax">-></span><span class="element-syntax">optimised_in_this_pass</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">opt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">opt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">opt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_req_bit</span><span class="plain-syntax"> = -1;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">opt</span><span class="plain-syntax">-></span><span class="element-syntax">number_words_by_production</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">opt</span><span class="plain-syntax">-></span><span class="element-syntax">flag_words_in_production</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::clear_rreq</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">-></span><span class="identifier-syntax">nonterminal_req</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ptoken_optimisation_data</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">ptoken_position</span><span class="plain-syntax">; </span><span class="comment-syntax"> fixed position in range: 1, 2, ... for left, -1, -2, ... for right</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">strut_number</span><span class="plain-syntax">; </span><span class="comment-syntax"> if this is part of a strut, what number? or -1 if not</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ptoken_is_fast</span><span class="plain-syntax">; </span><span class="comment-syntax"> can be checked in the fast pass of the parser</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> </span><span class="identifier-syntax">token_req</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax">} </span><span class="reserved-syntax">ptoken_optimisation_data</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::initialise_ptoken_data</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">Optimiser::initialise_ptoken_data</span></span>:<br/>Loading Preform - <a href="4-lp.html#SP16_1">§16.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ptoken_optimisation_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opt</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">opt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</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">opt</span><span class="plain-syntax">-></span><span class="element-syntax">strut_number</span><span class="plain-syntax"> = -1;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">opt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_is_fast</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::clear_rreq</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">-></span><span class="identifier-syntax">token_req</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">production_optimisation_data</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">min_pr_words</span><span class="plain-syntax">, </span><span class="identifier-syntax">max_pr_words</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> </span><span class="identifier-syntax">production_req</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">no_struts</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">struts</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_STRUTS_PER_PRODUCTION</span><span class="plain-syntax">]; </span><span class="comment-syntax"> first ptoken in strut</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_STRUTS_PER_PRODUCTION</span><span class="plain-syntax">]; </span><span class="comment-syntax"> length of the strut in words</span>
|
||||||
|
<span class="plain-syntax">} </span><span class="reserved-syntax">production_optimisation_data</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::initialise_production_data</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">Optimiser::initialise_production_data</span></span>:<br/>Loading Preform - <a href="4-lp.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">production_optimisation_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">opt</span><span class="plain-syntax">) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">opt</span><span class="plain-syntax">-></span><span class="element-syntax">no_struts</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">opt</span><span class="plain-syntax">-></span><span class="element-syntax">min_pr_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">opt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_pr_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::clear_rreq</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">opt</span><span class="plain-syntax">-></span><span class="identifier-syntax">production_req</span><span class="plain-syntax">));</span>
|
||||||
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> {</span>
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">range_requirement</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">no_requirements</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">no_requirements</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">ditto_flag</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">ditto_flag</span><span class="plain-syntax">;</span>
|
||||||
|
@ -106,15 +153,15 @@ changed that.
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_req_bits</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_req_bits</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::optimise_counts</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">Optimiser::optimise_counts</span></span>:<br/>Loading Preform - <a href="4-lp.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::optimise_counts</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">Optimiser::optimise_counts</span></span>:<br/>Loading Preform - <a href="4-lp.html#SP7">§7</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="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::clear_rreq</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::clear_rreq</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">marked_internal</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">marked_internal</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">optimised_in_this_pass</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">optimised_in_this_pass</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="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">optimised_in_this_pass</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">optimised_in_this_pass</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">first_round_of_nt_optimisation_made</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">first_round_of_nt_optimisation_made</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -130,9 +177,9 @@ changed that.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax">) </span><a href="4-to.html#SP2" class="function-link"><span class="function-syntax">Optimiser::optimise_nt_reqs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax">) </span><a href="4-to.html#SP2" class="function-link"><span class="function-syntax">Optimiser::optimise_nt_reqs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">);</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">Optimiser::optimise_nt</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">Optimiser::optimise_nt</span></span>:<br/><a href="4-to.html#SP1_7">§1.7</a>, <a href="4-to.html#SP18">§18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::optimise_nt</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">Optimiser::optimise_nt</span></span>:<br/><a href="4-to.html#SP1_7">§1.7</a>, <a href="4-to.html#SP18">§18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">optimised_in_this_pass</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">optimised_in_this_pass</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">optimised_in_this_pass</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">optimised_in_this_pass</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-to.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Compute the minimum and maximum match lengths</span><span class="named-paragraph-number">1.1</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-to.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Compute the minimum and maximum match lengths</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">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax">;</span>
|
||||||
|
@ -149,7 +196,7 @@ changed that.
|
||||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-to.html#SP1_7" class="named-paragraph-link"><span class="named-paragraph">Mark the vocabulary's incidence list with this nonterminal</span><span class="named-paragraph-number">1.7</span></a></span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-to.html#SP1_7" class="named-paragraph-link"><span class="named-paragraph">Mark the vocabulary's incidence list with this nonterminal</span><span class="named-paragraph-number">1.7</span></a></span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>The structure range_requirement is accessed in 4/prf and here.</li></ul>
|
<ul class="endnotetexts"><li>The structure nonterminal_optimisation_data is accessed in 4/nnt, 4/prf, 4/ins and here.</li><li>The structure ptoken_optimisation_data is accessed in 4/prf, 4/ins and here.</li><li>The structure production_optimisation_data is accessed in 4/prf, 4/ins and here.</li><li>The structure range_requirement is accessed in 4/prf and here.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP1_1"></a><b>§1.1. </b>The minimum matched text length for a nonterminal is the smallest of the
|
<p class="commentary firstcommentary"><a id="SP1_1"></a><b>§1.1. </b>The minimum matched text length for a nonterminal is the smallest of the
|
||||||
minima for its possible productions; for a production, it's the sum of the
|
minima for its possible productions; for a production, it's the sum of the
|
||||||
minimum match lengths of its tokens.
|
minimum match lengths of its tokens.
|
||||||
|
@ -173,7 +220,7 @@ minimum match lengths of its tokens.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">min_p</span><span class="plain-syntax"> > </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">) </span><span class="identifier-syntax">min_p</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</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">min_p</span><span class="plain-syntax"> > </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">) </span><span class="identifier-syntax">min_p</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</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">max_p</span><span class="plain-syntax"> > </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">) </span><span class="identifier-syntax">max_p</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</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">max_p</span><span class="plain-syntax"> > </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">) </span><span class="identifier-syntax">max_p</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">min_pr_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">min_p</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_pr_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">max_p</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">min_pr_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">min_p</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_pr_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">max_p</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">min</span><span class="plain-syntax"> == -1) && (</span><span class="identifier-syntax">max</span><span class="plain-syntax"> == -1)) { </span><span class="identifier-syntax">min</span><span class="plain-syntax"> = </span><span class="identifier-syntax">min_p</span><span class="plain-syntax">; </span><span class="identifier-syntax">max</span><span class="plain-syntax"> = </span><span class="identifier-syntax">max_p</span><span class="plain-syntax">; }</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">min</span><span class="plain-syntax"> == -1) && (</span><span class="identifier-syntax">max</span><span class="plain-syntax"> == -1)) { </span><span class="identifier-syntax">min</span><span class="plain-syntax"> = </span><span class="identifier-syntax">min_p</span><span class="plain-syntax">; </span><span class="identifier-syntax">max</span><span class="plain-syntax"> = </span><span class="identifier-syntax">max_p</span><span class="plain-syntax">; }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</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">min_p</span><span class="plain-syntax"> < </span><span class="identifier-syntax">min</span><span class="plain-syntax">) </span><span class="identifier-syntax">min</span><span class="plain-syntax"> = </span><span class="identifier-syntax">min_p</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">min_p</span><span class="plain-syntax"> < </span><span class="identifier-syntax">min</span><span class="plain-syntax">) </span><span class="identifier-syntax">min</span><span class="plain-syntax"> = </span><span class="identifier-syntax">min_p</span><span class="plain-syntax">;</span>
|
||||||
|
@ -182,7 +229,7 @@ minimum match lengths of its tokens.
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">min</span><span class="plain-syntax"> >= </span><span class="constant-syntax">1</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">min</span><span class="plain-syntax"> >= </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">min</span><span class="plain-syntax">; </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">max</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">min</span><span class="plain-syntax">; </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax"> = </span><span class="identifier-syntax">max</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="4-to.html#SP1">§1</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="4-to.html#SP1">§1</a>.</li></ul>
|
||||||
|
@ -211,10 +258,10 @@ starts and finishes; it's not enough just to know where it starts.
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">last</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">last</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</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><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</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><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</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">posn</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> != </span><span class="constant-syntax">PTOKEN_ELASTIC</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">posn</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> != </span><span class="constant-syntax">PTOKEN_ELASTIC</span><span class="plain-syntax">)) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">posn</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">posn</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">posn</span><span class="plain-syntax"> += </span><span class="identifier-syntax">L</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">posn</span><span class="plain-syntax"> += </span><span class="identifier-syntax">L</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
<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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> thus clearing any expired positions from earlier</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_position</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> thus clearing any expired positions from earlier</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">posn</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">posn</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
|
@ -236,10 +283,10 @@ production, but this is never larger than about 10.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">posn</span><span class="plain-syntax"> = -1;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">posn</span><span class="plain-syntax"> = -1;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">last</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; ) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">last</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</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="comment-syntax"> don't use a back-end position if there's a front one</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_position</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="comment-syntax"> don't use a back-end position if there's a front one</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><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</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><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</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">posn</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> != </span><span class="constant-syntax">PTOKEN_ELASTIC</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">posn</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> != </span><span class="constant-syntax">PTOKEN_ELASTIC</span><span class="plain-syntax">)) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">posn</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">posn</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">posn</span><span class="plain-syntax"> -= </span><span class="identifier-syntax">L</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">posn</span><span class="plain-syntax"> -= </span><span class="identifier-syntax">L</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||||
|
|
||||||
|
@ -289,20 +336,22 @@ position then all of them have, but we're in no hurry so we don't exploit that.)
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">no_struts</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">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">no_struts</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">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">) != </span><span class="constant-syntax">PTOKEN_ELASTIC</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_position</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">no_struts</span><span class="plain-syntax"> >= </span><span class="constant-syntax">MAX_STRUTS_PER_PRODUCTION</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> (</span><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">) != </span><span class="constant-syntax">PTOKEN_ELASTIC</span><span class="plain-syntax">)) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">struts</span><span class="plain-syntax">[</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">no_struts</span><span class="plain-syntax">] = </span><span class="identifier-syntax">pt</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">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">no_struts</span><span class="plain-syntax"> >= </span><span class="constant-syntax">MAX_STRUTS_PER_PRODUCTION</span><span class="plain-syntax">) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">no_struts</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">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">struts</span><span class="plain-syntax">[</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">no_struts</span><span class="plain-syntax">] = </span><span class="identifier-syntax">pt</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">) != </span><span class="constant-syntax">PTOKEN_ELASTIC</span><span class="plain-syntax">)) {</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">no_struts</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">strut_number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">no_struts</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_position</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">pr</span><span class="plain-syntax">-></span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">no_struts</span><span class="plain-syntax">] += </span><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> (</span><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">) != </span><span class="constant-syntax">PTOKEN_ELASTIC</span><span class="plain-syntax">)) {</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_number</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">no_struts</span><span class="plain-syntax">;</span>
|
||||||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">strut_lengths</span><span class="plain-syntax">[</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">no_struts</span><span class="plain-syntax">] += </span><a href="4-to.html#SP17" class="function-link"><span class="function-syntax">Optimiser::ptoken_width</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">; </span><span class="comment-syntax"> should be impossible</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">; </span><span class="comment-syntax"> should be impossible</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">no_struts</span><span class="plain-syntax">++;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">no_struts</span><span class="plain-syntax">++;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -313,9 +362,9 @@ position then all of them have, but we're in no hurry so we don't exploit that.)
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_position</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_position</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_starts</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_ends</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_starts</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">range_ends</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_is_fast</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">ptoken_is_fast</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
</pre>
|
</pre>
|
||||||
<ul class="endnotetexts"><li>This code is used in <a href="4-to.html#SP1">§1</a>.</li></ul>
|
<ul class="endnotetexts"><li>This code is used in <a href="4-to.html#SP1">§1</a>.</li></ul>
|
||||||
<p class="commentary firstcommentary"><a id="SP1_7"></a><b>§1.7. </b>Weak requirement: one word in range must match one of these bits
|
<p class="commentary firstcommentary"><a id="SP1_7"></a><b>§1.7. </b>Weak requirement: one word in range must match one of these bits
|
||||||
|
@ -327,7 +376,7 @@ Strong ": all bits in this range must be matched by one word
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<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">first_production</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_production</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::clear_rreq</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::clear_rreq</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</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">PREFORM_CIRCULARITY_BREAKER</span>
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREFORM_CIRCULARITY_BREAKER</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PREFORM_CIRCULARITY_BREAKER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">PREFORM_CIRCULARITY_BREAKER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</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">endif</span>
|
||||||
|
@ -354,27 +403,27 @@ Strong ": all bits in this range must be matched by one word
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">all</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">first</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">all</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">first</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">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">first_ptoken</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">next_ptoken</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::clear_rreq</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">token_req</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::clear_rreq</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">token_req</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_ptoken</span><span class="plain-syntax">)</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">alternative_ptoken</span><span class="plain-syntax">)</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP3" class="function-link"><span class="function-syntax">Optimiser::set_nt_incidence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP3" class="function-link"><span class="function-syntax">Optimiser::set_nt_incidence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">alt</span><span class="plain-syntax">-></span><span class="element-syntax">ve_pt</span><span class="plain-syntax">, </span><span class="identifier-syntax">nt</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::atomic_rreq</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">token_req</span><span class="plain-syntax">), </span><span class="identifier-syntax">nt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::atomic_rreq</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">token_req</span><span class="plain-syntax">), </span><span class="identifier-syntax">nt</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">all</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">all</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">self_referential</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">empty</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">self_referential</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">empty</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">NONTERMINAL_PTC</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">NONTERMINAL_PTC</span><span class="plain-syntax">) &&</span>
|
||||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">min_nt_words</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</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">empty</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="comment-syntax"> even if negated, notice</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">empty</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="comment-syntax"> even if negated, notice</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">NONTERMINAL_PTC</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> == </span><span class="constant-syntax">NONTERMINAL_PTC</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="comment-syntax"> if (pt->nt_pt == nt) self_referential = TRUE;</span>
|
<span class="plain-syntax"> </span><span class="comment-syntax"> if (pt->nt_pt == nt) self_referential = TRUE;</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP1" class="function-link"><span class="function-syntax">Optimiser::optimise_nt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP1" class="function-link"><span class="function-syntax">Optimiser::optimise_nt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">token_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">token_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">self_referential</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">empty</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">self_referential</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">empty</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">first</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">first</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">prt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">token_req</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">prt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">token_req</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP6" class="function-link"><span class="function-syntax">Optimiser::concatenate_rreq</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">prt</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">token_req</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP6" class="function-link"><span class="function-syntax">Optimiser::concatenate_rreq</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">prt</span><span class="plain-syntax">, &(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">token_req</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">first</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">first</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
|
@ -385,10 +434,10 @@ Strong ": all bits in this range must be matched by one word
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP12" class="function-link"><span class="function-syntax">Optimiser::disjoin_rreq</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">nnt</span><span class="plain-syntax">, &</span><span class="identifier-syntax">prt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP12" class="function-link"><span class="function-syntax">Optimiser::disjoin_rreq</span></a><span class="plain-syntax">(&</span><span class="identifier-syntax">nnt</span><span class="plain-syntax">, &</span><span class="identifier-syntax">prt</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">first_production</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">first_production</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">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">production_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prt</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nnt</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nnt</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">PREFORM_CIRCULARITY_BREAKER</span>
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREFORM_CIRCULARITY_BREAKER</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PREFORM_CIRCULARITY_BREAKER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">PREFORM_CIRCULARITY_BREAKER</span><span class="plain-syntax">(</span><span class="identifier-syntax">nt</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">endif</span>
|
||||||
|
@ -402,17 +451,17 @@ combination of the meaning codes found in an adjective list.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::optimise_nt_reqs</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">Optimiser::optimise_nt_reqs</span></span>:<br/><a href="4-to.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::optimise_nt_reqs</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Optimiser::optimise_nt_reqs</span></span>:<br/><a href="4-to.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">production_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_production_list</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">next_production_list</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">first_production_list</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax">; </span><span class="identifier-syntax">pl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">next_production_list</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">production</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pr</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prev_req</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">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prev_req</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">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">first_production</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">next_production</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-></span><span class="element-syntax">first_production</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax">; </span><span class="identifier-syntax">pr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">next_production</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP2" class="function-link"><span class="function-syntax">Optimiser::optimise_req</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_req</span><span class="plain-syntax">), </span><span class="identifier-syntax">prev_req</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP2" class="function-link"><span class="function-syntax">Optimiser::optimise_req</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">production_req</span><span class="plain-syntax">), </span><span class="identifier-syntax">prev_req</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">prev_req</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">production_req</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">prev_req</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">pr</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">production_req</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP2" class="function-link"><span class="function-syntax">Optimiser::optimise_req</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP2" class="function-link"><span class="function-syntax">Optimiser::optimise_req</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</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">Optimiser::optimise_req</span><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prev</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::optimise_req</span><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prev</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -444,34 +493,34 @@ combination of the meaning codes found in an adjective list.
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::mark_nt_as_requiring_itself</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::mark_nt_as_requiring_itself</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</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">Optimiser::mark_nt_as_requiring_itself_first</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::mark_nt_as_requiring_itself_first</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">FS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">FS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">FW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">FW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</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">Optimiser::mark_nt_as_requiring_itself_conj</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::mark_nt_as_requiring_itself_conj</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">CS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">CS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">CW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">CW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">FS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">FS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">FW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">FW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</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">Optimiser::mark_nt_as_requiring_itself_augmented</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">x</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::mark_nt_as_requiring_itself_augmented</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">x</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DS_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">DW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">CW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) + </span><span class="identifier-syntax">x</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">CW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) + </span><span class="identifier-syntax">x</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">FW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) + </span><span class="identifier-syntax">x</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nonterminal_req</span><span class="plain-syntax">.</span><span class="element-syntax">FW_req</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) + </span><span class="identifier-syntax">x</span><span class="plain-syntax">);</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">Optimiser::set_nt_incidence</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">Optimiser::set_nt_incidence</span></span>:<br/><a href="4-to.html#SP1_7">§1.7</a>, <a href="4-to.html#SP4">§4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::set_nt_incidence</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Optimiser::set_nt_incidence</span></span>:<br/><a href="4-to.html#SP1_7">§1.7</a>, <a href="4-to.html#SP4">§4</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP12" class="function-link"><span class="function-syntax">Vocabulary::get_ntb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ve</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">R</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP12" class="function-link"><span class="function-syntax">Vocabulary::get_ntb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ve</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">R</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">R</span><span class="plain-syntax"> |= (</span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><a href="2-vcb.html#SP12" class="function-link"><span class="function-syntax">Vocabulary::set_ntb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="2-vcb.html#SP12" class="function-link"><span class="function-syntax">Vocabulary::set_ntb</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
|
||||||
|
@ -488,17 +537,17 @@ combination of the meaning codes found in an adjective list.
|
||||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">RESERVED_NT_BITS</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span>
|
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">RESERVED_NT_BITS</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span>
|
||||||
</pre>
|
</pre>
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::nt_bitmap_bit</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">Optimiser::nt_bitmap_bit</span></span>:<br/><a href="4-to.html#SP3">§3</a>, <a href="4-to.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::nt_bitmap_bit</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></span>:<br/><a href="4-to.html#SP3">§3</a>, <a href="4-to.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_req_bit</span><span class="plain-syntax"> == -1) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nt_req_bit</span><span class="plain-syntax"> == -1) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">b</span><span class="plain-syntax"> = </span><span class="constant-syntax">RESERVED_NT_BITS</span><span class="plain-syntax"> + ((</span><span class="identifier-syntax">no_req_bits</span><span class="plain-syntax">++)%(32-</span><span class="constant-syntax">RESERVED_NT_BITS</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">b</span><span class="plain-syntax"> = </span><span class="constant-syntax">RESERVED_NT_BITS</span><span class="plain-syntax"> + ((</span><span class="identifier-syntax">no_req_bits</span><span class="plain-syntax">++)%(32-</span><span class="constant-syntax">RESERVED_NT_BITS</span><span class="plain-syntax">));</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_req_bit</span><span class="plain-syntax"> = (1 << </span><span class="identifier-syntax">b</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nt_req_bit</span><span class="plain-syntax"> = (1 << </span><span class="identifier-syntax">b</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> }</span>
|
<span class="plain-syntax"> }</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_req_bit</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nt_req_bit</span><span class="plain-syntax">;</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">Optimiser::assign_bitmap_bit</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">b</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::assign_bitmap_bit</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">b</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">nt</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">"null NT"</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">nt</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">"null NT"</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_req_bit</span><span class="plain-syntax"> = (1 << </span><span class="identifier-syntax">b</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">nt_req_bit</span><span class="plain-syntax"> = (1 << </span><span class="identifier-syntax">b</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="function-syntax">Optimiser::test_word</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><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::test_word</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><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
||||||
|
@ -540,7 +589,7 @@ combination of the meaning codes found in an adjective list.
|
||||||
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b></p>
|
<p class="commentary firstcommentary"><a id="SP5"></a><b>§5. </b></p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::nt_bitmap_violates</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Optimiser::nt_bitmap_violates</span></span>:<br/>Preform - <a href="4-prf.html#SP1_2">§1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::nt_bitmap_violates</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Optimiser::nt_bitmap_violates</span></span>:<br/>Preform - <a href="4-prf.html#SP1_2">§1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">no_requirements</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">no_requirements</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">) == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">) == </span><span class="constant-syntax">1</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">bm</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP12" class="function-link"><span class="function-syntax">Vocabulary::get_ntb</span></a><span class="plain-syntax">(</span><a href="3-lxr.html#SP20" class="function-link"><span class="function-syntax">Lexer::word</span></a><span class="plain-syntax">(</span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">bm</span><span class="plain-syntax"> = </span><a href="2-vcb.html#SP12" class="function-link"><span class="function-syntax">Vocabulary::get_ntb</span></a><span class="plain-syntax">(</span><a href="3-lxr.html#SP20" class="function-link"><span class="function-syntax">Lexer::word</span></a><span class="plain-syntax">(</span><a href="3-wrd.html#SP8" class="function-link"><span class="function-syntax">Wordings::first_wn</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)));</span>
|
||||||
|
@ -604,7 +653,7 @@ match some words against X, then some more against Y.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_rreq</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_rreq</span></span>:<br/><a href="4-to.html#SP1_7">§1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">with</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_rreq</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_rreq</span></span>:<br/><a href="4-to.html#SP1_7">§1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">with</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP7" class="function-link"><span class="function-syntax">Optimiser::concatenate_ds</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP7" class="function-link"><span class="function-syntax">Optimiser::concatenate_ds</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP9" class="function-link"><span class="function-syntax">Optimiser::concatenate_dw</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP9" class="function-link"><span class="function-syntax">Optimiser::concatenate_dw</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP8" class="function-link"><span class="function-syntax">Optimiser::concatenate_cs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP8" class="function-link"><span class="function-syntax">Optimiser::concatenate_cs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax">);</span>
|
||||||
|
@ -620,7 +669,7 @@ the strongest requirement we can make. So:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_ds</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_ds</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_ds</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_ds</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> | </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> | </span><span class="identifier-syntax">m2</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -630,7 +679,7 @@ about every word of XY is to take the intersection, so:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_cs</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_cs</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_cs</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_cs</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> & </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> & </span><span class="identifier-syntax">m2</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -642,7 +691,7 @@ the rarest for best effect, but that's too much work.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_dw</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_dw</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_dw</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_dw</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">; </span><span class="comment-syntax"> the case where we have no information about X</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m1</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">; </span><span class="comment-syntax"> the case where we have no information about X</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m2</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">; </span><span class="comment-syntax"> and about Y</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m2</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">; </span><span class="comment-syntax"> and about Y</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">; </span><span class="comment-syntax"> the general case discussed above</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">; </span><span class="comment-syntax"> the general case discussed above</span>
|
||||||
|
@ -654,7 +703,7 @@ the union, so:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_cw</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_cw</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_cw</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_cw</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> the case where we have no information about X</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m1</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> the case where we have no information about X</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m2</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> and about Y</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m2</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> and about Y</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax"> | </span><span class="identifier-syntax">m2</span><span class="plain-syntax">; </span><span class="comment-syntax"> the general case discussed above</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax"> | </span><span class="identifier-syntax">m2</span><span class="plain-syntax">; </span><span class="comment-syntax"> the general case discussed above</span>
|
||||||
|
@ -664,11 +713,11 @@ the union, so:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_fs</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_fs</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_fs</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_fs</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</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">m1</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">m1</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="function-syntax">Optimiser::concatenate_fw</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_fw</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::concatenate_fw</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Optimiser::concatenate_fw</span></span>:<br/><a href="4-to.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</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">m1</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">m1</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -678,7 +727,7 @@ form of de Morgan's laws.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_rreq</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_rreq</span></span>:<br/><a href="4-to.html#SP1_7">§1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">with</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_rreq</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_rreq</span></span>:<br/><a href="4-to.html#SP1_7">§1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">with</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP13" class="function-link"><span class="function-syntax">Optimiser::disjoin_ds</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP13" class="function-link"><span class="function-syntax">Optimiser::disjoin_ds</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP15" class="function-link"><span class="function-syntax">Optimiser::disjoin_dw</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP15" class="function-link"><span class="function-syntax">Optimiser::disjoin_dw</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP14" class="function-link"><span class="function-syntax">Optimiser::disjoin_cs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax"> = </span><a href="4-to.html#SP14" class="function-link"><span class="function-syntax">Optimiser::disjoin_cs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax">, </span><span class="identifier-syntax">with</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax">);</span>
|
||||||
|
@ -694,7 +743,7 @@ common, we can't say anything.)
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_ds</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_ds</span></span>:<br/><a href="4-to.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_ds</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_ds</span></span>:<br/><a href="4-to.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> & </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> & </span><span class="identifier-syntax">m2</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -704,7 +753,7 @@ about every word of XY is to take the intersection, so:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_cs</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_cs</span></span>:<br/><a href="4-to.html#SP12">§12</a>, <a href="4-to.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_cs</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_cs</span></span>:<br/><a href="4-to.html#SP12">§12</a>, <a href="4-to.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> & </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> & </span><span class="identifier-syntax">m2</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -714,7 +763,7 @@ must be found in X/Y, so:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_dw</span><button class="popup" onclick="togglePopup('usagePopup17')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup17">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_dw</span></span>:<br/><a href="4-to.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_dw</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_dw</span></span>:<br/><a href="4-to.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> the case where we have no information about X</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m1</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> the case where we have no information about X</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m2</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> and about Y</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m2</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> and about Y</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax"> | </span><span class="identifier-syntax">m2</span><span class="plain-syntax">; </span><span class="comment-syntax"> the general case discussed above</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax"> | </span><span class="identifier-syntax">m2</span><span class="plain-syntax">; </span><span class="comment-syntax"> the general case discussed above</span>
|
||||||
|
@ -724,34 +773,34 @@ must be found in X/Y, so:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_cw</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_cw</span></span>:<br/><a href="4-to.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_cw</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_cw</span></span>:<br/><a href="4-to.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</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">m1</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> the case where we have no information about X</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m1</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> the case where we have no information about X</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m2</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> and about Y</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">m2</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> and about Y</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax"> | </span><span class="identifier-syntax">m2</span><span class="plain-syntax">; </span><span class="comment-syntax"> the general case discussed above</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax"> | </span><span class="identifier-syntax">m2</span><span class="plain-syntax">; </span><span class="comment-syntax"> the general case discussed above</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
|
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_fw</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_fw</span></span>:<br/><a href="4-to.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_fw</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_fw</span></span>:<br/><a href="4-to.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::disjoin_cw</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="identifier-syntax">m2</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-to.html#SP16" class="function-link"><span class="function-syntax">Optimiser::disjoin_cw</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="identifier-syntax">m2</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="function-syntax">Optimiser::disjoin_fs</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_fs</span></span>:<br/><a href="4-to.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::disjoin_fs</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Optimiser::disjoin_fs</span></span>:<br/><a href="4-to.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">m2</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-to.html#SP14" class="function-link"><span class="function-syntax">Optimiser::disjoin_cs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="identifier-syntax">m2</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-to.html#SP14" class="function-link"><span class="function-syntax">Optimiser::disjoin_cs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">m1</span><span class="plain-syntax">, </span><span class="identifier-syntax">m2</span><span class="plain-syntax">);</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">Optimiser::clear_rreq</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Optimiser::clear_rreq</span></span>:<br/><a href="4-to.html#SP1">§1</a>, <a href="4-to.html#SP1_7">§1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::clear_rreq</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Optimiser::clear_rreq</span></span>:<br/><a href="4-to.html#SP1">§1</a>, <a href="4-to.html#SP1_7">§1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CW_req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CW_req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">FS_req</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">FW_req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">FS_req</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">FW_req</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</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">Optimiser::atomic_rreq</span><button class="popup" onclick="togglePopup('usagePopup22')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup22">Usage of <span class="code-font"><span class="function-syntax">Optimiser::atomic_rreq</span></span>:<br/><a href="4-to.html#SP1_7">§1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::atomic_rreq</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Optimiser::atomic_rreq</span></span>:<br/><a href="4-to.html#SP1_7">§1.7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">b</span><span class="plain-syntax"> = </span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">b</span><span class="plain-syntax"> = </span><a href="4-to.html#SP4" class="function-link"><span class="function-syntax">Optimiser::nt_bitmap_bit</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">nt</span><span class="plain-syntax">);</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">b</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">b</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">b</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">b</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">b</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CW_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">b</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CS_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">b</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CW_req</span><span class="plain-syntax"> = </span><span class="identifier-syntax">b</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">FS_req</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">FW_req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">FS_req</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">FW_req</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</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">Optimiser::log_range_requirement</span><button class="popup" onclick="togglePopup('usagePopup23')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup23">Usage of <span class="code-font"><span class="function-syntax">Optimiser::log_range_requirement</span></span>:<br/>Loading Preform - <a href="4-lp.html#SP17">§17</a><br/>Preform - <a href="4-prf.html#SP1_2">§1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::log_range_requirement</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Optimiser::log_range_requirement</span></span>:<br/>Preform - <a href="4-prf.html#SP1_2">§1.2</a><br/>Instrumentation - <a href="4-ins.html#SP4">§4</a>, <a href="4-ins.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">range_requirement</span><span class="plain-syntax"> *</span><span class="identifier-syntax">req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" DW: %08x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" DW: %08x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DW_req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" DS: %08x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" DS: %08x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">DS_req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">CW_req</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" CW: %08x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CW_req</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">req</span><span class="plain-syntax">-></span><span class="element-syntax">CW_req</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" CW: %08x"</span><span class="plain-syntax">, </span><span class="identifier-syntax">req</span><span class="plain-syntax">-></span><span class="element-syntax">CW_req</span><span class="plain-syntax">); }</span>
|
||||||
|
@ -766,7 +815,7 @@ must be found in X/Y, so:
|
||||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PTOKEN_ELASTIC</span><span class="plain-syntax"> -1</span>
|
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">PTOKEN_ELASTIC</span><span class="plain-syntax"> -1</span>
|
||||||
</pre>
|
</pre>
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::ptoken_width</span><button class="popup" onclick="togglePopup('usagePopup24')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup24">Usage of <span class="code-font"><span class="function-syntax">Optimiser::ptoken_width</span></span>:<br/><a href="4-to.html#SP1_2">§1.2</a>, <a href="4-to.html#SP1_3">§1.3</a>, <a href="4-to.html#SP1_5">§1.5</a><br/>Preform - <a href="4-prf.html#SP1_2_1_2_3_3_3_1">§1.2.1.2.3.3.3.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::ptoken_width</span><button class="popup" onclick="togglePopup('usagePopup27')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup27">Usage of <span class="code-font"><span class="function-syntax">Optimiser::ptoken_width</span></span>:<br/><a href="4-to.html#SP1_2">§1.2</a>, <a href="4-to.html#SP1_3">§1.3</a>, <a href="4-to.html#SP1_5">§1.5</a><br/>Preform - <a href="4-prf.html#SP1_2_1_2_3_3_3_1">§1.2.1.2.3.3.3.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</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">min</span><span class="plain-syntax">, </span><span class="identifier-syntax">max</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">min</span><span class="plain-syntax">, </span><span class="identifier-syntax">max</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP18" class="function-link"><span class="function-syntax">Optimiser::ptoken_extrema</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, &</span><span class="identifier-syntax">min</span><span class="plain-syntax">, &</span><span class="identifier-syntax">max</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP18" class="function-link"><span class="function-syntax">Optimiser::ptoken_extrema</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, &</span><span class="identifier-syntax">min</span><span class="plain-syntax">, &</span><span class="identifier-syntax">max</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">min</span><span class="plain-syntax"> != </span><span class="identifier-syntax">max</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">PTOKEN_ELASTIC</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">min</span><span class="plain-syntax"> != </span><span class="identifier-syntax">max</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">PTOKEN_ELASTIC</span><span class="plain-syntax">;</span>
|
||||||
|
@ -781,7 +830,7 @@ infinity.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::ptoken_extrema</span><button class="popup" onclick="togglePopup('usagePopup25')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup25">Usage of <span class="code-font"><span class="function-syntax">Optimiser::ptoken_extrema</span></span>:<br/><a href="4-to.html#SP1_1">§1.1</a>, <a href="4-to.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">min_t</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">max_t</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::ptoken_extrema</span><button class="popup" onclick="togglePopup('usagePopup28')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup28">Usage of <span class="code-font"><span class="function-syntax">Optimiser::ptoken_extrema</span></span>:<br/><a href="4-to.html#SP1_1">§1.1</a>, <a href="4-to.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">ptoken</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">min_t</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">max_t</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">min_t</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; *</span><span class="identifier-syntax">max_t</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> *</span><span class="identifier-syntax">min_t</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; *</span><span class="identifier-syntax">max_t</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">negated_ptoken</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> != </span><span class="constant-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">) { *</span><span class="identifier-syntax">min_t</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">max_t</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</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">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax"> != </span><span class="constant-syntax">FIXED_WORD_PTC</span><span class="plain-syntax">) { *</span><span class="identifier-syntax">min_t</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; *</span><span class="identifier-syntax">max_t</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">; }</span>
|
||||||
|
@ -790,8 +839,8 @@ infinity.
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax">) {</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">ptoken_category</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NONTERMINAL_PTC:</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NONTERMINAL_PTC:</span>
|
||||||
<span class="plain-syntax"> </span><a href="4-to.html#SP1" class="function-link"><span class="function-syntax">Optimiser::optimise_nt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">); </span><span class="comment-syntax"> recurse as needed to find its extrema</span>
|
<span class="plain-syntax"> </span><a href="4-to.html#SP1" class="function-link"><span class="function-syntax">Optimiser::optimise_nt</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">); </span><span class="comment-syntax"> recurse as needed to find its extrema</span>
|
||||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">min_t</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">min_nt_words</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> *</span><span class="identifier-syntax">min_t</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">min_nt_words</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">max_t</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> *</span><span class="identifier-syntax">max_t</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-></span><span class="element-syntax">nt_pt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="identifier-syntax">max_nt_words</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIPLE_WILDCARD_PTC:</span>
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIPLE_WILDCARD_PTC:</span>
|
||||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">max_t</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">;</span>
|
<span class="plain-syntax"> *</span><span class="identifier-syntax">max_t</span><span class="plain-syntax"> = </span><span class="constant-syntax">INFINITE_WORD_COUNT</span><span class="plain-syntax">;</span>
|
||||||
|
@ -808,13 +857,13 @@ with match number <span class="extract"><span class="extract-syntax">pc</span></
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="displayed-code all-displayed-code code-font">
|
<pre class="displayed-code all-displayed-code code-font">
|
||||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::flag_words</span><button class="popup" onclick="togglePopup('usagePopup26')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup26">Usage of <span class="code-font"><span class="function-syntax">Optimiser::flag_words</span></span>:<br/>Loading Preform - <a href="4-lp.html#SP16_3">§16.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pc</span><span class="plain-syntax">) {</span>
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Optimiser::flag_words</span><button class="popup" onclick="togglePopup('usagePopup29')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup29">Usage of <span class="code-font"><span class="function-syntax">Optimiser::flag_words</span></span>:<br/>Loading Preform - <a href="4-lp.html#SP16_3">§16.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">vocabulary_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ve</span><span class="plain-syntax">, </span><span class="reserved-syntax">nonterminal</span><span class="plain-syntax"> *</span><span class="identifier-syntax">nt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pc</span><span class="plain-syntax">) {</span>
|
||||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ve</span><span class="plain-syntax">-></span><span class="element-syntax">flags</span><span class="plain-syntax"> |= (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">flag_words_in_production</span><span class="plain-syntax">);</span>
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ve</span><span class="plain-syntax">-></span><span class="element-syntax">flags</span><span class="plain-syntax"> |= (</span><span class="identifier-syntax">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">flag_words_in_production</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">number_words_by_production</span><span class="plain-syntax">) </span><span class="identifier-syntax">ve</span><span class="plain-syntax">-></span><span class="element-syntax">literal_number_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pc</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">nt</span><span class="plain-syntax">-></span><span class="element-syntax">opt</span><span class="plain-syntax">.</span><span class="element-syntax">number_words_by_production</span><span class="plain-syntax">) </span><span class="identifier-syntax">ve</span><span class="plain-syntax">-></span><span class="element-syntax">literal_number_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pc</span><span class="plain-syntax">;</span>
|
||||||
<span class="plain-syntax">}</span>
|
<span class="plain-syntax">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
<nav role="progress"><div class="progresscontainer">
|
<nav role="progress"><div class="progresscontainer">
|
||||||
<ul class="progressbar"><li class="progressprev"><a href="4-lp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresscurrent">to</li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progressnext"><a href="4-prf.html">❯</a></li></ul></div>
|
<ul class="progressbar"><li class="progressprev"><a href="4-lp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-wm.html">1</a></li><li class="progresschapter"><a href="2-vcb.html">2</a></li><li class="progresschapter"><a href="3-lxr.html">3</a></li><li class="progresscurrentchapter">4</li><li class="progresssection"><a href="4-ap.html">ap</a></li><li class="progresssection"><a href="4-nnt.html">nnt</a></li><li class="progresssection"><a href="4-lp.html">lp</a></li><li class="progresscurrent">to</li><li class="progresssection"><a href="4-prf.html">prf</a></li><li class="progresssection"><a href="4-bn.html">bn</a></li><li class="progresssection"><a href="4-ins.html">ins</a></li><li class="progressnext"><a href="4-prf.html">❯</a></li></ul></div>
|
||||||
</nav><!--End of weave-->
|
</nav><!--End of weave-->
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -243,17 +243,18 @@ wording and a unique ID number and makes something sensible: <span class="extrac
|
||||||
say.
|
say.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. Preform. </b>Prefor is a meta-language for writing a simple grammar: it's in some sense
|
<p class="commentary firstcommentary"><a id="SP10"></a><b>§10. Preform. </b>Preform is a meta-language for writing a simple grammar: it's in some sense
|
||||||
pre-Inform, because it defines the Inform language itself. See <a href="4-ap.html" class="internal">About Preform</a>.
|
pre-Inform, because it defines the Inform language itself. See <a href="4-ap.html" class="internal">About Preform</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="commentary">Compilers are a little like the human body, in that most of their organs can
|
<p class="commentary">Compilers are a little like the human body, in that most of their organs can
|
||||||
be located in a single spot: there is just one lexical analyser, and it is
|
be located in a single spot: the heart, for example, or the gall bladder.
|
||||||
entirely contained in the section <a href="3-lxr.html" class="internal">Lexer</a>. But just a few organs — the
|
Or in the case of Inform, the <a href="3-lxr.html" class="internal">Lexer</a>. But a few organs of the body — like
|
||||||
nervous system, or the blood vessels — are present almost everywhere in the
|
the nervous system, or blood vessels — are found almost everywhere in the
|
||||||
body, and the Inform syntax analyser is like that. While the basic code which
|
body, and the Inform syntax analyser is like that. While the basic code which
|
||||||
drives this is in <a href="4-prf.html" class="internal">Preform</a> and in the <a href="../syntax-module/index.html" class="internal">syntax</a> module, the actual
|
drives this is in <a href="4-prf.html" class="internal">Preform</a> and in the <a href="../syntax-module/index.html" class="internal">syntax</a> module, the actual
|
||||||
syntax being read can be found all over Inform. This has a notation like so:
|
syntax being read is in many, many different places. Such syntax has a notation
|
||||||
|
like so:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||||
|
@ -261,7 +262,7 @@ syntax being read can be found all over Inform. This has a notation like so:
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><ordinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">runner</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> TRUE</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><ordinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">runner</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> TRUE</span>
|
||||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">runner</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">no</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> FALSE</span>
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">runner</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">no</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> FALSE</span>
|
||||||
</pre>
|
</pre>
|
||||||
<p class="commentary">And such notation is mixed in with regular C code in many sections of the
|
<p class="commentary">This notation is mixed in with regular C code in many sections of the
|
||||||
<a href="../core-module/index.html" class="internal">core</a> and other modules.
|
<a href="../core-module/index.html" class="internal">core</a> and other modules.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
|
@ -172,6 +172,11 @@
|
||||||
<spon class="sectiontitle">Basic Nonterminals</span></a> -
|
<spon class="sectiontitle">Basic Nonterminals</span></a> -
|
||||||
<span class="sectionpurpose">A handful of bare minimum Preform syntax.</span></p>
|
<span class="sectionpurpose">A handful of bare minimum Preform syntax.</span></p>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<p class="sectionentry"><a href="4-ins.html">
|
||||||
|
<spon class="sectiontitle">Instrumentation</span></a> -
|
||||||
|
<span class="sectionpurpose">To provide debugging and tuning data on the Preform parser's performance.</span></p>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -132,7 +132,7 @@ gargantuan debugging logs if enabled.
|
||||||
if (problem_count == 0) {
|
if (problem_count == 0) {
|
||||||
TemplateReader::report_unacted_upon_interventions();
|
TemplateReader::report_unacted_upon_interventions();
|
||||||
// Memory::log_statistics();
|
// Memory::log_statistics();
|
||||||
// LoadPreform::log();
|
// Instrumentation::log();
|
||||||
// Index::DocReferences::log_statistics();
|
// Index::DocReferences::log_statistics();
|
||||||
// NewVerbs::log_all();
|
// NewVerbs::log_all();
|
||||||
}
|
}
|
||||||
|
|
|
@ -3474,7 +3474,7 @@ void Dash::experiment(wording W, int full) {
|
||||||
LOG("Beginning Dashperiment:\n");
|
LOG("Beginning Dashperiment:\n");
|
||||||
parse_node *test_tree = NULL, *last_alt = NULL;
|
parse_node *test_tree = NULL, *last_alt = NULL;
|
||||||
<s-value-uncached>->multiplicitous = TRUE;
|
<s-value-uncached>->multiplicitous = TRUE;
|
||||||
<s-value-uncached>->watched = TRUE;
|
<s-value-uncached>->ins.watched = TRUE;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
while (Wordings::nonempty(W)) {
|
while (Wordings::nonempty(W)) {
|
||||||
wording T = W;
|
wording T = W;
|
||||||
|
@ -3492,7 +3492,7 @@ void Dash::experiment(wording W, int full) {
|
||||||
} else LOG("Failed to parse: %W\n", T);
|
} else LOG("Failed to parse: %W\n", T);
|
||||||
}
|
}
|
||||||
<s-value-uncached>->multiplicitous = FALSE;
|
<s-value-uncached>->multiplicitous = FALSE;
|
||||||
<s-value-uncached>->watched = FALSE;
|
<s-value-uncached>->ins.watched = FALSE;
|
||||||
if (n > 1) {
|
if (n > 1) {
|
||||||
parse_node *holder = Node::new(AMBIGUITY_NT);
|
parse_node *holder = Node::new(AMBIGUITY_NT);
|
||||||
holder->down = test_tree;
|
holder->down = test_tree;
|
||||||
|
|
|
@ -101,7 +101,7 @@ void NaturalLanguages::preform_error(word_assemblage base_text, nonterminal *nt,
|
||||||
production *pr, char *message) {
|
production *pr, char *message) {
|
||||||
if (pr) {
|
if (pr) {
|
||||||
LOG("The production at fault is:\n");
|
LOG("The production at fault is:\n");
|
||||||
LoadPreform::log_production(pr, FALSE); LOG("\n");
|
Instrumentation::log_production(pr, FALSE); LOG("\n");
|
||||||
}
|
}
|
||||||
if (nt == NULL)
|
if (nt == NULL)
|
||||||
Problems::quote_text(1, "(no nonterminal)");
|
Problems::quote_text(1, "(no nonterminal)");
|
||||||
|
@ -120,7 +120,7 @@ void NaturalLanguages::preform_error(word_assemblage base_text, nonterminal *nt,
|
||||||
Problems::quote_number(3, &(pr->match_number));
|
Problems::quote_number(3, &(pr->match_number));
|
||||||
ptoken *pt;
|
ptoken *pt;
|
||||||
for (pt = pr->first_ptoken; pt; pt = pt->next_ptoken) {
|
for (pt = pr->first_ptoken; pt; pt = pt->next_ptoken) {
|
||||||
LoadPreform::write_ptoken(TEMP, pt);
|
Instrumentation::write_ptoken(TEMP, pt);
|
||||||
if (pt->next_ptoken) WRITE_TO(TEMP, " ");
|
if (pt->next_ptoken) WRITE_TO(TEMP, " ");
|
||||||
}
|
}
|
||||||
Problems::quote_stream(4, TEMP);
|
Problems::quote_stream(4, TEMP);
|
||||||
|
|
|
@ -248,7 +248,7 @@ and we also understand "only R" and "everything" and "nothing".
|
||||||
wording RQW = GET_RW(<debugging-log-request>, 1);
|
wording RQW = GET_RW(<debugging-log-request>, 1);
|
||||||
@<See if this is a simple request for debugging information@>;
|
@<See if this is a simple request for debugging information@>;
|
||||||
}
|
}
|
||||||
if (<<r>> & PREFORM_DLR) { Nonterminals::watch(<<rp>>, new_state); return; }
|
if (<<r>> & PREFORM_DLR) { Instrumentation::watch(<<rp>>, new_state); return; }
|
||||||
|
|
||||||
@ Otherwise a request must be the name of a single debugging aspect.
|
@ Otherwise a request must be the name of a single debugging aspect.
|
||||||
|
|
||||||
|
|
|
@ -174,7 +174,7 @@ single avinue.
|
||||||
if (first == NULL) continue;
|
if (first == NULL) continue;
|
||||||
ptoken *second = first->next_ptoken;
|
ptoken *second = first->next_ptoken;
|
||||||
if ((second) && (second->next_ptoken)) {
|
if ((second) && (second->next_ptoken)) {
|
||||||
LoadPreform::log_production(pr, FALSE);
|
Instrumentation::log_production(pr, FALSE);
|
||||||
Conjugation::trie_definition_error(nt, pr, "trie line with more than 2 words");
|
Conjugation::trie_definition_error(nt, pr, "trie line with more than 2 words");
|
||||||
}
|
}
|
||||||
@<Consider the one- or two-token production in this nonterminal@>;
|
@<Consider the one- or two-token production in this nonterminal@>;
|
||||||
|
|
|
@ -745,7 +745,7 @@ void Conjugation::basic_problem_handler(word_assemblage base_text, nonterminal *
|
||||||
#ifndef INFLECTIONS_ERROR_HANDLER
|
#ifndef INFLECTIONS_ERROR_HANDLER
|
||||||
if (pr) {
|
if (pr) {
|
||||||
LOG("The production at fault is:\n");
|
LOG("The production at fault is:\n");
|
||||||
LoadPreform::log_production(pr, FALSE); LOG("\n");
|
Instrumentation::log_production(pr, FALSE); LOG("\n");
|
||||||
}
|
}
|
||||||
TEMPORARY_TEXT(ERM);
|
TEMPORARY_TEXT(ERM);
|
||||||
if (nt == NULL)
|
if (nt == NULL)
|
||||||
|
@ -760,7 +760,7 @@ void Conjugation::basic_problem_handler(word_assemblage base_text, nonterminal *
|
||||||
if (pr) {
|
if (pr) {
|
||||||
TEMPORARY_TEXT(TEMP);
|
TEMPORARY_TEXT(TEMP);
|
||||||
for (ptoken *pt = pr->first_ptoken; pt; pt = pt->next_ptoken) {
|
for (ptoken *pt = pr->first_ptoken; pt; pt = pt->next_ptoken) {
|
||||||
LoadPreform::write_ptoken(TEMP, pt);
|
Instrumentation::write_ptoken(TEMP, pt);
|
||||||
if (pt->next_ptoken) WRITE_TO(TEMP, " ");
|
if (pt->next_ptoken) WRITE_TO(TEMP, " ");
|
||||||
}
|
}
|
||||||
WRITE_TO(ERM, "line %d ('%S'): ", pr->match_number, TEMP);
|
WRITE_TO(ERM, "line %d ('%S'): ", pr->match_number, TEMP);
|
||||||
|
|
|
@ -72,11 +72,11 @@ void Cardinals::enable_in_word_form(void) {
|
||||||
Optimiser::assign_bitmap_bit(<cardinal-number>, 0);
|
Optimiser::assign_bitmap_bit(<cardinal-number>, 0);
|
||||||
Optimiser::assign_bitmap_bit(<ordinal-number>, 1);
|
Optimiser::assign_bitmap_bit(<ordinal-number>, 1);
|
||||||
|
|
||||||
<cardinal-number-in-words>->number_words_by_production = TRUE;
|
<cardinal-number-in-words>->opt.number_words_by_production = TRUE;
|
||||||
<cardinal-number-in-words>->flag_words_in_production = NUMBER_MC;
|
<cardinal-number-in-words>->opt.flag_words_in_production = NUMBER_MC;
|
||||||
|
|
||||||
<ordinal-number-in-words>->number_words_by_production = TRUE;
|
<ordinal-number-in-words>->opt.number_words_by_production = TRUE;
|
||||||
<ordinal-number-in-words>->flag_words_in_production = ORDINAL_MC;
|
<ordinal-number-in-words>->opt.flag_words_in_production = ORDINAL_MC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ Actual parsing is done here. We look at a single word to see if it's a
|
@ Actual parsing is done here. We look at a single word to see if it's a
|
||||||
|
|
|
@ -156,7 +156,7 @@ with a given "permitted verb".
|
||||||
|
|
||||||
@ =
|
@ =
|
||||||
void Prepositions::mark_for_preform(void) {
|
void Prepositions::mark_for_preform(void) {
|
||||||
<relative-clause-marker>->flag_words_in_production = PREPOSITION_MC;
|
<relative-clause-marker>->opt.flag_words_in_production = PREPOSITION_MC;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Prepositions::preform_optimiser(void) {
|
void Prepositions::preform_optimiser(void) {
|
||||||
|
|
164
shared/words-module/Chapter 4/Instrumentation.w
Normal file
164
shared/words-module/Chapter 4/Instrumentation.w
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
[Instrumentation::] Instrumentation.
|
||||||
|
|
||||||
|
To provide debugging and tuning data on the Preform parser's performance.
|
||||||
|
|
||||||
|
@h What data we collect.
|
||||||
|
This ought to be a privacy policy under GDPR, somehow. If so, our justification
|
||||||
|
for logging usage data would be this:
|
||||||
|
(a) the Preform parser does something very complicated and has to be tuned just
|
||||||
|
right to be efficient, so debugging logs are helpful;
|
||||||
|
(b) but it runs millions of times in each Inform compilation, in a wide variety
|
||||||
|
of ways, and any kind of complete log would be both too large and too complex
|
||||||
|
to take in. We want to be selective, and to be able to summarise.
|
||||||
|
|
||||||
|
So, in instrumentation mode, we gather the following data. For nonterminals,
|
||||||
|
we record the number of hits and misses. If a nonterminal is "watched", we
|
||||||
|
log its every parse.
|
||||||
|
|
||||||
|
=
|
||||||
|
typedef struct nonterminal_instrumentation_data {
|
||||||
|
int watched; /* watch goings-on to the debugging log */
|
||||||
|
int nonterminal_tries; /* for statistics collected in instrumented mode */
|
||||||
|
int nonterminal_matches; /* ditto */
|
||||||
|
} nonterminal_instrumentation_data;
|
||||||
|
|
||||||
|
void Instrumentation::initialise_nonterminal_data(nonterminal_instrumentation_data *ins) {
|
||||||
|
ins->watched = FALSE;
|
||||||
|
ins->nonterminal_tries = 0; ins->nonterminal_matches = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Instrumentation::watch(nonterminal *nt, int state) {
|
||||||
|
nt->ins.watched = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Instrumentation::note_nonterminal_match(nonterminal *nt, wording W) {
|
||||||
|
nt->ins.nonterminal_tries++;
|
||||||
|
nt->ins.nonterminal_matches++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Instrumentation::note_nonterminal_fail(nonterminal *nt) {
|
||||||
|
nt->ins.nonterminal_tries++;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ We count the number of hits and misses on each production, and also store
|
||||||
|
some sample text matching it. (In fact, we store the longest text which ever
|
||||||
|
matches it.)
|
||||||
|
|
||||||
|
=
|
||||||
|
typedef struct production_instrumentation_data {
|
||||||
|
int production_tries; /* for statistics collected in instrumented mode */
|
||||||
|
int production_matches; /* ditto */
|
||||||
|
struct wording sample_text; /* ditto */
|
||||||
|
} production_instrumentation_data;
|
||||||
|
|
||||||
|
void Instrumentation::initialise_production_data(production_instrumentation_data *ins) {
|
||||||
|
ins->production_tries = 0; ins->production_matches = 0;
|
||||||
|
ins->sample_text = EMPTY_WORDING;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Instrumentation::note_production_match(production *pr, wording W) {
|
||||||
|
pr->ins.production_tries++;
|
||||||
|
pr->ins.production_matches++;
|
||||||
|
if (Wordings::length(pr->ins.sample_text) < Wordings::length(W))
|
||||||
|
pr->ins.sample_text = W;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Instrumentation::note_production_fail(production *pr) {
|
||||||
|
pr->ins.production_tries++;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ At present, we collect no data on individual ptokens.
|
||||||
|
|
||||||
|
=
|
||||||
|
typedef struct ptoken_instrumentation_data {
|
||||||
|
int to_keep_this_from_being_empty_which_is_nonstandard_C;
|
||||||
|
} ptoken_instrumentation_data;
|
||||||
|
|
||||||
|
void Instrumentation::initialise_ptoken_data(ptoken_instrumentation_data *ins) {
|
||||||
|
ins->to_keep_this_from_being_empty_which_is_nonstandard_C = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@h Logging.
|
||||||
|
Descending the wheels within wheels of the Preform data structures, then:
|
||||||
|
|
||||||
|
=
|
||||||
|
void Instrumentation::log(void) {
|
||||||
|
int detailed = FALSE;
|
||||||
|
nonterminal *nt;
|
||||||
|
LOOP_OVER(nt, nonterminal) {
|
||||||
|
LOG("%d/%d: ", nt->ins.nonterminal_matches, nt->ins.nonterminal_tries);
|
||||||
|
LOG("%V: ", nt->nonterminal_id);
|
||||||
|
Optimiser::log_range_requirement(&(nt->opt.nonterminal_req));
|
||||||
|
LOG("\n");
|
||||||
|
if (nt->internal_definition)
|
||||||
|
LOG(" (internal)\n");
|
||||||
|
else
|
||||||
|
for (production_list *pl = nt->first_production_list; pl;
|
||||||
|
pl = pl->next_production_list)
|
||||||
|
Instrumentation::log_production_list(pl, detailed);
|
||||||
|
LOG(" min %d, max %d\n\n", nt->opt.min_nt_words, nt->opt.max_nt_words);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ =
|
||||||
|
void Instrumentation::log_production_list(production_list *pl, int detailed) {
|
||||||
|
LOG(" $J:\n", pl->definition_language);
|
||||||
|
production *pr;
|
||||||
|
for (pr = pl->first_production; pr; pr = pr->next_production) {
|
||||||
|
LOG(" "); Instrumentation::log_production(pr, detailed);
|
||||||
|
LOG(" %d/%d: ", pr->ins.production_matches, pr->ins.production_tries);
|
||||||
|
if (Wordings::nonempty(pr->ins.sample_text)) LOG("<%W>", pr->ins.sample_text);
|
||||||
|
LOG(" ==> ");
|
||||||
|
Optimiser::log_range_requirement(&(pr->opt.production_req));
|
||||||
|
LOG("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ =
|
||||||
|
void Instrumentation::log_production(production *pr, int detailed) {
|
||||||
|
if (pr->first_ptoken == NULL) LOG("<empty-production>");
|
||||||
|
ptoken *pt;
|
||||||
|
for (pt = pr->first_ptoken; pt; pt = pt->next_ptoken) {
|
||||||
|
Instrumentation::log_ptoken(pt, detailed);
|
||||||
|
LOG(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ =
|
||||||
|
void Instrumentation::log_ptoken(ptoken *pt, int detailed) {
|
||||||
|
if ((detailed) && (pt->opt.ptoken_position != 0)) LOG("(@%d)", pt->opt.ptoken_position);
|
||||||
|
if ((detailed) && (pt->opt.strut_number >= 0)) LOG("(S%d)", pt->opt.strut_number);
|
||||||
|
if (pt->disallow_unexpected_upper) LOG("_");
|
||||||
|
if (pt->negated_ptoken) LOG("^");
|
||||||
|
if (pt->range_starts >= 0) { LOG("{"); if (detailed) LOG("%d:", pt->range_starts); }
|
||||||
|
ptoken *alt;
|
||||||
|
for (alt = pt; alt; alt = alt->alternative_ptoken) {
|
||||||
|
if (alt->nt_pt) {
|
||||||
|
LOG("%V", alt->nt_pt->nonterminal_id);
|
||||||
|
if (detailed) LOG("=%d", alt->result_index);
|
||||||
|
} else {
|
||||||
|
LOG("%V", alt->ve_pt);
|
||||||
|
}
|
||||||
|
if (alt->alternative_ptoken) LOG("/");
|
||||||
|
}
|
||||||
|
if (pt->range_ends >= 0) { if (detailed) LOG(":%d", pt->range_ends); LOG("}"); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@ A less detailed form used in linguistic problem messages:
|
||||||
|
|
||||||
|
=
|
||||||
|
void Instrumentation::write_ptoken(OUTPUT_STREAM, ptoken *pt) {
|
||||||
|
if (pt->disallow_unexpected_upper) WRITE("_");
|
||||||
|
if (pt->negated_ptoken) WRITE("^");
|
||||||
|
if (pt->range_starts >= 0) WRITE("{");
|
||||||
|
ptoken *alt;
|
||||||
|
for (alt = pt; alt; alt = alt->alternative_ptoken) {
|
||||||
|
if (alt->nt_pt) {
|
||||||
|
WRITE("%V", alt->nt_pt->nonterminal_id);
|
||||||
|
} else {
|
||||||
|
WRITE("%V", alt->ve_pt);
|
||||||
|
}
|
||||||
|
if (alt->alternative_ptoken) WRITE("/");
|
||||||
|
}
|
||||||
|
if (pt->range_ends >= 0) WRITE("}");
|
||||||
|
}
|
|
@ -267,27 +267,18 @@ typedef struct production {
|
||||||
struct ptoken *first_ptoken; /* the linked list of ptokens */
|
struct ptoken *first_ptoken; /* the linked list of ptokens */
|
||||||
int match_number; /* 0 for |/a/|, 1 for |/b/| and so on: see //About Preform// */
|
int match_number; /* 0 for |/a/|, 1 for |/b/| and so on: see //About Preform// */
|
||||||
|
|
||||||
int no_ranges; /* actually one more, since range 0 is reserved (see above) */
|
int no_ranges; /* actually one more, since range 0 is reserved */
|
||||||
|
|
||||||
/* Optimiser data */
|
struct production_optimisation_data opt; /* see //The Optimiser// */
|
||||||
int min_pr_words, max_pr_words;
|
struct production_instrumentation_data ins; /* see //Instrumentation// */
|
||||||
struct range_requirement production_req;
|
|
||||||
int no_struts; /* the actual number, this time */
|
|
||||||
struct ptoken *struts[MAX_STRUTS_PER_PRODUCTION]; /* first ptoken in strut */
|
|
||||||
int strut_lengths[MAX_STRUTS_PER_PRODUCTION]; /* length of the strut in words */
|
|
||||||
|
|
||||||
/* For debugging only */
|
|
||||||
int production_tries; /* for statistics collected in instrumented mode */
|
|
||||||
int production_matches; /* ditto */
|
|
||||||
struct wording sample_text; /* ditto */
|
|
||||||
|
|
||||||
struct production *next_production; /* within its production list */
|
struct production *next_production; /* within its production list */
|
||||||
CLASS_DEFINITION
|
CLASS_DEFINITION
|
||||||
} production;
|
} production;
|
||||||
|
|
||||||
@ And at the bottom of the chain, the lowly ptoken. Even this can spawn another
|
@ And at the bottom of God's great chain, the lowly ptoken. Even this can spawn
|
||||||
list, though: the token |fried/green/tomatoes| is a list of three ptokens joined
|
another list, though: the token |fried/green/tomatoes| is a list of three ptokens
|
||||||
by the |alternative_ptoken| links.
|
joined by the |alternative_ptoken| links.
|
||||||
|
|
||||||
There are really only three kinds of ptoken, wildcards, fixed words, and
|
There are really only three kinds of ptoken, wildcards, fixed words, and
|
||||||
nonterminals, but it's fractionally quicker to differentiate the sorts of
|
nonterminals, but it's fractionally quicker to differentiate the sorts of
|
||||||
|
@ -317,11 +308,8 @@ typedef struct ptoken {
|
||||||
int range_starts; /* 1, 2, 3, ... if word range 1, 2, 3, ... starts with this */
|
int range_starts; /* 1, 2, 3, ... if word range 1, 2, 3, ... starts with this */
|
||||||
int range_ends; /* 1, 2, 3, ... if word range 1, 2, 3, ... ends with this */
|
int range_ends; /* 1, 2, 3, ... if word range 1, 2, 3, ... ends with this */
|
||||||
|
|
||||||
/* Optimiser data */
|
struct ptoken_optimisation_data opt; /* see //The Optimiser// */
|
||||||
int ptoken_position; /* fixed position in range: 1, 2, ... for left, -1, -2, ... for right */
|
struct ptoken_instrumentation_data ins; /* see //Instrumentation// */
|
||||||
int strut_number; /* if this is part of a strut, what number? or -1 if not */
|
|
||||||
int ptoken_is_fast; /* can be checked in the fast pass of the parser */
|
|
||||||
struct range_requirement token_req;
|
|
||||||
|
|
||||||
struct ptoken *next_ptoken; /* within its production list */
|
struct ptoken *next_ptoken; /* within its production list */
|
||||||
CLASS_DEFINITION
|
CLASS_DEFINITION
|
||||||
|
@ -350,11 +338,8 @@ production *LoadPreform::new_production(wording W, nonterminal *nt, int pc) {
|
||||||
|
|
||||||
pr->no_ranges = 1; /* so that they count from 1; range 0 is unused */
|
pr->no_ranges = 1; /* so that they count from 1; range 0 is unused */
|
||||||
|
|
||||||
pr->no_struts = 0; /* they will be detected later */
|
Optimiser::initialise_production_data(&(pr->opt));
|
||||||
pr->min_pr_words = 1; pr->max_pr_words = INFINITE_WORD_COUNT;
|
Instrumentation::initialise_production_data(&(pr->ins));
|
||||||
|
|
||||||
pr->production_tries = 0; pr->production_matches = 0;
|
|
||||||
pr->sample_text = EMPTY_WORDING;
|
|
||||||
|
|
||||||
ptoken *head = NULL, *tail = NULL;
|
ptoken *head = NULL, *tail = NULL;
|
||||||
@<Parse the row of production tokens into a linked list of ptokens@>;
|
@<Parse the row of production tokens into a linked list of ptokens@>;
|
||||||
|
@ -571,9 +556,8 @@ ptoken *LoadPreform::new_ptoken(vocabulary_entry *ve, int unescaped, nonterminal
|
||||||
pt->result_index = 1;
|
pt->result_index = 1;
|
||||||
pt->range_starts = -1; pt->range_ends = -1;
|
pt->range_starts = -1; pt->range_ends = -1;
|
||||||
|
|
||||||
pt->ptoken_position = 0;
|
Optimiser::initialise_ptoken_data(&(pt->opt));
|
||||||
pt->strut_number = -1;
|
Instrumentation::initialise_ptoken_data(&(pt->ins));
|
||||||
pt->ptoken_is_fast = FALSE;
|
|
||||||
|
|
||||||
@ If the text refers to a nonterminal which doesn't yet exist, then this
|
@ If the text refers to a nonterminal which doesn't yet exist, then this
|
||||||
creates it; that's how we deal with forward references. //Nonterminals::find//
|
creates it; that's how we deal with forward references. //Nonterminals::find//
|
||||||
|
@ -595,88 +579,3 @@ never returns |NULL|.
|
||||||
if (ve == THREEASTERISKS_V) pt->ptoken_category = POSSIBLY_EMPTY_WILDCARD_PTC;
|
if (ve == THREEASTERISKS_V) pt->ptoken_category = POSSIBLY_EMPTY_WILDCARD_PTC;
|
||||||
}
|
}
|
||||||
if (pt->ptoken_category == FIXED_WORD_PTC) Optimiser::flag_words(ve, nt, pc);
|
if (pt->ptoken_category == FIXED_WORD_PTC) Optimiser::flag_words(ve, nt, pc);
|
||||||
|
|
||||||
@h Logging.
|
|
||||||
Descending these wheels within wheels:
|
|
||||||
|
|
||||||
=
|
|
||||||
void LoadPreform::log(void) {
|
|
||||||
int detailed = FALSE;
|
|
||||||
nonterminal *nt;
|
|
||||||
LOOP_OVER(nt, nonterminal) {
|
|
||||||
#ifdef INSTRUMENTED_PREFORM
|
|
||||||
LOG("%d/%d: ", nt->nonterminal_matches, nt->nonterminal_tries);
|
|
||||||
#endif
|
|
||||||
LOG("%V: ", nt->nonterminal_id);
|
|
||||||
Optimiser::log_range_requirement(&(nt->nonterminal_req));
|
|
||||||
LOG("\n");
|
|
||||||
if (nt->internal_definition) LOG(" (internal)\n");
|
|
||||||
else {
|
|
||||||
production_list *pl;
|
|
||||||
for (pl = nt->first_production_list; pl; pl = pl->next_production_list) {
|
|
||||||
LOG(" $J:\n", pl->definition_language);
|
|
||||||
production *pr;
|
|
||||||
for (pr = pl->first_production; pr; pr = pr->next_production) {
|
|
||||||
LOG(" "); LoadPreform::log_production(pr, detailed);
|
|
||||||
#ifdef INSTRUMENTED_PREFORM
|
|
||||||
LOG(" %d/%d: ", pr->production_matches, pr->production_tries);
|
|
||||||
if (Wordings::nonempty(pr->sample_text)) LOG("<%W>", pr->sample_text);
|
|
||||||
#endif
|
|
||||||
LOG(" ==> ");
|
|
||||||
Optimiser::log_range_requirement(&(pr->production_req));
|
|
||||||
LOG("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LOG(" min %d, max %d\n\n", nt->min_nt_words, nt->max_nt_words);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ =
|
|
||||||
void LoadPreform::log_production(production *pr, int detailed) {
|
|
||||||
if (pr->first_ptoken == NULL) LOG("<empty-production>");
|
|
||||||
ptoken *pt;
|
|
||||||
for (pt = pr->first_ptoken; pt; pt = pt->next_ptoken) {
|
|
||||||
LoadPreform::log_ptoken(pt, detailed);
|
|
||||||
LOG(" ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ =
|
|
||||||
void LoadPreform::log_ptoken(ptoken *pt, int detailed) {
|
|
||||||
if ((detailed) && (pt->ptoken_position != 0)) LOG("(@%d)", pt->ptoken_position);
|
|
||||||
if ((detailed) && (pt->strut_number >= 0)) LOG("(S%d)", pt->strut_number);
|
|
||||||
if (pt->disallow_unexpected_upper) LOG("_");
|
|
||||||
if (pt->negated_ptoken) LOG("^");
|
|
||||||
if (pt->range_starts >= 0) { LOG("{"); if (detailed) LOG("%d:", pt->range_starts); }
|
|
||||||
ptoken *alt;
|
|
||||||
for (alt = pt; alt; alt = alt->alternative_ptoken) {
|
|
||||||
if (alt->nt_pt) {
|
|
||||||
LOG("%V", alt->nt_pt->nonterminal_id);
|
|
||||||
if (detailed) LOG("=%d", alt->result_index);
|
|
||||||
} else {
|
|
||||||
LOG("%V", alt->ve_pt);
|
|
||||||
}
|
|
||||||
if (alt->alternative_ptoken) LOG("/");
|
|
||||||
}
|
|
||||||
if (pt->range_ends >= 0) { if (detailed) LOG(":%d", pt->range_ends); LOG("}"); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@ A less detailed form used in linguistic problem messages:
|
|
||||||
|
|
||||||
=
|
|
||||||
void LoadPreform::write_ptoken(OUTPUT_STREAM, ptoken *pt) {
|
|
||||||
if (pt->disallow_unexpected_upper) WRITE("_");
|
|
||||||
if (pt->negated_ptoken) WRITE("^");
|
|
||||||
if (pt->range_starts >= 0) WRITE("{");
|
|
||||||
ptoken *alt;
|
|
||||||
for (alt = pt; alt; alt = alt->alternative_ptoken) {
|
|
||||||
if (alt->nt_pt) {
|
|
||||||
WRITE("%V", alt->nt_pt->nonterminal_id);
|
|
||||||
} else {
|
|
||||||
WRITE("%V", alt->ve_pt);
|
|
||||||
}
|
|
||||||
if (alt->alternative_ptoken) WRITE("/");
|
|
||||||
}
|
|
||||||
if (pt->range_ends >= 0) WRITE("}");
|
|
||||||
}
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ use the constant |INFINITE_WORD_COUNT| for it.
|
||||||
|
|
||||||
@d INTERNAL_NONTERMINAL(quotedname, identifier, min, max)
|
@d INTERNAL_NONTERMINAL(quotedname, identifier, min, max)
|
||||||
identifier = Nonterminals::find(Vocabulary::entry_for_text(quotedname));
|
identifier = Nonterminals::find(Vocabulary::entry_for_text(quotedname));
|
||||||
identifier->min_nt_words = min; identifier->max_nt_words = max;
|
identifier->opt.min_nt_words = min; identifier->opt.max_nt_words = max;
|
||||||
identifier->internal_definition = identifier##R;
|
identifier->internal_definition = identifier##R;
|
||||||
identifier->marked_internal = TRUE;
|
identifier->marked_internal = TRUE;
|
||||||
|
|
||||||
|
@ -122,18 +122,9 @@ typedef struct nonterminal {
|
||||||
/* Storage for most recent correct match */
|
/* Storage for most recent correct match */
|
||||||
struct wording range_result[MAX_RANGES_PER_PRODUCTION]; /* storage for word ranges matched */
|
struct wording range_result[MAX_RANGES_PER_PRODUCTION]; /* storage for word ranges matched */
|
||||||
|
|
||||||
/* Optimiser data */
|
struct nonterminal_optimisation_data opt; /* see //The Optimiser// */
|
||||||
int optimised_in_this_pass; /* have the following been worked out yet? */
|
struct nonterminal_instrumentation_data ins; /* see //Instrumentation// */
|
||||||
int min_nt_words, max_nt_words; /* for speed */
|
|
||||||
struct range_requirement nonterminal_req;
|
|
||||||
int nt_req_bit; /* which hashing category the words belong to, or $-1$ if none */
|
|
||||||
int number_words_by_production;
|
|
||||||
unsigned int flag_words_in_production;
|
|
||||||
|
|
||||||
/* For debugging only */
|
|
||||||
int watched; /* watch goings-on to the debugging log */
|
|
||||||
int nonterminal_tries; /* for statistics collected in instrumented mode */
|
|
||||||
int nonterminal_matches; /* ditto */
|
|
||||||
CLASS_DEFINITION
|
CLASS_DEFINITION
|
||||||
} nonterminal;
|
} nonterminal;
|
||||||
|
|
||||||
|
@ -189,20 +180,15 @@ nonterminal *Nonterminals::find(vocabulary_entry *name_word) {
|
||||||
nt->internal_definition = NULL;
|
nt->internal_definition = NULL;
|
||||||
nt->voracious = FALSE;
|
nt->voracious = FALSE;
|
||||||
|
|
||||||
for (int i=0; i<MAX_RANGES_PER_PRODUCTION; i++)
|
|
||||||
nt->range_result[i] = EMPTY_WORDING;
|
|
||||||
|
|
||||||
nt->first_production_list = NULL;
|
nt->first_production_list = NULL;
|
||||||
nt->compositor_fn = NULL;
|
nt->compositor_fn = NULL;
|
||||||
nt->multiplicitous = FALSE;
|
nt->multiplicitous = FALSE;
|
||||||
nt->optimised_in_this_pass = FALSE;
|
|
||||||
nt->min_nt_words = 1; nt->max_nt_words = INFINITE_WORD_COUNT;
|
|
||||||
nt->nt_req_bit = -1;
|
|
||||||
nt->number_words_by_production = FALSE;
|
|
||||||
nt->flag_words_in_production = 0;
|
|
||||||
|
|
||||||
nt->watched = FALSE;
|
for (int i=0; i<MAX_RANGES_PER_PRODUCTION; i++)
|
||||||
nt->nonterminal_tries = 0; nt->nonterminal_matches = 0;
|
nt->range_result[i] = EMPTY_WORDING;
|
||||||
|
|
||||||
|
Optimiser::initialise_nonterminal_data(&(nt->opt));
|
||||||
|
Instrumentation::initialise_nonterminal_data(&(nt->ins));
|
||||||
}
|
}
|
||||||
return nt;
|
return nt;
|
||||||
}
|
}
|
||||||
|
@ -246,12 +232,3 @@ any single NT.
|
||||||
=
|
=
|
||||||
int most_recent_result = 0; /* the variable which |inweb| writes |<<r>>| */
|
int most_recent_result = 0; /* the variable which |inweb| writes |<<r>>| */
|
||||||
void *most_recent_result_p = NULL; /* the variable which |inweb| writes |<<rp>>| */
|
void *most_recent_result_p = NULL; /* the variable which |inweb| writes |<<rp>>| */
|
||||||
|
|
||||||
@h Watching.
|
|
||||||
A "watched" nonterminal is one which the Preform parser logs its usage of;
|
|
||||||
this is helpful when debugging.
|
|
||||||
|
|
||||||
=
|
|
||||||
void Nonterminals::watch(nonterminal *nt, int state) {
|
|
||||||
nt->watched = state;
|
|
||||||
}
|
|
||||||
|
|
|
@ -17,14 +17,12 @@ int Preform::parse_nt_against_word_range(nonterminal *nt, wording W, int *result
|
||||||
void **result_p) {
|
void **result_p) {
|
||||||
time_t start_of_nt = time(0);
|
time_t start_of_nt = time(0);
|
||||||
if (nt == NULL) internal_error("can't parse a null nonterminal");
|
if (nt == NULL) internal_error("can't parse a null nonterminal");
|
||||||
#ifdef INSTRUMENTED_PREFORM
|
nt->ins.nonterminal_tries++;
|
||||||
nt->nonterminal_tries++;
|
|
||||||
#endif
|
|
||||||
int success_rval = TRUE; /* what to return in the event of a successful match */
|
int success_rval = TRUE; /* what to return in the event of a successful match */
|
||||||
fail_nonterminal_quantum = 0;
|
fail_nonterminal_quantum = 0;
|
||||||
|
|
||||||
int teppic = ptraci; /* Teppic saves Ptraci */
|
int teppic = ptraci; /* Teppic saves Ptraci */
|
||||||
ptraci = nt->watched;
|
ptraci = nt->ins.watched;
|
||||||
|
|
||||||
if (ptraci) {
|
if (ptraci) {
|
||||||
if (preform_lookahead_mode) ptraci = FALSE;
|
if (preform_lookahead_mode) ptraci = FALSE;
|
||||||
|
@ -32,10 +30,9 @@ int Preform::parse_nt_against_word_range(nonterminal *nt, wording W, int *result
|
||||||
}
|
}
|
||||||
|
|
||||||
int input_length = Wordings::length(W);
|
int input_length = Wordings::length(W);
|
||||||
if ((nt->max_nt_words == 0) ||
|
if ((nt->opt.max_nt_words == 0) ||
|
||||||
((input_length >= nt->min_nt_words) && (input_length <= nt->max_nt_words))) {
|
((input_length >= nt->opt.min_nt_words) && (input_length <= nt->opt.max_nt_words)))
|
||||||
@<Try to match the input text to the nonterminal@>;
|
@<Try to match the input text to the nonterminal@>;
|
||||||
}
|
|
||||||
|
|
||||||
@<The nonterminal has failed to parse@>;
|
@<The nonterminal has failed to parse@>;
|
||||||
}
|
}
|
||||||
|
@ -43,6 +40,7 @@ int Preform::parse_nt_against_word_range(nonterminal *nt, wording W, int *result
|
||||||
@ The routine ends here...
|
@ The routine ends here...
|
||||||
|
|
||||||
@<The nonterminal has failed to parse@> =
|
@<The nonterminal has failed to parse@> =
|
||||||
|
Instrumentation::note_nonterminal_fail(nt);
|
||||||
if (ptraci) LOG("Failed %V (time %d)\n", nt->nonterminal_id, time(0)-start_of_nt);
|
if (ptraci) LOG("Failed %V (time %d)\n", nt->nonterminal_id, time(0)-start_of_nt);
|
||||||
ptraci = teppic;
|
ptraci = teppic;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -51,11 +49,9 @@ int Preform::parse_nt_against_word_range(nonterminal *nt, wording W, int *result
|
||||||
and |QP| will hold the results of the match.
|
and |QP| will hold the results of the match.
|
||||||
|
|
||||||
@<The nonterminal has successfully parsed@> =
|
@<The nonterminal has successfully parsed@> =
|
||||||
|
Instrumentation::note_nonterminal_match(nt, W);
|
||||||
if (result) *result = Q; if (result_p) *result_p = QP;
|
if (result) *result = Q; if (result_p) *result_p = QP;
|
||||||
most_recent_result = Q; most_recent_result_p = QP;
|
most_recent_result = Q; most_recent_result_p = QP;
|
||||||
#ifdef INSTRUMENTED_PREFORM
|
|
||||||
nt->nonterminal_matches++;
|
|
||||||
#endif
|
|
||||||
ptraci = teppic;
|
ptraci = teppic;
|
||||||
return success_rval;
|
return success_rval;
|
||||||
|
|
||||||
|
@ -71,7 +67,7 @@ an internal NT, or try all possible productions for an external one.
|
||||||
unoptimised = TRUE;
|
unoptimised = TRUE;
|
||||||
if (nt->internal_definition) {
|
if (nt->internal_definition) {
|
||||||
if (nt->voracious) unoptimised = TRUE;
|
if (nt->voracious) unoptimised = TRUE;
|
||||||
if ((unoptimised) || (Optimiser::nt_bitmap_violates(W, &(nt->nonterminal_req)) == FALSE)) {
|
if ((unoptimised) || (Optimiser::nt_bitmap_violates(W, &(nt->opt.nonterminal_req)) == FALSE)) {
|
||||||
int r, Q; void *QP = NULL;
|
int r, Q; void *QP = NULL;
|
||||||
if (Wordings::first_wn(W) >= 0) r = (*(nt->internal_definition))(W, &Q, &QP);
|
if (Wordings::first_wn(W) >= 0) r = (*(nt->internal_definition))(W, &Q, &QP);
|
||||||
else { r = FALSE; Q = 0; }
|
else { r = FALSE; Q = 0; }
|
||||||
|
@ -83,12 +79,12 @@ an internal NT, or try all possible productions for an external one.
|
||||||
} else {
|
} else {
|
||||||
if (ptraci) {
|
if (ptraci) {
|
||||||
LOG("%V: <%W> violates ", nt->nonterminal_id, W);
|
LOG("%V: <%W> violates ", nt->nonterminal_id, W);
|
||||||
Optimiser::log_range_requirement(&(nt->nonterminal_req));
|
Optimiser::log_range_requirement(&(nt->opt.nonterminal_req));
|
||||||
LOG("\n");
|
LOG("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((unoptimised) || (Optimiser::nt_bitmap_violates(W, &(nt->nonterminal_req)) == FALSE)) {
|
if ((unoptimised) || (Optimiser::nt_bitmap_violates(W, &(nt->opt.nonterminal_req)) == FALSE)) {
|
||||||
void *acc_result = NULL;
|
void *acc_result = NULL;
|
||||||
production_list *pl;
|
production_list *pl;
|
||||||
for (pl = nt->first_production_list; pl; pl = pl->next_production_list) {
|
for (pl = nt->first_production_list; pl; pl = pl->next_production_list) {
|
||||||
|
@ -99,8 +95,8 @@ an internal NT, or try all possible productions for an external one.
|
||||||
for (pr = pl->first_production; pr; pr = pr->next_production) {
|
for (pr = pl->first_production; pr; pr = pr->next_production) {
|
||||||
int violates = FALSE;
|
int violates = FALSE;
|
||||||
if (unoptimised == FALSE) {
|
if (unoptimised == FALSE) {
|
||||||
if (pr->production_req.ditto_flag) violates = last_v;
|
if (pr->opt.production_req.ditto_flag) violates = last_v;
|
||||||
else violates = Optimiser::nt_bitmap_violates(W, &(pr->production_req));
|
else violates = Optimiser::nt_bitmap_violates(W, &(pr->opt.production_req));
|
||||||
last_v = violates;
|
last_v = violates;
|
||||||
}
|
}
|
||||||
if (violates == FALSE) {
|
if (violates == FALSE) {
|
||||||
|
@ -108,9 +104,9 @@ an internal NT, or try all possible productions for an external one.
|
||||||
} else {
|
} else {
|
||||||
if (ptraci) {
|
if (ptraci) {
|
||||||
LOG("production in %V: ", nt->nonterminal_id);
|
LOG("production in %V: ", nt->nonterminal_id);
|
||||||
LoadPreform::log_production(pr, FALSE);
|
Instrumentation::log_production(pr, FALSE);
|
||||||
LOG(": <%W> violates ", W);
|
LOG(": <%W> violates ", W);
|
||||||
Optimiser::log_range_requirement(&(pr->production_req));
|
Optimiser::log_range_requirement(&(pr->opt.production_req));
|
||||||
LOG("\n");
|
LOG("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -124,7 +120,7 @@ an internal NT, or try all possible productions for an external one.
|
||||||
} else {
|
} else {
|
||||||
if (ptraci) {
|
if (ptraci) {
|
||||||
LOG("%V: <%W> violates ", nt->nonterminal_id, W);
|
LOG("%V: <%W> violates ", nt->nonterminal_id, W);
|
||||||
Optimiser::log_range_requirement(&(nt->nonterminal_req));
|
Optimiser::log_range_requirement(&(nt->opt.nonterminal_req));
|
||||||
LOG("\n");
|
LOG("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -137,25 +133,16 @@ text against a production.
|
||||||
if (ptraci) {
|
if (ptraci) {
|
||||||
LOG_INDENT;
|
LOG_INDENT;
|
||||||
@<Log the production match number@>;
|
@<Log the production match number@>;
|
||||||
LoadPreform::log_production(pr, FALSE); LOG("\n");
|
Instrumentation::log_production(pr, FALSE); LOG("\n");
|
||||||
}
|
}
|
||||||
#ifdef INSTRUMENTED_PREFORM
|
|
||||||
pr->production_tries++;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int slow_scan_needed = FALSE;
|
int slow_scan_needed = FALSE;
|
||||||
#ifdef CORE_MODULE
|
#ifdef CORE_MODULE
|
||||||
parse_node *added_to_result = NULL;
|
parse_node *added_to_result = NULL;
|
||||||
#endif
|
#endif
|
||||||
if ((input_length >= pr->min_pr_words) && (input_length <= pr->max_pr_words)) {
|
if ((input_length >= pr->opt.min_pr_words) && (input_length <= pr->opt.max_pr_words)) {
|
||||||
int Q; void *QP = NULL;
|
int Q; void *QP = NULL;
|
||||||
@<Actually parse the given production, going to Fail if we can't@>;
|
@<Actually parse the given production, going to Fail if we can't@>;
|
||||||
|
Instrumentation::note_production_match(pr, W);
|
||||||
#ifdef INSTRUMENTED_PREFORM /* record the sentence containing the longest example */
|
|
||||||
pr->production_matches++;
|
|
||||||
if (Wordings::length(pr->sample_text) < Wordings::length(W)) pr->sample_text = W;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (ptraci) {
|
if (ptraci) {
|
||||||
@<Log the production match number@>;
|
@<Log the production match number@>;
|
||||||
LOG("succeeded (%s): ", (slow_scan_needed)?"slowly":"quickly");
|
LOG("succeeded (%s): ", (slow_scan_needed)?"slowly":"quickly");
|
||||||
|
@ -165,6 +152,7 @@ text against a production.
|
||||||
}
|
}
|
||||||
|
|
||||||
Fail:
|
Fail:
|
||||||
|
Instrumentation::note_production_fail(pr);
|
||||||
if (ptraci) {
|
if (ptraci) {
|
||||||
@<Log the production match number@>;
|
@<Log the production match number@>;
|
||||||
#ifdef CORE_MODULE
|
#ifdef CORE_MODULE
|
||||||
|
@ -253,8 +241,8 @@ are in those positions.
|
||||||
ptoken *pt;
|
ptoken *pt;
|
||||||
int wn = -1, tc;
|
int wn = -1, tc;
|
||||||
for (pt = pr->first_ptoken, tc = 0; pt; pt = pt->next_ptoken, tc++) {
|
for (pt = pr->first_ptoken, tc = 0; pt; pt = pt->next_ptoken, tc++) {
|
||||||
if (pt->ptoken_is_fast) {
|
if (pt->opt.ptoken_is_fast) {
|
||||||
int p = pt->ptoken_position;
|
int p = pt->opt.ptoken_position;
|
||||||
if (p > 0) wn = Wordings::first_wn(W)+p-1;
|
if (p > 0) wn = Wordings::first_wn(W)+p-1;
|
||||||
else if (p < 0) wn = Wordings::last_wn(W)+p+1;
|
else if (p < 0) wn = Wordings::last_wn(W)+p+1;
|
||||||
if (Preform::parse_fixed_word_ptoken(wn, pt) == FALSE) {
|
if (Preform::parse_fixed_word_ptoken(wn, pt) == FALSE) {
|
||||||
|
@ -278,7 +266,7 @@ and that for each $i$ the $i$-th strut matches the text beginning at $s_i$.
|
||||||
|
|
||||||
@<Try a slow scan through the production@> =
|
@<Try a slow scan through the production@> =
|
||||||
int spos[MAX_STRUTS_PER_PRODUCTION]; /* word numbers for where we are trying the struts */
|
int spos[MAX_STRUTS_PER_PRODUCTION]; /* word numbers for where we are trying the struts */
|
||||||
int NS = pr->no_struts;
|
int NS = pr->opt.no_struts;
|
||||||
@<Start from the lexicographically earliest strut position@>;
|
@<Start from the lexicographically earliest strut position@>;
|
||||||
ptoken *backtrack_token = NULL;
|
ptoken *backtrack_token = NULL;
|
||||||
int backtrack_index = -1, backtrack_to = -1, backtrack_tc = -1;
|
int backtrack_index = -1, backtrack_to = -1, backtrack_tc = -1;
|
||||||
|
@ -301,14 +289,14 @@ handling the popular case of one strut separately.
|
||||||
|
|
||||||
@<Start from the lexicographically earliest strut position@> =
|
@<Start from the lexicographically earliest strut position@> =
|
||||||
if (NS == 1) {
|
if (NS == 1) {
|
||||||
spos[0] = Preform::next_strut_posn_after(W, pr->struts[0], pr->strut_lengths[0], Wordings::first_wn(W));
|
spos[0] = Preform::next_strut_posn_after(W, pr->opt.struts[0], pr->opt.strut_lengths[0], Wordings::first_wn(W));
|
||||||
if (spos[0] == -1) goto Fail;
|
if (spos[0] == -1) goto Fail;
|
||||||
} else if (NS > 1) {
|
} else if (NS > 1) {
|
||||||
int s, from = Wordings::first_wn(W);
|
int s, from = Wordings::first_wn(W);
|
||||||
for (s=0; s<NS; s++) {
|
for (s=0; s<NS; s++) {
|
||||||
spos[s] = Preform::next_strut_posn_after(W, pr->struts[s], pr->strut_lengths[s], from);
|
spos[s] = Preform::next_strut_posn_after(W, pr->opt.struts[s], pr->opt.strut_lengths[s], from);
|
||||||
if (spos[s] == -1) goto Fail;
|
if (spos[s] == -1) goto Fail;
|
||||||
from = spos[s] + pr->strut_lengths[s] + 1;
|
from = spos[s] + pr->opt.strut_lengths[s] + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,20 +308,20 @@ being unable to move forwards, at which point, we've lost.
|
||||||
@<Move on to the next strut position@> =
|
@<Move on to the next strut position@> =
|
||||||
if (NS == 0) goto Fail;
|
if (NS == 0) goto Fail;
|
||||||
else if (NS == 1) {
|
else if (NS == 1) {
|
||||||
spos[0] = Preform::next_strut_posn_after(W, pr->struts[0], pr->strut_lengths[0], spos[0]+1);
|
spos[0] = Preform::next_strut_posn_after(W, pr->opt.struts[0], pr->opt.strut_lengths[0], spos[0]+1);
|
||||||
if (spos[0] == -1) goto Fail;
|
if (spos[0] == -1) goto Fail;
|
||||||
} else if (NS > 1) {
|
} else if (NS > 1) {
|
||||||
int s;
|
int s;
|
||||||
for (s=NS-1; s>=0; s--) {
|
for (s=NS-1; s>=0; s--) {
|
||||||
int n = Preform::next_strut_posn_after(W, pr->struts[s], pr->strut_lengths[s], spos[s]+1);
|
int n = Preform::next_strut_posn_after(W, pr->opt.struts[s], pr->opt.strut_lengths[s], spos[s]+1);
|
||||||
if (n != -1) { spos[s] = n; break; }
|
if (n != -1) { spos[s] = n; break; }
|
||||||
}
|
}
|
||||||
if (s == -1) goto Fail;
|
if (s == -1) goto Fail;
|
||||||
int from = spos[s] + 1; s++;
|
int from = spos[s] + 1; s++;
|
||||||
for (; s<NS; s++) {
|
for (; s<NS; s++) {
|
||||||
spos[s] = Preform::next_strut_posn_after(W, pr->struts[s], pr->strut_lengths[s], from);
|
spos[s] = Preform::next_strut_posn_after(W, pr->opt.struts[s], pr->opt.strut_lengths[s], from);
|
||||||
if (spos[s] == -1) goto Fail;
|
if (spos[s] == -1) goto Fail;
|
||||||
from = spos[s] + pr->strut_lengths[s] + 1;
|
from = spos[s] + pr->opt.strut_lengths[s] + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -411,11 +399,11 @@ we rely on the recursive call to |Preform::parse_nt_against_word_range| returnin
|
||||||
quick no.
|
quick no.
|
||||||
|
|
||||||
@<Match a nonterminal ptoken@> =
|
@<Match a nonterminal ptoken@> =
|
||||||
if ((wn > Wordings::last_wn(W)) && (pt->nt_pt->min_nt_words > 0)) goto FailThisStrutPosition;
|
if ((wn > Wordings::last_wn(W)) && (pt->nt_pt->opt.min_nt_words > 0)) goto FailThisStrutPosition;
|
||||||
int wt;
|
int wt;
|
||||||
if (pt->nt_pt->voracious) wt = Wordings::last_wn(W);
|
if (pt->nt_pt->voracious) wt = Wordings::last_wn(W);
|
||||||
else if ((pt->nt_pt->min_nt_words > 0) && (pt->nt_pt->min_nt_words == pt->nt_pt->max_nt_words))
|
else if ((pt->nt_pt->opt.min_nt_words > 0) && (pt->nt_pt->opt.min_nt_words == pt->nt_pt->opt.max_nt_words))
|
||||||
wt = wn + pt->nt_pt->min_nt_words - 1;
|
wt = wn + pt->nt_pt->opt.min_nt_words - 1;
|
||||||
else @<Calculate how much to stretch this elastic ptoken@>;
|
else @<Calculate how much to stretch this elastic ptoken@>;
|
||||||
|
|
||||||
if (pt == backtrack_token) {
|
if (pt == backtrack_token) {
|
||||||
|
@ -441,7 +429,7 @@ quick no.
|
||||||
}
|
}
|
||||||
if (pt->negated_ptoken) q = q?FALSE:TRUE;
|
if (pt->negated_ptoken) q = q?FALSE:TRUE;
|
||||||
if (q == FALSE) goto FailThisStrutPosition;
|
if (q == FALSE) goto FailThisStrutPosition;
|
||||||
if (pt->nt_pt->max_nt_words > 0) wn = wt+1;
|
if (pt->nt_pt->opt.max_nt_words > 0) wn = wt+1;
|
||||||
|
|
||||||
@ How much text from the input should this ptoken match? We feed it as much
|
@ How much text from the input should this ptoken match? We feed it as much
|
||||||
as possible, and to calculate that, we must either be at the end of the run,
|
as possible, and to calculate that, we must either be at the end of the run,
|
||||||
|
@ -463,10 +451,10 @@ probably gives the wrong answer.)
|
||||||
ptoken *lookahead = nextpt;
|
ptoken *lookahead = nextpt;
|
||||||
if (lookahead == NULL) wt = Wordings::last_wn(W);
|
if (lookahead == NULL) wt = Wordings::last_wn(W);
|
||||||
else {
|
else {
|
||||||
int p = lookahead->ptoken_position;
|
int p = lookahead->opt.ptoken_position;
|
||||||
if (p > 0) wt = Wordings::first_wn(W)+p-2;
|
if (p > 0) wt = Wordings::first_wn(W)+p-2;
|
||||||
else if (p < 0) wt = Wordings::last_wn(W)+p;
|
else if (p < 0) wt = Wordings::last_wn(W)+p;
|
||||||
else if (lookahead->strut_number >= 0) wt = spos[lookahead->strut_number]-1;
|
else if (lookahead->opt.strut_number >= 0) wt = spos[lookahead->opt.strut_number]-1;
|
||||||
else if ((lookahead->nt_pt)
|
else if ((lookahead->nt_pt)
|
||||||
&& (pt->negated_ptoken == FALSE)
|
&& (pt->negated_ptoken == FALSE)
|
||||||
&& (Optimiser::ptoken_width(pt) == PTOKEN_ELASTIC)) {
|
&& (Optimiser::ptoken_width(pt) == PTOKEN_ELASTIC)) {
|
||||||
|
@ -511,10 +499,10 @@ int Preform::next_strut_posn_after(wording W, ptoken *start, int len, int from)
|
||||||
else break;
|
else break;
|
||||||
} else {
|
} else {
|
||||||
int q = Preform::parse_nt_against_word_range(pt->nt_pt,
|
int q = Preform::parse_nt_against_word_range(pt->nt_pt,
|
||||||
Wordings::new(pos, pos+pt->nt_pt->max_nt_words-1),
|
Wordings::new(pos, pos+pt->nt_pt->opt.max_nt_words-1),
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
if (pt->negated_ptoken) q = q?FALSE:TRUE;
|
if (pt->negated_ptoken) q = q?FALSE:TRUE;
|
||||||
if (q) pos += pt->nt_pt->max_nt_words;
|
if (q) pos += pt->nt_pt->opt.max_nt_words;
|
||||||
else break;
|
else break;
|
||||||
}
|
}
|
||||||
if (pos-from >= len) return from;
|
if (pos-from >= len) return from;
|
||||||
|
|
|
@ -12,6 +12,53 @@ changed that.
|
||||||
=
|
=
|
||||||
int first_round_of_nt_optimisation_made = FALSE;
|
int first_round_of_nt_optimisation_made = FALSE;
|
||||||
|
|
||||||
|
typedef struct nonterminal_optimisation_data {
|
||||||
|
int optimised_in_this_pass; /* have the following been worked out yet? */
|
||||||
|
int min_nt_words, max_nt_words; /* for speed */
|
||||||
|
struct range_requirement nonterminal_req;
|
||||||
|
int nt_req_bit; /* which hashing category the words belong to, or $-1$ if none */
|
||||||
|
int number_words_by_production;
|
||||||
|
unsigned int flag_words_in_production;
|
||||||
|
} nonterminal_optimisation_data;
|
||||||
|
|
||||||
|
|
||||||
|
void Optimiser::initialise_nonterminal_data(nonterminal_optimisation_data *opt) {
|
||||||
|
opt->optimised_in_this_pass = FALSE;
|
||||||
|
opt->min_nt_words = 1; opt->max_nt_words = INFINITE_WORD_COUNT;
|
||||||
|
opt->nt_req_bit = -1;
|
||||||
|
opt->number_words_by_production = FALSE;
|
||||||
|
opt->flag_words_in_production = 0;
|
||||||
|
Optimiser::clear_rreq(&(opt->nonterminal_req));
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct ptoken_optimisation_data {
|
||||||
|
int ptoken_position; /* fixed position in range: 1, 2, ... for left, -1, -2, ... for right */
|
||||||
|
int strut_number; /* if this is part of a strut, what number? or -1 if not */
|
||||||
|
int ptoken_is_fast; /* can be checked in the fast pass of the parser */
|
||||||
|
struct range_requirement token_req;
|
||||||
|
} ptoken_optimisation_data;
|
||||||
|
|
||||||
|
void Optimiser::initialise_ptoken_data(ptoken_optimisation_data *opt) {
|
||||||
|
opt->ptoken_position = 0;
|
||||||
|
opt->strut_number = -1;
|
||||||
|
opt->ptoken_is_fast = FALSE;
|
||||||
|
Optimiser::clear_rreq(&(opt->token_req));
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct production_optimisation_data {
|
||||||
|
int min_pr_words, max_pr_words;
|
||||||
|
struct range_requirement production_req;
|
||||||
|
int no_struts;
|
||||||
|
struct ptoken *struts[MAX_STRUTS_PER_PRODUCTION]; /* first ptoken in strut */
|
||||||
|
int strut_lengths[MAX_STRUTS_PER_PRODUCTION]; /* length of the strut in words */
|
||||||
|
} production_optimisation_data;
|
||||||
|
|
||||||
|
void Optimiser::initialise_production_data(production_optimisation_data *opt) {
|
||||||
|
opt->no_struts = 0;
|
||||||
|
opt->min_pr_words = 1; opt->max_pr_words = INFINITE_WORD_COUNT;
|
||||||
|
Optimiser::clear_rreq(&(opt->production_req));
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct range_requirement {
|
typedef struct range_requirement {
|
||||||
int no_requirements;
|
int no_requirements;
|
||||||
int ditto_flag;
|
int ditto_flag;
|
||||||
|
@ -29,12 +76,12 @@ int no_req_bits = 0;
|
||||||
void Optimiser::optimise_counts(void) {
|
void Optimiser::optimise_counts(void) {
|
||||||
nonterminal *nt;
|
nonterminal *nt;
|
||||||
LOOP_OVER(nt, nonterminal) {
|
LOOP_OVER(nt, nonterminal) {
|
||||||
Optimiser::clear_rreq(&(nt->nonterminal_req));
|
Optimiser::clear_rreq(&(nt->opt.nonterminal_req));
|
||||||
if (nt->marked_internal) {
|
if (nt->marked_internal) {
|
||||||
nt->optimised_in_this_pass = TRUE;
|
nt->opt.optimised_in_this_pass = TRUE;
|
||||||
} else {
|
} else {
|
||||||
nt->optimised_in_this_pass = FALSE;
|
nt->opt.optimised_in_this_pass = FALSE;
|
||||||
nt->min_nt_words = 1; nt->max_nt_words = INFINITE_WORD_COUNT;
|
nt->opt.min_nt_words = 1; nt->opt.max_nt_words = INFINITE_WORD_COUNT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (first_round_of_nt_optimisation_made == FALSE) {
|
if (first_round_of_nt_optimisation_made == FALSE) {
|
||||||
|
@ -51,8 +98,8 @@ void Optimiser::optimise_counts(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Optimiser::optimise_nt(nonterminal *nt) {
|
void Optimiser::optimise_nt(nonterminal *nt) {
|
||||||
if (nt->optimised_in_this_pass) return;
|
if (nt->opt.optimised_in_this_pass) return;
|
||||||
nt->optimised_in_this_pass = TRUE;
|
nt->opt.optimised_in_this_pass = TRUE;
|
||||||
@<Compute the minimum and maximum match lengths@>;
|
@<Compute the minimum and maximum match lengths@>;
|
||||||
|
|
||||||
production_list *pl;
|
production_list *pl;
|
||||||
|
@ -88,7 +135,7 @@ minimum match lengths of its tokens.
|
||||||
if (min_p > INFINITE_WORD_COUNT) min_p = INFINITE_WORD_COUNT;
|
if (min_p > INFINITE_WORD_COUNT) min_p = INFINITE_WORD_COUNT;
|
||||||
if (max_p > INFINITE_WORD_COUNT) max_p = INFINITE_WORD_COUNT;
|
if (max_p > INFINITE_WORD_COUNT) max_p = INFINITE_WORD_COUNT;
|
||||||
}
|
}
|
||||||
pr->min_pr_words = min_p; pr->max_pr_words = max_p;
|
pr->opt.min_pr_words = min_p; pr->opt.max_pr_words = max_p;
|
||||||
if ((min == -1) && (max == -1)) { min = min_p; max = max_p; }
|
if ((min == -1) && (max == -1)) { min = min_p; max = max_p; }
|
||||||
else {
|
else {
|
||||||
if (min_p < min) min = min_p;
|
if (min_p < min) min = min_p;
|
||||||
|
@ -97,7 +144,7 @@ minimum match lengths of its tokens.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (min >= 1) {
|
if (min >= 1) {
|
||||||
nt->min_nt_words = min; nt->max_nt_words = max;
|
nt->opt.min_nt_words = min; nt->opt.max_nt_words = max;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ A token is "elastic" if it can match text of differing lengths, and
|
@ A token is "elastic" if it can match text of differing lengths, and
|
||||||
|
@ -120,10 +167,10 @@ starts and finishes; it's not enough just to know where it starts.
|
||||||
last = pt;
|
last = pt;
|
||||||
int L = Optimiser::ptoken_width(pt);
|
int L = Optimiser::ptoken_width(pt);
|
||||||
if ((posn != 0) && (L != PTOKEN_ELASTIC)) {
|
if ((posn != 0) && (L != PTOKEN_ELASTIC)) {
|
||||||
pt->ptoken_position = posn;
|
pt->opt.ptoken_position = posn;
|
||||||
posn += L;
|
posn += L;
|
||||||
} else {
|
} else {
|
||||||
pt->ptoken_position = 0; /* thus clearing any expired positions from earlier */
|
pt->opt.ptoken_position = 0; /* thus clearing any expired positions from earlier */
|
||||||
posn = 0;
|
posn = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,10 +186,10 @@ production, but this is never larger than about 10.
|
||||||
int posn = -1;
|
int posn = -1;
|
||||||
ptoken *pt;
|
ptoken *pt;
|
||||||
for (pt = last; pt; ) {
|
for (pt = last; pt; ) {
|
||||||
if (pt->ptoken_position != 0) break; /* don't use a back-end position if there's a front one */
|
if (pt->opt.ptoken_position != 0) break; /* don't use a back-end position if there's a front one */
|
||||||
int L = Optimiser::ptoken_width(pt);
|
int L = Optimiser::ptoken_width(pt);
|
||||||
if ((posn != 0) && (L != PTOKEN_ELASTIC)) {
|
if ((posn != 0) && (L != PTOKEN_ELASTIC)) {
|
||||||
pt->ptoken_position = posn;
|
pt->opt.ptoken_position = posn;
|
||||||
posn -= L;
|
posn -= L;
|
||||||
} else break;
|
} else break;
|
||||||
|
|
||||||
|
@ -182,36 +229,38 @@ each of which has no known position. (Clearly if one of them has a known
|
||||||
position then all of them have, but we're in no hurry so we don't exploit that.)
|
position then all of them have, but we're in no hurry so we don't exploit that.)
|
||||||
|
|
||||||
@<Compute struts within the production@> =
|
@<Compute struts within the production@> =
|
||||||
pr->no_struts = 0;
|
pr->opt.no_struts = 0;
|
||||||
ptoken *pt;
|
ptoken *pt;
|
||||||
for (pt = pr->first_ptoken; pt; pt = pt->next_ptoken) {
|
for (pt = pr->first_ptoken; pt; pt = pt->next_ptoken) {
|
||||||
if ((pt->ptoken_position == 0) && (Optimiser::ptoken_width(pt) != PTOKEN_ELASTIC)) {
|
if ((pt->opt.ptoken_position == 0) &&
|
||||||
if (pr->no_struts >= MAX_STRUTS_PER_PRODUCTION) continue;
|
(Optimiser::ptoken_width(pt) != PTOKEN_ELASTIC)) {
|
||||||
pr->struts[pr->no_struts] = pt;
|
if (pr->opt.no_struts >= MAX_STRUTS_PER_PRODUCTION) continue;
|
||||||
pr->strut_lengths[pr->no_struts] = 0;
|
pr->opt.struts[pr->opt.no_struts] = pt;
|
||||||
while ((pt->ptoken_position == 0) && (Optimiser::ptoken_width(pt) != PTOKEN_ELASTIC)) {
|
pr->opt.strut_lengths[pr->opt.no_struts] = 0;
|
||||||
pt->strut_number = pr->no_struts;
|
while ((pt->opt.ptoken_position == 0) &&
|
||||||
pr->strut_lengths[pr->no_struts] += Optimiser::ptoken_width(pt);
|
(Optimiser::ptoken_width(pt) != PTOKEN_ELASTIC)) {
|
||||||
|
pt->opt.strut_number = pr->opt.no_struts;
|
||||||
|
pr->opt.strut_lengths[pr->opt.no_struts] += Optimiser::ptoken_width(pt);
|
||||||
if (pt->next_ptoken == NULL) break; /* should be impossible */
|
if (pt->next_ptoken == NULL) break; /* should be impossible */
|
||||||
pt = pt->next_ptoken;
|
pt = pt->next_ptoken;
|
||||||
}
|
}
|
||||||
pr->no_struts++;
|
pr->opt.no_struts++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@<Work out which ptokens are fast@> =
|
@<Work out which ptokens are fast@> =
|
||||||
ptoken *pt;
|
ptoken *pt;
|
||||||
for (pt = pr->first_ptoken; pt; pt = pt->next_ptoken)
|
for (pt = pr->first_ptoken; pt; pt = pt->next_ptoken)
|
||||||
if ((pt->ptoken_category == FIXED_WORD_PTC) && (pt->ptoken_position != 0)
|
if ((pt->ptoken_category == FIXED_WORD_PTC) && (pt->opt.ptoken_position != 0)
|
||||||
&& (pt->range_starts < 0) && (pt->range_ends < 0))
|
&& (pt->range_starts < 0) && (pt->range_ends < 0))
|
||||||
pt->ptoken_is_fast = TRUE;
|
pt->opt.ptoken_is_fast = TRUE;
|
||||||
|
|
||||||
@ Weak requirement: one word in range must match one of these bits
|
@ Weak requirement: one word in range must match one of these bits
|
||||||
Strong ": all bits in this range must be matched by one word
|
Strong ": all bits in this range must be matched by one word
|
||||||
|
|
||||||
@<Mark the vocabulary's incidence list with this nonterminal@> =
|
@<Mark the vocabulary's incidence list with this nonterminal@> =
|
||||||
int first_production = TRUE;
|
int first_production = TRUE;
|
||||||
Optimiser::clear_rreq(&(nt->nonterminal_req));
|
Optimiser::clear_rreq(&(nt->opt.nonterminal_req));
|
||||||
#ifdef PREFORM_CIRCULARITY_BREAKER
|
#ifdef PREFORM_CIRCULARITY_BREAKER
|
||||||
PREFORM_CIRCULARITY_BREAKER(nt);
|
PREFORM_CIRCULARITY_BREAKER(nt);
|
||||||
#endif
|
#endif
|
||||||
|
@ -238,27 +287,27 @@ Strong ": all bits in this range must be matched by one word
|
||||||
int all = TRUE, first = TRUE;
|
int all = TRUE, first = TRUE;
|
||||||
ptoken *pt;
|
ptoken *pt;
|
||||||
for (pt = pr->first_ptoken; pt; pt = pt->next_ptoken) {
|
for (pt = pr->first_ptoken; pt; pt = pt->next_ptoken) {
|
||||||
Optimiser::clear_rreq(&(pt->token_req));
|
Optimiser::clear_rreq(&(pt->opt.token_req));
|
||||||
if ((pt->ptoken_category == FIXED_WORD_PTC) && (pt->negated_ptoken == FALSE)) {
|
if ((pt->ptoken_category == FIXED_WORD_PTC) && (pt->negated_ptoken == FALSE)) {
|
||||||
ptoken *alt;
|
ptoken *alt;
|
||||||
for (alt = pt; alt; alt = alt->alternative_ptoken)
|
for (alt = pt; alt; alt = alt->alternative_ptoken)
|
||||||
Optimiser::set_nt_incidence(alt->ve_pt, nt);
|
Optimiser::set_nt_incidence(alt->ve_pt, nt);
|
||||||
Optimiser::atomic_rreq(&(pt->token_req), nt);
|
Optimiser::atomic_rreq(&(pt->opt.token_req), nt);
|
||||||
} else all = FALSE;
|
} else all = FALSE;
|
||||||
int self_referential = FALSE, empty = FALSE;
|
int self_referential = FALSE, empty = FALSE;
|
||||||
if ((pt->ptoken_category == NONTERMINAL_PTC) &&
|
if ((pt->ptoken_category == NONTERMINAL_PTC) &&
|
||||||
(pt->nt_pt->min_nt_words == 0) && (pt->nt_pt->max_nt_words == 0))
|
(pt->nt_pt->opt.min_nt_words == 0) && (pt->nt_pt->opt.max_nt_words == 0))
|
||||||
empty = TRUE; /* even if negated, notice */
|
empty = TRUE; /* even if negated, notice */
|
||||||
if ((pt->ptoken_category == NONTERMINAL_PTC) && (pt->negated_ptoken == FALSE)) {
|
if ((pt->ptoken_category == NONTERMINAL_PTC) && (pt->negated_ptoken == FALSE)) {
|
||||||
/* if (pt->nt_pt == nt) self_referential = TRUE; */
|
/* if (pt->nt_pt == nt) self_referential = TRUE; */
|
||||||
Optimiser::optimise_nt(pt->nt_pt);
|
Optimiser::optimise_nt(pt->nt_pt);
|
||||||
pt->token_req = pt->nt_pt->nonterminal_req;
|
pt->opt.token_req = pt->nt_pt->opt.nonterminal_req;
|
||||||
}
|
}
|
||||||
if ((self_referential == FALSE) && (empty == FALSE)) {
|
if ((self_referential == FALSE) && (empty == FALSE)) {
|
||||||
if (first) {
|
if (first) {
|
||||||
prt = pt->token_req;
|
prt = pt->opt.token_req;
|
||||||
} else {
|
} else {
|
||||||
Optimiser::concatenate_rreq(&prt, &(pt->token_req));
|
Optimiser::concatenate_rreq(&prt, &(pt->opt.token_req));
|
||||||
}
|
}
|
||||||
first = FALSE;
|
first = FALSE;
|
||||||
}
|
}
|
||||||
|
@ -269,10 +318,10 @@ Strong ": all bits in this range must be matched by one word
|
||||||
Optimiser::disjoin_rreq(&nnt, &prt);
|
Optimiser::disjoin_rreq(&nnt, &prt);
|
||||||
}
|
}
|
||||||
first_production = FALSE;
|
first_production = FALSE;
|
||||||
pr->production_req = prt;
|
pr->opt.production_req = prt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nt->nonterminal_req = nnt;
|
nt->opt.nonterminal_req = nnt;
|
||||||
#ifdef PREFORM_CIRCULARITY_BREAKER
|
#ifdef PREFORM_CIRCULARITY_BREAKER
|
||||||
PREFORM_CIRCULARITY_BREAKER(nt);
|
PREFORM_CIRCULARITY_BREAKER(nt);
|
||||||
#endif
|
#endif
|
||||||
|
@ -290,11 +339,11 @@ void Optimiser::optimise_nt_reqs(nonterminal *nt) {
|
||||||
production *pr;
|
production *pr;
|
||||||
range_requirement *prev_req = NULL;
|
range_requirement *prev_req = NULL;
|
||||||
for (pr = pl->first_production; pr; pr = pr->next_production) {
|
for (pr = pl->first_production; pr; pr = pr->next_production) {
|
||||||
Optimiser::optimise_req(&(pr->production_req), prev_req);
|
Optimiser::optimise_req(&(pr->opt.production_req), prev_req);
|
||||||
prev_req = &(pr->production_req);
|
prev_req = &(pr->opt.production_req);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Optimiser::optimise_req(&(nt->nonterminal_req), NULL);
|
Optimiser::optimise_req(&(nt->opt.nonterminal_req), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Optimiser::optimise_req(range_requirement *req, range_requirement *prev) {
|
void Optimiser::optimise_req(range_requirement *req, range_requirement *prev) {
|
||||||
|
@ -324,31 +373,31 @@ void Optimiser::optimise_req(range_requirement *req, range_requirement *prev) {
|
||||||
|
|
||||||
@ =
|
@ =
|
||||||
void Optimiser::mark_nt_as_requiring_itself(nonterminal *nt) {
|
void Optimiser::mark_nt_as_requiring_itself(nonterminal *nt) {
|
||||||
nt->nonterminal_req.DS_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.DS_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
nt->nonterminal_req.DW_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.DW_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Optimiser::mark_nt_as_requiring_itself_first(nonterminal *nt) {
|
void Optimiser::mark_nt_as_requiring_itself_first(nonterminal *nt) {
|
||||||
nt->nonterminal_req.DS_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.DS_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
nt->nonterminal_req.DW_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.DW_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
nt->nonterminal_req.FS_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.FS_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
nt->nonterminal_req.FW_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.FW_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Optimiser::mark_nt_as_requiring_itself_conj(nonterminal *nt) {
|
void Optimiser::mark_nt_as_requiring_itself_conj(nonterminal *nt) {
|
||||||
nt->nonterminal_req.DS_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.DS_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
nt->nonterminal_req.DW_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.DW_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
nt->nonterminal_req.CS_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.CS_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
nt->nonterminal_req.CW_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.CW_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
nt->nonterminal_req.FS_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.FS_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
nt->nonterminal_req.FW_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.FW_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Optimiser::mark_nt_as_requiring_itself_augmented(nonterminal *nt, int x) {
|
void Optimiser::mark_nt_as_requiring_itself_augmented(nonterminal *nt, int x) {
|
||||||
nt->nonterminal_req.DS_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.DS_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
nt->nonterminal_req.DW_req |= (Optimiser::nt_bitmap_bit(nt));
|
nt->opt.nonterminal_req.DW_req |= (Optimiser::nt_bitmap_bit(nt));
|
||||||
nt->nonterminal_req.CW_req |= (Optimiser::nt_bitmap_bit(nt) + x);
|
nt->opt.nonterminal_req.CW_req |= (Optimiser::nt_bitmap_bit(nt) + x);
|
||||||
nt->nonterminal_req.FW_req |= (Optimiser::nt_bitmap_bit(nt) + x);
|
nt->opt.nonterminal_req.FW_req |= (Optimiser::nt_bitmap_bit(nt) + x);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Optimiser::set_nt_incidence(vocabulary_entry *ve, nonterminal *nt) {
|
void Optimiser::set_nt_incidence(vocabulary_entry *ve, nonterminal *nt) {
|
||||||
|
@ -369,16 +418,16 @@ int Optimiser::test_nt_incidence(vocabulary_entry *ve, nonterminal *nt) {
|
||||||
|
|
||||||
=
|
=
|
||||||
int Optimiser::nt_bitmap_bit(nonterminal *nt) {
|
int Optimiser::nt_bitmap_bit(nonterminal *nt) {
|
||||||
if (nt->nt_req_bit == -1) {
|
if (nt->opt.nt_req_bit == -1) {
|
||||||
int b = RESERVED_NT_BITS + ((no_req_bits++)%(32-RESERVED_NT_BITS));
|
int b = RESERVED_NT_BITS + ((no_req_bits++)%(32-RESERVED_NT_BITS));
|
||||||
nt->nt_req_bit = (1 << b);
|
nt->opt.nt_req_bit = (1 << b);
|
||||||
}
|
}
|
||||||
return nt->nt_req_bit;
|
return nt->opt.nt_req_bit;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Optimiser::assign_bitmap_bit(nonterminal *nt, int b) {
|
void Optimiser::assign_bitmap_bit(nonterminal *nt, int b) {
|
||||||
if (nt == NULL) internal_error("null NT");
|
if (nt == NULL) internal_error("null NT");
|
||||||
nt->nt_req_bit = (1 << b);
|
nt->opt.nt_req_bit = (1 << b);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Optimiser::test_word(int wn, nonterminal *nt) {
|
int Optimiser::test_word(int wn, nonterminal *nt) {
|
||||||
|
@ -655,8 +704,8 @@ void Optimiser::ptoken_extrema(ptoken *pt, int *min_t, int *max_t) {
|
||||||
switch (pt->ptoken_category) {
|
switch (pt->ptoken_category) {
|
||||||
case NONTERMINAL_PTC:
|
case NONTERMINAL_PTC:
|
||||||
Optimiser::optimise_nt(pt->nt_pt); /* recurse as needed to find its extrema */
|
Optimiser::optimise_nt(pt->nt_pt); /* recurse as needed to find its extrema */
|
||||||
*min_t = pt->nt_pt->min_nt_words;
|
*min_t = pt->nt_pt->opt.min_nt_words;
|
||||||
*max_t = pt->nt_pt->max_nt_words;
|
*max_t = pt->nt_pt->opt.max_nt_words;
|
||||||
break;
|
break;
|
||||||
case MULTIPLE_WILDCARD_PTC:
|
case MULTIPLE_WILDCARD_PTC:
|
||||||
*max_t = INFINITE_WORD_COUNT;
|
*max_t = INFINITE_WORD_COUNT;
|
||||||
|
@ -674,7 +723,7 @@ with match number |pc| for the nonterminal |nt|:
|
||||||
|
|
||||||
=
|
=
|
||||||
void Optimiser::flag_words(vocabulary_entry *ve, nonterminal *nt, int pc) {
|
void Optimiser::flag_words(vocabulary_entry *ve, nonterminal *nt, int pc) {
|
||||||
ve->flags |= (nt->flag_words_in_production);
|
ve->flags |= (nt->opt.flag_words_in_production);
|
||||||
if (nt->number_words_by_production) ve->literal_number_value = pc;
|
if (nt->opt.number_words_by_production) ve->literal_number_value = pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,3 +33,4 @@ Chapter 4: Parsing
|
||||||
The Optimiser
|
The Optimiser
|
||||||
Preform
|
Preform
|
||||||
Basic Nonterminals
|
Basic Nonterminals
|
||||||
|
Instrumentation
|
||||||
|
|
|
@ -161,22 +161,23 @@ wording and a unique ID number and makes something sensible: |I15_a_little_lamb|
|
||||||
say.
|
say.
|
||||||
|
|
||||||
@h Preform.
|
@h Preform.
|
||||||
Prefor is a meta-language for writing a simple grammar: it's in some sense
|
Preform is a meta-language for writing a simple grammar: it's in some sense
|
||||||
pre-Inform, because it defines the Inform language itself. See //About Preform//.
|
pre-Inform, because it defines the Inform language itself. See //About Preform//.
|
||||||
|
|
||||||
Compilers are a little like the human body, in that most of their organs can
|
Compilers are a little like the human body, in that most of their organs can
|
||||||
be located in a single spot: there is just one lexical analyser, and it is
|
be located in a single spot: the heart, for example, or the gall bladder.
|
||||||
entirely contained in the section //Lexer//. But just a few organs -- the
|
Or in the case of Inform, the //Lexer//. But a few organs of the body -- like
|
||||||
nervous system, or the blood vessels -- are present almost everywhere in the
|
the nervous system, or blood vessels -- are found almost everywhere in the
|
||||||
body, and the Inform syntax analyser is like that. While the basic code which
|
body, and the Inform syntax analyser is like that. While the basic code which
|
||||||
drives this is in //Preform// and in the //syntax// module, the actual
|
drives this is in //Preform// and in the //syntax// module, the actual
|
||||||
syntax being read can be found all over Inform. This has a notation like so:
|
syntax being read is in many, many different places. Such syntax has a notation
|
||||||
|
like so:
|
||||||
= (text as Preform)
|
= (text as Preform)
|
||||||
<competitor> ::=
|
<competitor> ::=
|
||||||
<ordinal-number> runner | ==> TRUE
|
<ordinal-number> runner | ==> TRUE
|
||||||
runner no <cardinal-number> ==> FALSE
|
runner no <cardinal-number> ==> FALSE
|
||||||
=
|
=
|
||||||
And such notation is mixed in with regular C code in many sections of the
|
This notation is mixed in with regular C code in many sections of the
|
||||||
//core// and other modules.
|
//core// and other modules.
|
||||||
|
|
||||||
This apparent dispersal is in some ways misleading, though, because //inweb//,
|
This apparent dispersal is in some ways misleading, though, because //inweb//,
|
||||||
|
|
Loading…
Reference in a new issue