1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-01 06:24:58 +03:00

Started in on words module

This commit is contained in:
Graham Nelson 2020-05-11 22:33:22 +01:00
parent 6893c4130f
commit 7f37431f4a
8 changed files with 54 additions and 90 deletions

View file

@ -87,7 +87,7 @@ all we need do is set up some debugging log facilities.
<span class="plain-syntax"> </span><a href="2-nt.html#SP12" class="function-link"><span class="function-syntax">NodeType::metadata_setup</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-na.html#SP12" class="function-link"><span class="function-syntax">Annotations::make_annotation_allowed_table</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'m'</span><span class="plain-syntax">, </span><a href="2-pn.html#SP15" class="function-link"><span class="function-syntax">Node::log_tree</span></a><span class="plain-syntax">); /* |$</span><span class="identifier-syntax">m</span><span class="plain-syntax">| = </span><span class="identifier-syntax">log</span><span class="plain-syntax"> </span><span class="identifier-syntax">syntax</span><span class="plain-syntax"> </span><span class="identifier-syntax">tree</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> </span><span class="identifier-syntax">node</span><span class="plain-syntax"> */</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger_I</span><span class="plain-syntax">(</span><span class="character-syntax">'N'</span><span class="plain-syntax">, </span><a href="2-nt.html#SP8" class="function-link"><span class="function-syntax">NodeType::log</span></a><span class="plain-syntax">); /* |$</span><span class="identifier-syntax">N</span><span class="plain-syntax">| = </span><span class="identifier-syntax">log</span><span class="plain-syntax"> </span><span class="identifier-syntax">individual</span><span class="plain-syntax"> </span><span class="identifier-syntax">node</span><span class="plain-syntax"> </span><span class="identifier-syntax">type</span><span class="plain-syntax"> */</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger_I</span><span class="plain-syntax">(</span><span class="character-syntax">'N'</span><span class="plain-syntax">, </span><a href="2-nt.html#SP8" class="function-link"><span class="function-syntax">NodeType::log</span></a><span class="plain-syntax">); /* |$</span><span class="identifier-syntax">N</span><span class="plain-syntax">| = </span><span class="identifier-syntax">log</span><span class="plain-syntax"> </span><span class="identifier-syntax">individual</span><span class="plain-syntax"> </span><span class="identifier-syntax">node</span><span class="plain-syntax"> </span><span class="identifier-syntax">type</span><span class="plain-syntax"> */</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'P'</span><span class="plain-syntax">, </span><a href="2-pn.html#SP17" class="function-link"><span class="function-syntax">Node::log_node</span></a><span class="plain-syntax">); /* |$</span><span class="identifier-syntax">P</span><span class="plain-syntax">| = </span><span class="identifier-syntax">log</span><span class="plain-syntax"> </span><span class="identifier-syntax">individual</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse</span><span class="plain-syntax"> </span><span class="identifier-syntax">node</span><span class="plain-syntax"> */</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'T'</span><span class="plain-syntax">, </span><a href="2-pn.html#SP15" class="function-link"><span class="function-syntax">Node::log_subtree</span></a><span class="plain-syntax">); /* |$</span><span class="identifier-syntax">T</span><span class="plain-syntax">| = </span><span class="identifier-syntax">log</span><span class="plain-syntax"> </span><span class="identifier-syntax">tree</span><span class="plain-syntax"> </span><span class="identifier-syntax">under</span><span class="plain-syntax"> </span><span class="identifier-syntax">node</span><span class="plain-syntax"> */</span>
<span class="plain-syntax">}</span>

View file

@ -58,8 +58,8 @@
<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#1">Chapter 1: Setting Up</a></li><li><b>Words Module</b></li></ul></div>
<p class="purpose">Setting up the use of this module.</p>
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. </b>This section simoly sets up the module in ways expected by <a href="../../../inweb/docs/foundation-module/index.html" class="internal">foundation</a>, and
contains no code of interest. The following constant exists only in tools
<p class="commentary firstcommentary"><a id="SP1"></a><b>&#167;1. </b>This section simoly sets up the module in ways expected by <a href="../../../inweb/docs/foundation-module/index.html" class="internal">foundation</a>,
and contains no code of interest. The following constant exists only in tools
which use this module:
</p>
@ -68,9 +68,7 @@ which use this module:
<p class="commentary firstcommentary"><a id="SP2"></a><b>&#167;2. </b>This module defines the following classes:
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">LEXER_TEXT_MREASON</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LEXER_WORDS_MREASON</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">source_file_CLASS</span>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">source_file_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">vocabulary_entry_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">nonterminal_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">production_CLASS</span>
@ -88,59 +86,35 @@ which use this module:
<p class="commentary firstcommentary"><a id="SP3"></a><b>&#167;3. </b>Like all modules, this one must define a <span class="extract"><span class="extract-syntax">start</span></span> and <span class="extract"><span class="extract-syntax">end</span></span> function:
</p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">LEXER_TEXT_MREASON</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LEXER_WORDS_MREASON</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">LEXICAL_OUTPUT_DA</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">VOCABULARY_DA</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">WordsModule::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Memory::reason_name</span><span class="plain-syntax">(</span><span class="constant-syntax">LEXER_TEXT_MREASON</span><span class="plain-syntax">, </span><span class="string-syntax">"source text"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Memory::reason_name</span><span class="plain-syntax">(</span><span class="constant-syntax">LEXER_TEXT_MREASON</span><span class="plain-syntax">, </span><span class="string-syntax">"source text"</span><span class="plain-syntax">); </span><span class="comment-syntax"> ho hum</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Memory::reason_name</span><span class="plain-syntax">(</span><span class="constant-syntax">LEXER_WORDS_MREASON</span><span class="plain-syntax">, </span><span class="string-syntax">"source text details"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-wm.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Register this module's memory allocation reasons</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-wm.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Register this module's stream writers</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-wm.html#SP3_4" class="named-paragraph-link"><span class="named-paragraph">Register this module's debugging log aspects</span><span class="named-paragraph-number">3.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="1-wm.html#SP3_5" class="named-paragraph-link"><span class="named-paragraph">Register this module's debugging log writers</span><span class="named-paragraph-number">3.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, &amp;</span><a href="2-wa.html#SP9" class="function-link"><span class="function-syntax">WordAssemblages::writer</span></a><span class="plain-syntax">); </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">%A</span></span><span class="comment-syntax"> = write word assemblage</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer_I</span><span class="plain-syntax">(</span><span class="character-syntax">'N'</span><span class="plain-syntax">, &amp;</span><a href="3-lxr.html#SP18" class="function-link"><span class="function-syntax">Lexer::writer</span></a><span class="plain-syntax">); /* |%</span><span class="identifier-syntax">N</span><span class="plain-syntax">| = </span><span class="identifier-syntax">write</span><span class="plain-syntax"> </span><span class="identifier-syntax">word</span><span class="plain-syntax"> </span><span class="identifier-syntax">with</span><span class="plain-syntax"> </span><span class="identifier-syntax">this</span><span class="plain-syntax"> </span><span class="identifier-syntax">number</span><span class="plain-syntax"> */</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer</span><span class="plain-syntax">(</span><span class="character-syntax">'V'</span><span class="plain-syntax">, &amp;</span><a href="2-vcb.html#SP8" class="function-link"><span class="function-syntax">Vocabulary::writer</span></a><span class="plain-syntax">); /* |%</span><span class="identifier-syntax">V</span><span class="plain-syntax">| = </span><span class="identifier-syntax">write</span><span class="plain-syntax"> </span><span class="identifier-syntax">vocabulary</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> */</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer_W</span><span class="plain-syntax">(</span><span class="character-syntax">'W'</span><span class="plain-syntax">, &amp;</span><a href="3-wrd.html#SP22" class="function-link"><span class="function-syntax">Wordings::writer</span></a><span class="plain-syntax">); /* |%</span><span class="identifier-syntax">W</span><span class="plain-syntax">| = </span><span class="identifier-syntax">write</span><span class="plain-syntax"> </span><span class="reserved-syntax">wording</span><span class="plain-syntax"> */</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">LEXICAL_OUTPUT_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"lexical output"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</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::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">VOCABULARY_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"vocabulary"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</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">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'f'</span><span class="plain-syntax">, </span><a href="2-wa.html#SP13" class="function-link"><span class="function-syntax">WordAssemblages::log</span></a><span class="plain-syntax">); /* |$</span><span class="identifier-syntax">f</span><span class="plain-syntax">| = </span><span class="identifier-syntax">log</span><span class="plain-syntax"> </span><span class="identifier-syntax">word</span><span class="plain-syntax"> </span><span class="identifier-syntax">assemblage</span><span class="plain-syntax"> */</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'v'</span><span class="plain-syntax">, </span><a href="2-vcb.html#SP6" class="function-link"><span class="function-syntax">Vocabulary::log</span></a><span class="plain-syntax">); /* |$</span><span class="identifier-syntax">v</span><span class="plain-syntax">| = </span><span class="identifier-syntax">log</span><span class="plain-syntax"> </span><span class="identifier-syntax">vocabulary</span><span class="plain-syntax"> </span><span class="identifier-syntax">entry</span><span class="plain-syntax"> */</span>
<span class="plain-syntax"> </span><a href="3-lxr.html#SP11" class="function-link"><span class="function-syntax">Lexer::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="2-vcb.html#SP3" class="function-link"><span class="function-syntax">Vocabulary::create_punctuation</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="4-prf.html#SP24" class="function-link"><span class="function-syntax">Preform::begin</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">WordsModule::end</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3_1"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register this module's memory allocation reasons</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> ;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-wm.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2"></a><b>&#167;3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register this module's stream writers</span><span class="named-paragraph-number">3.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">, &amp;</span><a href="2-wa.html#SP9" class="function-link"><span class="function-syntax">WordAssemblages::writer</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer_I</span><span class="plain-syntax">(</span><span class="character-syntax">'N'</span><span class="plain-syntax">, &amp;</span><a href="3-lxr.html#SP18" class="function-link"><span class="function-syntax">Lexer::writer</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer</span><span class="plain-syntax">(</span><span class="character-syntax">'V'</span><span class="plain-syntax">, &amp;</span><a href="2-vcb.html#SP8" class="function-link"><span class="function-syntax">Vocabulary::writer</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_writer_W</span><span class="plain-syntax">(</span><span class="character-syntax">'W'</span><span class="plain-syntax">, &amp;</span><a href="3-wrd.html#SP22" class="function-link"><span class="function-syntax">Wordings::writer</span></a><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-wm.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_3"></a><b>&#167;3.3. </b></p>
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">LEXICAL_OUTPUT_DA</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">VOCABULARY_DA</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3_4"></a><b>&#167;3.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register this module's debugging log aspects</span><span class="named-paragraph-number">3.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">LEXICAL_OUTPUT_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"lexical output"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</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::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">VOCABULARY_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"vocabulary"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-wm.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_5"></a><b>&#167;3.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Register this module's debugging log writers</span><span class="named-paragraph-number">3.5</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'f'</span><span class="plain-syntax">, </span><a href="2-wa.html#SP13" class="function-link"><span class="function-syntax">WordAssemblages::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Writers::register_logger</span><span class="plain-syntax">(</span><span class="character-syntax">'v'</span><span class="plain-syntax">, </span><a href="2-vcb.html#SP6" class="function-link"><span class="function-syntax">Vocabulary::log</span></a><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="1-wm.html#SP3">&#167;3</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="P-htitm.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresscurrent">wm</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="progresschapter"><a href="4-nw.html">4</a></li><li class="progressnext"><a href="2-vcb.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -228,7 +228,7 @@ creator, and a debugging logger:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Vocabulary::log</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">Vocabulary::log</span></span>:<br/>Words Module - <a href="1-wm.html#SP3_5">&#167;3.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vve</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Vocabulary::log</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">Vocabulary::log</span></span>:<br/>Words Module - <a href="1-wm.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vve</span><span class="plain-syntax">) {</span>
<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">vocabulary_entry</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">vve</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">ve</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"NULL"</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ve</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">exemplar</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"NULL-EXEMPLAR"</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
@ -271,7 +271,7 @@ structure:
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ve</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">exemplar</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">Vocabulary::writer</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">Vocabulary::writer</span></span>:<br/>Words Module - <a href="1-wm.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">format_string</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vV</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Vocabulary::writer</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">Vocabulary::writer</span></span>:<br/>Words Module - <a href="1-wm.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">format_string</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vV</span><span class="plain-syntax">) {</span>
<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">vocabulary_entry</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">vV</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">ve</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">"tried to write null vocabulary"</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">format_string</span><span class="plain-syntax">[0]) {</span>

View file

@ -185,7 +185,7 @@ frequently, since it consumes memory:
<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">void</span><span class="plain-syntax"> </span><span class="function-syntax">WordAssemblages::writer</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">WordAssemblages::writer</span></span>:<br/>Words Module - <a href="1-wm.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">format_string</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vW</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">WordAssemblages::writer</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">WordAssemblages::writer</span></span>:<br/>Words Module - <a href="1-wm.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">format_string</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vW</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">vW</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">wa</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="function-syntax">&lt;wa-&gt;</span><span class="element-syntax">no_indiv_words</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
@ -298,7 +298,7 @@ frequently, since it consumes memory:
<p class="commentary firstcommentary"><a id="SP13"></a><b>&#167;13. </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">WordAssemblages::log</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">WordAssemblages::log</span></span>:<br/>Words Module - <a href="1-wm.html#SP3_5">&#167;3.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vwa</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">WordAssemblages::log</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">WordAssemblages::log</span></span>:<br/>Words Module - <a href="1-wm.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vwa</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wa</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">word_assemblage</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">vwa</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">wa</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;null-words&gt;"</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">sp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>

View file

@ -533,7 +533,7 @@ distinguished. We'll do this with the letters <span class="extract"><span class=
<span class="plain-syntax"> </span><span class="identifier-syntax">lw_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">to</span><span class="plain-syntax">] = </span><span class="identifier-syntax">lw_array</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::writer</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">Lexer::writer</span></span>:<br/>Words Module - <a href="1-wm.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">format_string</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Lexer::writer</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">Lexer::writer</span></span>:<br/>Words Module - <a href="1-wm.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">format_string</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">wn</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">wn</span><span class="plain-syntax"> &gt;= </span><span class="identifier-syntax">lexer_wordcount</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">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">format_string</span><span class="plain-syntax">[0]) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'+'</span><span class="plain-syntax">: </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%w"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lw_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">wn</span><span class="plain-syntax">].</span><span class="element-syntax">lw_rawtext</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>

View file

@ -423,7 +423,7 @@ and we return <span class="extract"><span class="extract-syntax">w2</span></span
</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">Wordings::writer</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">Wordings::writer</span></span>:<br/>Words Module - <a href="1-wm.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">format_string</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Wordings::writer</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">Wordings::writer</span></span>:<br/>Words Module - <a href="1-wm.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">format_string</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="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">format_string</span><span class="plain-syntax">[0]) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'W'</span><span class="plain-syntax">: /* </span><span class="identifier-syntax">bare</span><span class="plain-syntax"> |%</span><span class="identifier-syntax">W</span><span class="plain-syntax">| </span><span class="identifier-syntax">means</span><span class="plain-syntax"> </span><span class="identifier-syntax">the</span><span class="plain-syntax"> </span><span class="identifier-syntax">same</span><span class="plain-syntax"> </span><span class="identifier-syntax">as</span><span class="plain-syntax"> |%-</span><span class="identifier-syntax">W</span><span class="plain-syntax">|, </span><span class="identifier-syntax">so</span><span class="plain-syntax"> </span><span class="identifier-syntax">fall</span><span class="plain-syntax"> </span><span class="identifier-syntax">through</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax">... */</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="character-syntax">'-'</span><span class="plain-syntax">: </span><span class="named-paragraph-container code-font"><a href="3-wrd.html#SP22_1" class="named-paragraph-link"><span class="named-paragraph">Write the stream with normalised casing</span><span class="named-paragraph-number">22.1</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>

View file

@ -28,7 +28,7 @@ void SyntaxModule::start(void) {
NodeType::metadata_setup();
Annotations::make_annotation_allowed_table();
Writers::register_logger('m', Node::log_tree); /* |$m| = log syntax tree from node */
Writers::register_logger_I('N', NodeType::log); /* |$N| = log individual node type */
Writers::register_logger_I('N', NodeType::log); /* |$N| = log individual node type */
Writers::register_logger('P', Node::log_node); /* |$P| = log individual parse node */
Writers::register_logger('T', Node::log_subtree); /* |$T| = log tree under node */
}

View file

@ -2,17 +2,14 @@
Setting up the use of this module.
@ This section simoly sets up the module in ways expected by //foundation//, and
contains no code of interest. The following constant exists only in tools
@ This section simoly sets up the module in ways expected by //foundation//,
and contains no code of interest. The following constant exists only in tools
which use this module:
@d WORDS_MODULE TRUE
@ This module defines the following classes:
@e LEXER_TEXT_MREASON
@e LEXER_WORDS_MREASON
@e source_file_CLASS
@e vocabulary_entry_CLASS
@e nonterminal_CLASS
@ -30,39 +27,32 @@ DECLARE_CLASS(ptoken)
@ Like all modules, this one must define a |start| and |end| function:
=
void WordsModule::start(void) {
Memory::reason_name(LEXER_TEXT_MREASON, "source text");
Memory::reason_name(LEXER_WORDS_MREASON, "source text details");
@<Register this module's memory allocation reasons@>;
@<Register this module's stream writers@>;
@<Register this module's debugging log aspects@>;
@<Register this module's debugging log writers@>;
Lexer::start();
Vocabulary::create_punctuation();
Preform::begin();
}
void WordsModule::end(void) {
}
@<Register this module's memory allocation reasons@> =
;
@<Register this module's stream writers@> =
Writers::register_writer('A', &WordAssemblages::writer);
Writers::register_writer_I('N', &Lexer::writer);
Writers::register_writer('V', &Vocabulary::writer);
Writers::register_writer_W('W', &Wordings::writer);
@
@e LEXER_TEXT_MREASON
@e LEXER_WORDS_MREASON
@e LEXICAL_OUTPUT_DA
@e VOCABULARY_DA
@<Register this module's debugging log aspects@> =
=
void WordsModule::start(void) {
Memory::reason_name(LEXER_TEXT_MREASON, "source text"); /* ho hum */
Memory::reason_name(LEXER_WORDS_MREASON, "source text details");
Writers::register_writer('A', &WordAssemblages::writer); /* |%A| = write word assemblage */
Writers::register_writer_I('N', &Lexer::writer); /* |%N| = write word with this number */
Writers::register_writer('V', &Vocabulary::writer); /* |%V| = write vocabulary entry */
Writers::register_writer_W('W', &Wordings::writer); /* |%W| = write wording */
Log::declare_aspect(LEXICAL_OUTPUT_DA, L"lexical output", FALSE, FALSE);
Log::declare_aspect(VOCABULARY_DA, L"vocabulary", FALSE, FALSE);
@<Register this module's debugging log writers@> =
Writers::register_logger('f', WordAssemblages::log);
Writers::register_logger('v', Vocabulary::log);
Writers::register_logger('f', WordAssemblages::log); /* |$f| = log word assemblage */
Writers::register_logger('v', Vocabulary::log); /* |$v| = log vocabulary entry */
Lexer::start();
Vocabulary::create_punctuation();
Preform::begin();
}
void WordsModule::end(void) {
}